mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-13 15:44:36 +00:00
PolyhedronVectorData core membervar cleanups
This commit is contained in:
parent
b415ac8f6b
commit
e126ca1823
11 changed files with 191 additions and 191 deletions
|
|
@ -357,12 +357,12 @@ void CollisionTrigger::setTriggerPolyhedron(const Polyhedron& rPolyhedron)
|
||||||
{
|
{
|
||||||
mCollisionTriggerPolyhedron = rPolyhedron;
|
mCollisionTriggerPolyhedron = rPolyhedron;
|
||||||
|
|
||||||
if (mCollisionTriggerPolyhedron.pointList.size() != 0) {
|
if (mCollisionTriggerPolyhedron.mPointList.size() != 0) {
|
||||||
mObjBox.minExtents.set(1e10, 1e10, 1e10);
|
mObjBox.minExtents.set(1e10, 1e10, 1e10);
|
||||||
mObjBox.maxExtents.set(-1e10, -1e10, -1e10);
|
mObjBox.maxExtents.set(-1e10, -1e10, -1e10);
|
||||||
for (U32 i = 0; i < mCollisionTriggerPolyhedron.pointList.size(); i++) {
|
for (U32 i = 0; i < mCollisionTriggerPolyhedron.mPointList.size(); i++) {
|
||||||
mObjBox.minExtents.setMin(mCollisionTriggerPolyhedron.pointList[i]);
|
mObjBox.minExtents.setMin(mCollisionTriggerPolyhedron.mPointList[i]);
|
||||||
mObjBox.maxExtents.setMax(mCollisionTriggerPolyhedron.pointList[i]);
|
mObjBox.maxExtents.setMax(mCollisionTriggerPolyhedron.mPointList[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -374,7 +374,7 @@ void CollisionTrigger::setTriggerPolyhedron(const Polyhedron& rPolyhedron)
|
||||||
setTransform(xform);
|
setTransform(xform);
|
||||||
|
|
||||||
mClippedList.clear();
|
mClippedList.clear();
|
||||||
mClippedList.mPlaneList = mCollisionTriggerPolyhedron.planeList;
|
mClippedList.mPlaneList = mCollisionTriggerPolyhedron.mPlaneList;
|
||||||
// for (U32 i = 0; i < mClippedList.mPlaneList.size(); i++)
|
// for (U32 i = 0; i < mClippedList.mPlaneList.size(); i++)
|
||||||
// mClippedList.mPlaneList[i].neg();
|
// mClippedList.mPlaneList[i].neg();
|
||||||
|
|
||||||
|
|
@ -412,7 +412,7 @@ void CollisionTrigger::setTriggerPolyhedron(const Polyhedron& rPolyhedron)
|
||||||
|
|
||||||
bool CollisionTrigger::testObject(GameBase* enter)
|
bool CollisionTrigger::testObject(GameBase* enter)
|
||||||
{
|
{
|
||||||
if (mCollisionTriggerPolyhedron.pointList.size() == 0)
|
if (mCollisionTriggerPolyhedron.mPointList.size() == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
mClippedList.clear();
|
mClippedList.clear();
|
||||||
|
|
@ -507,17 +507,17 @@ U32 CollisionTrigger::packUpdate(NetConnection* con, U32 mask, BitStream* stream
|
||||||
// Write the polyhedron
|
// Write the polyhedron
|
||||||
if (stream->writeFlag(mask & PolyMask))
|
if (stream->writeFlag(mask & PolyMask))
|
||||||
{
|
{
|
||||||
stream->write(mCollisionTriggerPolyhedron.pointList.size());
|
stream->write(mCollisionTriggerPolyhedron.mPointList.size());
|
||||||
for (i = 0; i < mCollisionTriggerPolyhedron.pointList.size(); i++)
|
for (i = 0; i < mCollisionTriggerPolyhedron.mPointList.size(); i++)
|
||||||
mathWrite(*stream, mCollisionTriggerPolyhedron.pointList[i]);
|
mathWrite(*stream, mCollisionTriggerPolyhedron.mPointList[i]);
|
||||||
|
|
||||||
stream->write(mCollisionTriggerPolyhedron.planeList.size());
|
stream->write(mCollisionTriggerPolyhedron.mPlaneList.size());
|
||||||
for (i = 0; i < mCollisionTriggerPolyhedron.planeList.size(); i++)
|
for (i = 0; i < mCollisionTriggerPolyhedron.mPlaneList.size(); i++)
|
||||||
mathWrite(*stream, mCollisionTriggerPolyhedron.planeList[i]);
|
mathWrite(*stream, mCollisionTriggerPolyhedron.mPlaneList[i]);
|
||||||
|
|
||||||
stream->write(mCollisionTriggerPolyhedron.edgeList.size());
|
stream->write(mCollisionTriggerPolyhedron.mEdgeList.size());
|
||||||
for (i = 0; i < mCollisionTriggerPolyhedron.edgeList.size(); i++) {
|
for (i = 0; i < mCollisionTriggerPolyhedron.mEdgeList.size(); i++) {
|
||||||
const Polyhedron::Edge& rEdge = mCollisionTriggerPolyhedron.edgeList[i];
|
const Polyhedron::Edge& rEdge = mCollisionTriggerPolyhedron.mEdgeList[i];
|
||||||
|
|
||||||
stream->write(rEdge.face[0]);
|
stream->write(rEdge.face[0]);
|
||||||
stream->write(rEdge.face[1]);
|
stream->write(rEdge.face[1]);
|
||||||
|
|
@ -555,19 +555,19 @@ void CollisionTrigger::unpackUpdate(NetConnection* con, BitStream* stream)
|
||||||
{
|
{
|
||||||
Polyhedron tempPH;
|
Polyhedron tempPH;
|
||||||
stream->read(&size);
|
stream->read(&size);
|
||||||
tempPH.pointList.setSize(size);
|
tempPH.mPointList.setSize(size);
|
||||||
for (i = 0; i < tempPH.pointList.size(); i++)
|
for (i = 0; i < tempPH.mPointList.size(); i++)
|
||||||
mathRead(*stream, &tempPH.pointList[i]);
|
mathRead(*stream, &tempPH.mPointList[i]);
|
||||||
|
|
||||||
stream->read(&size);
|
stream->read(&size);
|
||||||
tempPH.planeList.setSize(size);
|
tempPH.mPlaneList.setSize(size);
|
||||||
for (i = 0; i < tempPH.planeList.size(); i++)
|
for (i = 0; i < tempPH.mPlaneList.size(); i++)
|
||||||
mathRead(*stream, &tempPH.planeList[i]);
|
mathRead(*stream, &tempPH.mPlaneList[i]);
|
||||||
|
|
||||||
stream->read(&size);
|
stream->read(&size);
|
||||||
tempPH.edgeList.setSize(size);
|
tempPH.mEdgeList.setSize(size);
|
||||||
for (i = 0; i < tempPH.edgeList.size(); i++) {
|
for (i = 0; i < tempPH.mEdgeList.size(); i++) {
|
||||||
Polyhedron::Edge& rEdge = tempPH.edgeList[i];
|
Polyhedron::Edge& rEdge = tempPH.mEdgeList[i];
|
||||||
|
|
||||||
stream->read(&rEdge.face[0]);
|
stream->read(&rEdge.face[0]);
|
||||||
stream->read(&rEdge.face[1]);
|
stream->read(&rEdge.face[1]);
|
||||||
|
|
|
||||||
|
|
@ -167,11 +167,11 @@ void OcclusionVolume::buildSilhouette( const SceneCameraState& cameraState, Vect
|
||||||
|
|
||||||
if( mTransformDirty )
|
if( mTransformDirty )
|
||||||
{
|
{
|
||||||
const U32 numPoints = mPolyhedron.getNumPoints();
|
const U32 numPolyPoints = mPolyhedron.getNumPoints();
|
||||||
const PolyhedronType::PointType* points = getPolyhedron().getPoints();
|
const PolyhedronType::PointType* points = getPolyhedron().getPoints();
|
||||||
|
|
||||||
mWSPoints.setSize( numPoints );
|
mWSPoints.setSize(numPolyPoints);
|
||||||
for( U32 i = 0; i < numPoints; ++ i )
|
for( U32 i = 0; i < numPolyPoints; ++ i )
|
||||||
{
|
{
|
||||||
Point3F p = points[ i ];
|
Point3F p = points[ i ];
|
||||||
p.convolve( getScale() );
|
p.convolve( getScale() );
|
||||||
|
|
|
||||||
|
|
@ -283,17 +283,17 @@ U32 PhysicalZone::packUpdate(NetConnection* con, U32 mask, BitStream* stream)
|
||||||
if (stream->writeFlag(mask & PolyhedronMask))
|
if (stream->writeFlag(mask & PolyhedronMask))
|
||||||
{
|
{
|
||||||
// Write the polyhedron
|
// Write the polyhedron
|
||||||
stream->write(mPolyhedron.pointList.size());
|
stream->write(mPolyhedron.mPointList.size());
|
||||||
for (i = 0; i < mPolyhedron.pointList.size(); i++)
|
for (i = 0; i < mPolyhedron.mPointList.size(); i++)
|
||||||
mathWrite(*stream, mPolyhedron.pointList[i]);
|
mathWrite(*stream, mPolyhedron.mPointList[i]);
|
||||||
|
|
||||||
stream->write(mPolyhedron.planeList.size());
|
stream->write(mPolyhedron.mPlaneList.size());
|
||||||
for (i = 0; i < mPolyhedron.planeList.size(); i++)
|
for (i = 0; i < mPolyhedron.mPlaneList.size(); i++)
|
||||||
mathWrite(*stream, mPolyhedron.planeList[i]);
|
mathWrite(*stream, mPolyhedron.mPlaneList[i]);
|
||||||
|
|
||||||
stream->write(mPolyhedron.edgeList.size());
|
stream->write(mPolyhedron.mEdgeList.size());
|
||||||
for (i = 0; i < mPolyhedron.edgeList.size(); i++) {
|
for (i = 0; i < mPolyhedron.mEdgeList.size(); i++) {
|
||||||
const Polyhedron::Edge& rEdge = mPolyhedron.edgeList[i];
|
const Polyhedron::Edge& rEdge = mPolyhedron.mEdgeList[i];
|
||||||
|
|
||||||
stream->write(rEdge.face[0]);
|
stream->write(rEdge.face[0]);
|
||||||
stream->write(rEdge.face[1]);
|
stream->write(rEdge.face[1]);
|
||||||
|
|
@ -340,19 +340,19 @@ void PhysicalZone::unpackUpdate(NetConnection* con, BitStream* stream)
|
||||||
|
|
||||||
// Read the polyhedron
|
// Read the polyhedron
|
||||||
stream->read(&size);
|
stream->read(&size);
|
||||||
tempPH.pointList.setSize(size);
|
tempPH.mPointList.setSize(size);
|
||||||
for (i = 0; i < tempPH.pointList.size(); i++)
|
for (i = 0; i < tempPH.mPointList.size(); i++)
|
||||||
mathRead(*stream, &tempPH.pointList[i]);
|
mathRead(*stream, &tempPH.mPointList[i]);
|
||||||
|
|
||||||
stream->read(&size);
|
stream->read(&size);
|
||||||
tempPH.planeList.setSize(size);
|
tempPH.mPlaneList.setSize(size);
|
||||||
for (i = 0; i < tempPH.planeList.size(); i++)
|
for (i = 0; i < tempPH.mPlaneList.size(); i++)
|
||||||
mathRead(*stream, &tempPH.planeList[i]);
|
mathRead(*stream, &tempPH.mPlaneList[i]);
|
||||||
|
|
||||||
stream->read(&size);
|
stream->read(&size);
|
||||||
tempPH.edgeList.setSize(size);
|
tempPH.mEdgeList.setSize(size);
|
||||||
for (i = 0; i < tempPH.edgeList.size(); i++) {
|
for (i = 0; i < tempPH.mEdgeList.size(); i++) {
|
||||||
Polyhedron::Edge& rEdge = tempPH.edgeList[i];
|
Polyhedron::Edge& rEdge = tempPH.mEdgeList[i];
|
||||||
|
|
||||||
stream->read(&rEdge.face[0]);
|
stream->read(&rEdge.face[0]);
|
||||||
stream->read(&rEdge.face[1]);
|
stream->read(&rEdge.face[1]);
|
||||||
|
|
@ -408,12 +408,12 @@ void PhysicalZone::setPolyhedron(const Polyhedron& rPolyhedron)
|
||||||
{
|
{
|
||||||
mPolyhedron = rPolyhedron;
|
mPolyhedron = rPolyhedron;
|
||||||
|
|
||||||
if (mPolyhedron.pointList.size() != 0) {
|
if (mPolyhedron.mPointList.size() != 0) {
|
||||||
mObjBox.minExtents.set(1e10, 1e10, 1e10);
|
mObjBox.minExtents.set(1e10, 1e10, 1e10);
|
||||||
mObjBox.maxExtents.set(-1e10, -1e10, -1e10);
|
mObjBox.maxExtents.set(-1e10, -1e10, -1e10);
|
||||||
for (U32 i = 0; i < mPolyhedron.pointList.size(); i++) {
|
for (U32 i = 0; i < mPolyhedron.mPointList.size(); i++) {
|
||||||
mObjBox.minExtents.setMin(mPolyhedron.pointList[i]);
|
mObjBox.minExtents.setMin(mPolyhedron.mPointList[i]);
|
||||||
mObjBox.maxExtents.setMax(mPolyhedron.pointList[i]);
|
mObjBox.maxExtents.setMax(mPolyhedron.mPointList[i]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
mObjBox.minExtents.set(-0.5, -0.5, -0.5);
|
mObjBox.minExtents.set(-0.5, -0.5, -0.5);
|
||||||
|
|
@ -424,7 +424,7 @@ void PhysicalZone::setPolyhedron(const Polyhedron& rPolyhedron)
|
||||||
setTransform(xform);
|
setTransform(xform);
|
||||||
|
|
||||||
mClippedList.clear();
|
mClippedList.clear();
|
||||||
mClippedList.mPlaneList = mPolyhedron.planeList;
|
mClippedList.mPlaneList = mPolyhedron.mPlaneList;
|
||||||
|
|
||||||
MatrixF base(true);
|
MatrixF base(true);
|
||||||
base.scale(Point3F(1.0/mObjScale.x,
|
base.scale(Point3F(1.0/mObjScale.x,
|
||||||
|
|
@ -481,7 +481,7 @@ bool PhysicalZone::testObject(SceneObject* enter)
|
||||||
// all. And whats the point of building a convex if no collision methods
|
// all. And whats the point of building a convex if no collision methods
|
||||||
// are implemented?
|
// are implemented?
|
||||||
|
|
||||||
if (mPolyhedron.pointList.size() == 0)
|
if (mPolyhedron.mPointList.size() == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
mClippedList.clear();
|
mClippedList.clear();
|
||||||
|
|
|
||||||
|
|
@ -245,16 +245,16 @@ ConsoleGetType( TypeTriggerPolyhedron )
|
||||||
Polyhedron* pPoly = reinterpret_cast<Polyhedron*>(dptr);
|
Polyhedron* pPoly = reinterpret_cast<Polyhedron*>(dptr);
|
||||||
|
|
||||||
// First point is corner, need to find the three vectors...`
|
// First point is corner, need to find the three vectors...`
|
||||||
Point3F origin = pPoly->pointList[0];
|
Point3F origin = pPoly->mPointList[0];
|
||||||
U32 currVec = 0;
|
U32 currVec = 0;
|
||||||
Point3F vecs[3];
|
Point3F vecs[3];
|
||||||
for (i = 0; i < pPoly->edgeList.size(); i++) {
|
for (i = 0; i < pPoly->mEdgeList.size(); i++) {
|
||||||
const U32 *vertex = pPoly->edgeList[i].vertex;
|
const U32 *vertex = pPoly->mEdgeList[i].vertex;
|
||||||
if (vertex[0] == 0)
|
if (vertex[0] == 0)
|
||||||
vecs[currVec++] = pPoly->pointList[vertex[1]] - origin;
|
vecs[currVec++] = pPoly->mPointList[vertex[1]] - origin;
|
||||||
else
|
else
|
||||||
if (vertex[1] == 0)
|
if (vertex[1] == 0)
|
||||||
vecs[currVec++] = pPoly->pointList[vertex[0]] - origin;
|
vecs[currVec++] = pPoly->mPointList[vertex[0]] - origin;
|
||||||
}
|
}
|
||||||
AssertFatal(currVec == 3, "Internal error: Bad trigger polyhedron");
|
AssertFatal(currVec == 3, "Internal error: Bad trigger polyhedron");
|
||||||
|
|
||||||
|
|
@ -302,45 +302,45 @@ ConsoleSetType( TypeTriggerPolyhedron )
|
||||||
// edges with CCW instead of CW order for face[0] and that it b) lets plane
|
// edges with CCW instead of CW order for face[0] and that it b) lets plane
|
||||||
// normals face outwards rather than inwards.
|
// normals face outwards rather than inwards.
|
||||||
|
|
||||||
pPoly->pointList.setSize(8);
|
pPoly->mPointList.setSize(8);
|
||||||
pPoly->pointList[0] = origin;
|
pPoly->mPointList[0] = origin;
|
||||||
pPoly->pointList[1] = origin + vecs[0];
|
pPoly->mPointList[1] = origin + vecs[0];
|
||||||
pPoly->pointList[2] = origin + vecs[1];
|
pPoly->mPointList[2] = origin + vecs[1];
|
||||||
pPoly->pointList[3] = origin + vecs[2];
|
pPoly->mPointList[3] = origin + vecs[2];
|
||||||
pPoly->pointList[4] = origin + vecs[0] + vecs[1];
|
pPoly->mPointList[4] = origin + vecs[0] + vecs[1];
|
||||||
pPoly->pointList[5] = origin + vecs[0] + vecs[2];
|
pPoly->mPointList[5] = origin + vecs[0] + vecs[2];
|
||||||
pPoly->pointList[6] = origin + vecs[1] + vecs[2];
|
pPoly->mPointList[6] = origin + vecs[1] + vecs[2];
|
||||||
pPoly->pointList[7] = origin + vecs[0] + vecs[1] + vecs[2];
|
pPoly->mPointList[7] = origin + vecs[0] + vecs[1] + vecs[2];
|
||||||
|
|
||||||
Point3F normal;
|
Point3F normal;
|
||||||
pPoly->planeList.setSize(6);
|
pPoly->mPlaneList.setSize(6);
|
||||||
|
|
||||||
mCross(vecs[2], vecs[0], &normal);
|
mCross(vecs[2], vecs[0], &normal);
|
||||||
pPoly->planeList[0].set(origin, normal);
|
pPoly->mPlaneList[0].set(origin, normal);
|
||||||
mCross(vecs[0], vecs[1], &normal);
|
mCross(vecs[0], vecs[1], &normal);
|
||||||
pPoly->planeList[1].set(origin, normal);
|
pPoly->mPlaneList[1].set(origin, normal);
|
||||||
mCross(vecs[1], vecs[2], &normal);
|
mCross(vecs[1], vecs[2], &normal);
|
||||||
pPoly->planeList[2].set(origin, normal);
|
pPoly->mPlaneList[2].set(origin, normal);
|
||||||
mCross(vecs[1], vecs[0], &normal);
|
mCross(vecs[1], vecs[0], &normal);
|
||||||
pPoly->planeList[3].set(pPoly->pointList[7], normal);
|
pPoly->mPlaneList[3].set(pPoly->mPointList[7], normal);
|
||||||
mCross(vecs[2], vecs[1], &normal);
|
mCross(vecs[2], vecs[1], &normal);
|
||||||
pPoly->planeList[4].set(pPoly->pointList[7], normal);
|
pPoly->mPlaneList[4].set(pPoly->mPointList[7], normal);
|
||||||
mCross(vecs[0], vecs[2], &normal);
|
mCross(vecs[0], vecs[2], &normal);
|
||||||
pPoly->planeList[5].set(pPoly->pointList[7], normal);
|
pPoly->mPlaneList[5].set(pPoly->mPointList[7], normal);
|
||||||
|
|
||||||
pPoly->edgeList.setSize(12);
|
pPoly->mEdgeList.setSize(12);
|
||||||
pPoly->edgeList[0].vertex[0] = 0; pPoly->edgeList[0].vertex[1] = 1; pPoly->edgeList[0].face[0] = 0; pPoly->edgeList[0].face[1] = 1;
|
pPoly->mEdgeList[0].vertex[0] = 0; pPoly->mEdgeList[0].vertex[1] = 1; pPoly->mEdgeList[0].face[0] = 0; pPoly->mEdgeList[0].face[1] = 1;
|
||||||
pPoly->edgeList[1].vertex[0] = 1; pPoly->edgeList[1].vertex[1] = 5; pPoly->edgeList[1].face[0] = 0; pPoly->edgeList[1].face[1] = 4;
|
pPoly->mEdgeList[1].vertex[0] = 1; pPoly->mEdgeList[1].vertex[1] = 5; pPoly->mEdgeList[1].face[0] = 0; pPoly->mEdgeList[1].face[1] = 4;
|
||||||
pPoly->edgeList[2].vertex[0] = 5; pPoly->edgeList[2].vertex[1] = 3; pPoly->edgeList[2].face[0] = 0; pPoly->edgeList[2].face[1] = 3;
|
pPoly->mEdgeList[2].vertex[0] = 5; pPoly->mEdgeList[2].vertex[1] = 3; pPoly->mEdgeList[2].face[0] = 0; pPoly->mEdgeList[2].face[1] = 3;
|
||||||
pPoly->edgeList[3].vertex[0] = 3; pPoly->edgeList[3].vertex[1] = 0; pPoly->edgeList[3].face[0] = 0; pPoly->edgeList[3].face[1] = 2;
|
pPoly->mEdgeList[3].vertex[0] = 3; pPoly->mEdgeList[3].vertex[1] = 0; pPoly->mEdgeList[3].face[0] = 0; pPoly->mEdgeList[3].face[1] = 2;
|
||||||
pPoly->edgeList[4].vertex[0] = 3; pPoly->edgeList[4].vertex[1] = 6; pPoly->edgeList[4].face[0] = 3; pPoly->edgeList[4].face[1] = 2;
|
pPoly->mEdgeList[4].vertex[0] = 3; pPoly->mEdgeList[4].vertex[1] = 6; pPoly->mEdgeList[4].face[0] = 3; pPoly->mEdgeList[4].face[1] = 2;
|
||||||
pPoly->edgeList[5].vertex[0] = 6; pPoly->edgeList[5].vertex[1] = 2; pPoly->edgeList[5].face[0] = 2; pPoly->edgeList[5].face[1] = 5;
|
pPoly->mEdgeList[5].vertex[0] = 6; pPoly->mEdgeList[5].vertex[1] = 2; pPoly->mEdgeList[5].face[0] = 2; pPoly->mEdgeList[5].face[1] = 5;
|
||||||
pPoly->edgeList[6].vertex[0] = 2; pPoly->edgeList[6].vertex[1] = 0; pPoly->edgeList[6].face[0] = 2; pPoly->edgeList[6].face[1] = 1;
|
pPoly->mEdgeList[6].vertex[0] = 2; pPoly->mEdgeList[6].vertex[1] = 0; pPoly->mEdgeList[6].face[0] = 2; pPoly->mEdgeList[6].face[1] = 1;
|
||||||
pPoly->edgeList[7].vertex[0] = 1; pPoly->edgeList[7].vertex[1] = 4; pPoly->edgeList[7].face[0] = 4; pPoly->edgeList[7].face[1] = 1;
|
pPoly->mEdgeList[7].vertex[0] = 1; pPoly->mEdgeList[7].vertex[1] = 4; pPoly->mEdgeList[7].face[0] = 4; pPoly->mEdgeList[7].face[1] = 1;
|
||||||
pPoly->edgeList[8].vertex[0] = 4; pPoly->edgeList[8].vertex[1] = 2; pPoly->edgeList[8].face[0] = 1; pPoly->edgeList[8].face[1] = 5;
|
pPoly->mEdgeList[8].vertex[0] = 4; pPoly->mEdgeList[8].vertex[1] = 2; pPoly->mEdgeList[8].face[0] = 1; pPoly->mEdgeList[8].face[1] = 5;
|
||||||
pPoly->edgeList[9].vertex[0] = 4; pPoly->edgeList[9].vertex[1] = 7; pPoly->edgeList[9].face[0] = 4; pPoly->edgeList[9].face[1] = 5;
|
pPoly->mEdgeList[9].vertex[0] = 4; pPoly->mEdgeList[9].vertex[1] = 7; pPoly->mEdgeList[9].face[0] = 4; pPoly->mEdgeList[9].face[1] = 5;
|
||||||
pPoly->edgeList[10].vertex[0] = 5; pPoly->edgeList[10].vertex[1] = 7; pPoly->edgeList[10].face[0] = 3; pPoly->edgeList[10].face[1] = 4;
|
pPoly->mEdgeList[10].vertex[0] = 5; pPoly->mEdgeList[10].vertex[1] = 7; pPoly->mEdgeList[10].face[0] = 3; pPoly->mEdgeList[10].face[1] = 4;
|
||||||
pPoly->edgeList[11].vertex[0] = 7; pPoly->edgeList[11].vertex[1] = 6; pPoly->edgeList[11].face[0] = 3; pPoly->edgeList[11].face[1] = 5;
|
pPoly->mEdgeList[11].vertex[0] = 7; pPoly->mEdgeList[11].vertex[1] = 6; pPoly->mEdgeList[11].face[0] = 3; pPoly->mEdgeList[11].face[1] = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -569,12 +569,12 @@ void Trigger::setTriggerPolyhedron(const Polyhedron& rPolyhedron)
|
||||||
{
|
{
|
||||||
mTriggerPolyhedron = rPolyhedron;
|
mTriggerPolyhedron = rPolyhedron;
|
||||||
|
|
||||||
if (mTriggerPolyhedron.pointList.size() != 0) {
|
if (mTriggerPolyhedron.mPointList.size() != 0) {
|
||||||
mObjBox.minExtents.set(1e10, 1e10, 1e10);
|
mObjBox.minExtents.set(1e10, 1e10, 1e10);
|
||||||
mObjBox.maxExtents.set(-1e10, -1e10, -1e10);
|
mObjBox.maxExtents.set(-1e10, -1e10, -1e10);
|
||||||
for (U32 i = 0; i < mTriggerPolyhedron.pointList.size(); i++) {
|
for (U32 i = 0; i < mTriggerPolyhedron.mPointList.size(); i++) {
|
||||||
mObjBox.minExtents.setMin(mTriggerPolyhedron.pointList[i]);
|
mObjBox.minExtents.setMin(mTriggerPolyhedron.mPointList[i]);
|
||||||
mObjBox.maxExtents.setMax(mTriggerPolyhedron.pointList[i]);
|
mObjBox.maxExtents.setMax(mTriggerPolyhedron.mPointList[i]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
mObjBox.minExtents.set(-0.5, -0.5, -0.5);
|
mObjBox.minExtents.set(-0.5, -0.5, -0.5);
|
||||||
|
|
@ -585,7 +585,7 @@ void Trigger::setTriggerPolyhedron(const Polyhedron& rPolyhedron)
|
||||||
setTransform(xform);
|
setTransform(xform);
|
||||||
|
|
||||||
mClippedList.clear();
|
mClippedList.clear();
|
||||||
mClippedList.mPlaneList = mTriggerPolyhedron.planeList;
|
mClippedList.mPlaneList = mTriggerPolyhedron.mPlaneList;
|
||||||
// for (U32 i = 0; i < mClippedList.mPlaneList.size(); i++)
|
// for (U32 i = 0; i < mClippedList.mPlaneList.size(); i++)
|
||||||
// mClippedList.mPlaneList[i].neg();
|
// mClippedList.mPlaneList[i].neg();
|
||||||
|
|
||||||
|
|
@ -623,7 +623,7 @@ void Trigger::setTriggerPolyhedron(const Polyhedron& rPolyhedron)
|
||||||
|
|
||||||
bool Trigger::testObject(GameBase* enter)
|
bool Trigger::testObject(GameBase* enter)
|
||||||
{
|
{
|
||||||
if (mTriggerPolyhedron.pointList.size() == 0)
|
if (mTriggerPolyhedron.mPointList.size() == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
mClippedList.clear();
|
mClippedList.clear();
|
||||||
|
|
@ -731,17 +731,17 @@ U32 Trigger::packUpdate(NetConnection* con, U32 mask, BitStream* stream)
|
||||||
// Write the polyhedron
|
// Write the polyhedron
|
||||||
if( stream->writeFlag( mask & PolyMask ) )
|
if( stream->writeFlag( mask & PolyMask ) )
|
||||||
{
|
{
|
||||||
stream->write(mTriggerPolyhedron.pointList.size());
|
stream->write(mTriggerPolyhedron.mPointList.size());
|
||||||
for (i = 0; i < mTriggerPolyhedron.pointList.size(); i++)
|
for (i = 0; i < mTriggerPolyhedron.mPointList.size(); i++)
|
||||||
mathWrite(*stream, mTriggerPolyhedron.pointList[i]);
|
mathWrite(*stream, mTriggerPolyhedron.mPointList[i]);
|
||||||
|
|
||||||
stream->write(mTriggerPolyhedron.planeList.size());
|
stream->write(mTriggerPolyhedron.mPlaneList.size());
|
||||||
for (i = 0; i < mTriggerPolyhedron.planeList.size(); i++)
|
for (i = 0; i < mTriggerPolyhedron.mPlaneList.size(); i++)
|
||||||
mathWrite(*stream, mTriggerPolyhedron.planeList[i]);
|
mathWrite(*stream, mTriggerPolyhedron.mPlaneList[i]);
|
||||||
|
|
||||||
stream->write(mTriggerPolyhedron.edgeList.size());
|
stream->write(mTriggerPolyhedron.mEdgeList.size());
|
||||||
for (i = 0; i < mTriggerPolyhedron.edgeList.size(); i++) {
|
for (i = 0; i < mTriggerPolyhedron.mEdgeList.size(); i++) {
|
||||||
const Polyhedron::Edge& rEdge = mTriggerPolyhedron.edgeList[i];
|
const Polyhedron::Edge& rEdge = mTriggerPolyhedron.mEdgeList[i];
|
||||||
|
|
||||||
stream->write(rEdge.face[0]);
|
stream->write(rEdge.face[0]);
|
||||||
stream->write(rEdge.face[1]);
|
stream->write(rEdge.face[1]);
|
||||||
|
|
@ -779,19 +779,19 @@ void Trigger::unpackUpdate(NetConnection* con, BitStream* stream)
|
||||||
{
|
{
|
||||||
Polyhedron tempPH;
|
Polyhedron tempPH;
|
||||||
stream->read(&size);
|
stream->read(&size);
|
||||||
tempPH.pointList.setSize(size);
|
tempPH.mPointList.setSize(size);
|
||||||
for (i = 0; i < tempPH.pointList.size(); i++)
|
for (i = 0; i < tempPH.mPointList.size(); i++)
|
||||||
mathRead(*stream, &tempPH.pointList[i]);
|
mathRead(*stream, &tempPH.mPointList[i]);
|
||||||
|
|
||||||
stream->read(&size);
|
stream->read(&size);
|
||||||
tempPH.planeList.setSize(size);
|
tempPH.mPlaneList.setSize(size);
|
||||||
for (i = 0; i < tempPH.planeList.size(); i++)
|
for (i = 0; i < tempPH.mPlaneList.size(); i++)
|
||||||
mathRead(*stream, &tempPH.planeList[i]);
|
mathRead(*stream, &tempPH.mPlaneList[i]);
|
||||||
|
|
||||||
stream->read(&size);
|
stream->read(&size);
|
||||||
tempPH.edgeList.setSize(size);
|
tempPH.mEdgeList.setSize(size);
|
||||||
for (i = 0; i < tempPH.edgeList.size(); i++) {
|
for (i = 0; i < tempPH.mEdgeList.size(); i++) {
|
||||||
Polyhedron::Edge& rEdge = tempPH.edgeList[i];
|
Polyhedron::Edge& rEdge = tempPH.mEdgeList[i];
|
||||||
|
|
||||||
stream->read(&rEdge.face[0]);
|
stream->read(&rEdge.face[0]);
|
||||||
stream->read(&rEdge.face[1]);
|
stream->read(&rEdge.face[1]);
|
||||||
|
|
|
||||||
|
|
@ -72,11 +72,11 @@ void ExtrudedPolyList::extrude(const Polyhedron& pt, const VectorF& vector)
|
||||||
mPolyPlaneList.clear();
|
mPolyPlaneList.clear();
|
||||||
|
|
||||||
// Determine which faces will be extruded.
|
// Determine which faces will be extruded.
|
||||||
mExtrudedList.setSize(pt.planeList.size());
|
mExtrudedList.setSize(pt.mPlaneList.size());
|
||||||
|
|
||||||
for (U32 f = 0; f < pt.planeList.size(); f++)
|
for (U32 f = 0; f < pt.mPlaneList.size(); f++)
|
||||||
{
|
{
|
||||||
const PlaneF& face = pt.planeList[f];
|
const PlaneF& face = pt.mPlaneList[f];
|
||||||
ExtrudedFace& eface = mExtrudedList[f];
|
ExtrudedFace& eface = mExtrudedList[f];
|
||||||
F32 dot = mDot(face,vector);
|
F32 dot = mDot(face,vector);
|
||||||
eface.active = dot > EqualEpsilon;
|
eface.active = dot > EqualEpsilon;
|
||||||
|
|
@ -96,9 +96,9 @@ void ExtrudedPolyList::extrude(const Polyhedron& pt, const VectorF& vector)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Produce extruded planes for bounding and internal edges
|
// Produce extruded planes for bounding and internal edges
|
||||||
for (U32 e = 0; e < pt.edgeList.size(); e++)
|
for (U32 e = 0; e < pt.mEdgeList.size(); e++)
|
||||||
{
|
{
|
||||||
Polyhedron::Edge const& edge = pt.edgeList[e];
|
Polyhedron::Edge const& edge = pt.mEdgeList[e];
|
||||||
ExtrudedFace& ef1 = mExtrudedList[edge.face[0]];
|
ExtrudedFace& ef1 = mExtrudedList[edge.face[0]];
|
||||||
ExtrudedFace& ef2 = mExtrudedList[edge.face[1]];
|
ExtrudedFace& ef2 = mExtrudedList[edge.face[1]];
|
||||||
if (ef1.active || ef2.active)
|
if (ef1.active || ef2.active)
|
||||||
|
|
@ -106,8 +106,8 @@ void ExtrudedPolyList::extrude(const Polyhedron& pt, const VectorF& vector)
|
||||||
|
|
||||||
// Assumes that the edge points are clockwise
|
// Assumes that the edge points are clockwise
|
||||||
// for face[0].
|
// for face[0].
|
||||||
const Point3F& p1 = pt.pointList[edge.vertex[1]];
|
const Point3F& p1 = pt.mPointList[edge.vertex[1]];
|
||||||
const Point3F &p2 = pt.pointList[edge.vertex[0]];
|
const Point3F &p2 = pt.mPointList[edge.vertex[0]];
|
||||||
Point3F p3 = p2 + vector;
|
Point3F p3 = p2 + vector;
|
||||||
|
|
||||||
mPlaneList.increment(2);
|
mPlaneList.increment(2);
|
||||||
|
|
|
||||||
|
|
@ -370,12 +370,12 @@ Polyhedron OptimizedPolyList::toPolyhedron() const
|
||||||
for( U32 i = 0; i < numPoints; ++ i )
|
for( U32 i = 0; i < numPoints; ++ i )
|
||||||
{
|
{
|
||||||
bool isDuplicate = false;
|
bool isDuplicate = false;
|
||||||
for( U32 npoint = 0; npoint < polyhedron.pointList.size(); ++ npoint )
|
for( U32 npoint = 0; npoint < polyhedron.mPointList.size(); ++ npoint )
|
||||||
{
|
{
|
||||||
if( npoint == i )
|
if( npoint == i )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if( !polyhedron.pointList[ npoint ].equal( mPoints[ i ] ) )
|
if( !polyhedron.mPointList[ npoint ].equal( mPoints[ i ] ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
pointRemap[ i ] = npoint;
|
pointRemap[ i ] = npoint;
|
||||||
|
|
@ -384,8 +384,8 @@ Polyhedron OptimizedPolyList::toPolyhedron() const
|
||||||
|
|
||||||
if( !isDuplicate )
|
if( !isDuplicate )
|
||||||
{
|
{
|
||||||
pointRemap[ i ] = polyhedron.pointList.size();
|
pointRemap[ i ] = polyhedron.mPointList.size();
|
||||||
polyhedron.pointList.push_back( mPoints[ i ] );
|
polyhedron.mPointList.push_back( mPoints[ i ] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -399,13 +399,13 @@ Polyhedron OptimizedPolyList::toPolyhedron() const
|
||||||
|
|
||||||
// Add the plane.
|
// Add the plane.
|
||||||
|
|
||||||
const U32 polyIndex = polyhedron.planeList.size();
|
const U32 polyIndex = polyhedron.mPlaneList.size();
|
||||||
polyhedron.planeList.push_back( mPlaneList[ poly.plane ] );
|
polyhedron.mPlaneList.push_back( mPlaneList[ poly.plane ] );
|
||||||
|
|
||||||
// Account for polyhedrons expecting planes to
|
// Account for polyhedrons expecting planes to
|
||||||
// face inwards.
|
// face inwards.
|
||||||
|
|
||||||
polyhedron.planeList.last().invert();
|
polyhedron.mPlaneList.last().invert();
|
||||||
|
|
||||||
// Gather remapped indices according to the
|
// Gather remapped indices according to the
|
||||||
// current polygon type.
|
// current polygon type.
|
||||||
|
|
@ -500,7 +500,7 @@ Polyhedron OptimizedPolyList::toPolyhedron() const
|
||||||
U32 lastIndex = 0;
|
U32 lastIndex = 0;
|
||||||
for( S32 n = indexList.size() - 1; n >= 0; -- n )
|
for( S32 n = indexList.size() - 1; n >= 0; -- n )
|
||||||
{
|
{
|
||||||
polyhedron.edgeList.push_back(
|
polyhedron.mEdgeList.push_back(
|
||||||
Polyhedron::Edge(
|
Polyhedron::Edge(
|
||||||
polyIndex, 0, // face1 filled later
|
polyIndex, 0, // face1 filled later
|
||||||
indexList[ lastIndex ], indexList[ n ]
|
indexList[ lastIndex ], indexList[ n ]
|
||||||
|
|
@ -514,16 +514,16 @@ Polyhedron OptimizedPolyList::toPolyhedron() const
|
||||||
// Finally, consolidate the edge list by merging all edges that
|
// Finally, consolidate the edge list by merging all edges that
|
||||||
// are shared by polygons.
|
// are shared by polygons.
|
||||||
|
|
||||||
for( U32 i = 0; i < polyhedron.edgeList.size(); ++ i )
|
for( U32 i = 0; i < polyhedron.mEdgeList.size(); ++ i )
|
||||||
{
|
{
|
||||||
Polyhedron::Edge& edge = polyhedron.edgeList[ i ];
|
Polyhedron::Edge& edge = polyhedron.mEdgeList[ i ];
|
||||||
|
|
||||||
// Find the corresponding duplicate edge, if any, and merge
|
// Find the corresponding duplicate edge, if any, and merge
|
||||||
// it into our current edge.
|
// it into our current edge.
|
||||||
|
|
||||||
for( U32 n = i + 1; n < polyhedron.edgeList.size(); ++ n )
|
for( U32 n = i + 1; n < polyhedron.mEdgeList.size(); ++ n )
|
||||||
{
|
{
|
||||||
const Polyhedron::Edge& thisEdge = polyhedron.edgeList[ n ];
|
const Polyhedron::Edge& thisEdge = polyhedron.mEdgeList[ n ];
|
||||||
|
|
||||||
if( ( thisEdge.vertex[ 0 ] == edge.vertex[ 1 ] &&
|
if( ( thisEdge.vertex[ 0 ] == edge.vertex[ 1 ] &&
|
||||||
thisEdge.vertex[ 1 ] == edge.vertex[ 0 ] ) ||
|
thisEdge.vertex[ 1 ] == edge.vertex[ 0 ] ) ||
|
||||||
|
|
@ -531,7 +531,7 @@ Polyhedron OptimizedPolyList::toPolyhedron() const
|
||||||
thisEdge.vertex[ 1 ] == edge.vertex[ 1 ] ) )
|
thisEdge.vertex[ 1 ] == edge.vertex[ 1 ] ) )
|
||||||
{
|
{
|
||||||
edge.face[ 1 ] = thisEdge.face[ 0 ];
|
edge.face[ 1 ] = thisEdge.face[ 0 ];
|
||||||
polyhedron.edgeList.erase( n );
|
polyhedron.mEdgeList.erase( n );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -137,8 +137,8 @@ void PolyhedronVectorData::buildFromPlanes( const PlaneSetF& planes )
|
||||||
|
|
||||||
S32 v1index = -1;
|
S32 v1index = -1;
|
||||||
bool v1Existed = false;
|
bool v1Existed = false;
|
||||||
for( U32 nvert = 0; nvert < pointList.size(); ++ nvert )
|
for( U32 nvert = 0; nvert < mPointList.size(); ++ nvert )
|
||||||
if( pointList[ nvert ].equal( v1, 0.001f ) )
|
if(mPointList[ nvert ].equal( v1, 0.001f ) )
|
||||||
{
|
{
|
||||||
v1index = nvert;
|
v1index = nvert;
|
||||||
v1Existed = true;
|
v1Existed = true;
|
||||||
|
|
@ -149,8 +149,8 @@ void PolyhedronVectorData::buildFromPlanes( const PlaneSetF& planes )
|
||||||
|
|
||||||
S32 v2index = -1;
|
S32 v2index = -1;
|
||||||
bool v2Existed = false;
|
bool v2Existed = false;
|
||||||
for( U32 nvert = 0; nvert < pointList.size(); ++ nvert )
|
for( U32 nvert = 0; nvert < mPointList.size(); ++ nvert )
|
||||||
if( pointList[ nvert ].equal( v2, 0.001f ) )
|
if(mPointList[ nvert ].equal( v2, 0.001f ) )
|
||||||
{
|
{
|
||||||
v2index = nvert;
|
v2index = nvert;
|
||||||
v2Existed = true;
|
v2Existed = true;
|
||||||
|
|
@ -161,30 +161,30 @@ void PolyhedronVectorData::buildFromPlanes( const PlaneSetF& planes )
|
||||||
|
|
||||||
if( !v1Existed )
|
if( !v1Existed )
|
||||||
{
|
{
|
||||||
v1index = pointList.size();
|
v1index = mPointList.size();
|
||||||
pointList.push_back( v1 );
|
mPointList.push_back( v1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add vertex 2, if necessary.
|
// Add vertex 2, if necessary.
|
||||||
|
|
||||||
if( !v2Existed )
|
if( !v2Existed )
|
||||||
{
|
{
|
||||||
v2index = pointList.size();
|
v2index = mPointList.size();
|
||||||
pointList.push_back( v2 );
|
mPointList.push_back( v2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
// If both v1 and v2 already existed in the point
|
// If both v1 and v2 already existed in the point
|
||||||
// set, this must be an edge that we are sharing so try
|
// set, this must be an edge that we are sharing so try
|
||||||
// to find it.
|
// to find it.
|
||||||
|
|
||||||
const U32 thisPlaneIndex = planeList.size();
|
const U32 thisPlaneIndex = mPlaneList.size();
|
||||||
bool foundExistingEdge = false;
|
bool foundExistingEdge = false;
|
||||||
|
|
||||||
if( v1Existed && v2Existed )
|
if( v1Existed && v2Existed )
|
||||||
{
|
{
|
||||||
for( U32 nedge = 0; nedge < edgeList.size(); ++ nedge )
|
for( U32 nedge = 0; nedge < mEdgeList.size(); ++ nedge )
|
||||||
{
|
{
|
||||||
Edge& edge = edgeList[ nedge ];
|
Edge& edge = mEdgeList[ nedge ];
|
||||||
|
|
||||||
if( ( edge.vertex[ 0 ] == v1index && edge.vertex[ 1 ] == v2index ) ||
|
if( ( edge.vertex[ 0 ] == v1index && edge.vertex[ 1 ] == v2index ) ||
|
||||||
( edge.vertex[ 0 ] == v2index && edge.vertex[ 1 ] == v1index ) )
|
( edge.vertex[ 0 ] == v2index && edge.vertex[ 1 ] == v1index ) )
|
||||||
|
|
@ -222,13 +222,13 @@ void PolyhedronVectorData::buildFromPlanes( const PlaneSetF& planes )
|
||||||
|
|
||||||
if( !invert )
|
if( !invert )
|
||||||
{
|
{
|
||||||
edgeList.push_back(
|
mEdgeList.push_back(
|
||||||
Edge( thisPlaneIndex, 0, v1index, v2index )
|
Edge( thisPlaneIndex, 0, v1index, v2index )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
edgeList.push_back(
|
mEdgeList.push_back(
|
||||||
Edge( thisPlaneIndex, 0, v2index, v1index )
|
Edge( thisPlaneIndex, 0, v2index, v1index )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -242,6 +242,6 @@ void PolyhedronVectorData::buildFromPlanes( const PlaneSetF& planes )
|
||||||
// If this plane produced edges, add it.
|
// If this plane produced edges, add it.
|
||||||
|
|
||||||
if( haveEdges )
|
if( haveEdges )
|
||||||
planeList.push_back( currentPlane );
|
mPlaneList.push_back( currentPlane );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -124,42 +124,42 @@ struct PolyhedronVectorData : public PolyhedronData
|
||||||
typedef Vector< Edge > EdgeListType;
|
typedef Vector< Edge > EdgeListType;
|
||||||
|
|
||||||
/// List of planes. Note that by default, the normals facing *inwards*.
|
/// List of planes. Note that by default, the normals facing *inwards*.
|
||||||
PlaneListType planeList;
|
PlaneListType mPlaneList;
|
||||||
|
|
||||||
/// List of vertices.
|
/// List of vertices.
|
||||||
PointListType pointList;
|
PointListType mPointList;
|
||||||
|
|
||||||
/// List of edges.
|
/// List of edges.
|
||||||
EdgeListType edgeList;
|
EdgeListType mEdgeList;
|
||||||
|
|
||||||
PolyhedronVectorData()
|
PolyhedronVectorData()
|
||||||
{
|
{
|
||||||
VECTOR_SET_ASSOCIATION( pointList );
|
VECTOR_SET_ASSOCIATION(mPointList);
|
||||||
VECTOR_SET_ASSOCIATION( planeList );
|
VECTOR_SET_ASSOCIATION(mPlaneList);
|
||||||
VECTOR_SET_ASSOCIATION( edgeList );
|
VECTOR_SET_ASSOCIATION(mEdgeList);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @name Accessors
|
/// @name Accessors
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
/// Return the number of planes that make up this polyhedron.
|
/// Return the number of planes that make up this polyhedron.
|
||||||
U32 getNumPlanes() const { return planeList.size(); }
|
U32 getNumPlanes() const { return mPlaneList.size(); }
|
||||||
|
|
||||||
/// Return the planes that make up the polyhedron.
|
/// Return the planes that make up the polyhedron.
|
||||||
/// @note The normals of these planes are facing *inwards*.
|
/// @note The normals of these planes are facing *inwards*.
|
||||||
PlaneF* getPlanes() const { return planeList.address(); }
|
PlaneF* getPlanes() const { return mPlaneList.address(); }
|
||||||
|
|
||||||
/// Return the number of points that this polyhedron has.
|
/// Return the number of points that this polyhedron has.
|
||||||
U32 getNumPoints() const { return pointList.size(); }
|
U32 getNumPoints() const { return mPointList.size(); }
|
||||||
|
|
||||||
///
|
///
|
||||||
Point3F* getPoints() const { return pointList.address(); }
|
Point3F* getPoints() const { return mPointList.address(); }
|
||||||
|
|
||||||
/// Return the number of edges that this polyhedron has.
|
/// Return the number of edges that this polyhedron has.
|
||||||
U32 getNumEdges() const { return edgeList.size(); }
|
U32 getNumEdges() const { return mEdgeList.size(); }
|
||||||
|
|
||||||
///
|
///
|
||||||
Edge* getEdges() const { return edgeList.address(); }
|
Edge* getEdges() const { return mEdgeList.address(); }
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
|
|
@ -168,9 +168,9 @@ struct PolyhedronVectorData : public PolyhedronData
|
||||||
|
|
||||||
void buildBox( const MatrixF& mat, const Box3F& box, bool invertNormals = false )
|
void buildBox( const MatrixF& mat, const Box3F& box, bool invertNormals = false )
|
||||||
{
|
{
|
||||||
pointList.setSize( 8 );
|
mPointList.setSize( 8 );
|
||||||
planeList.setSize( 6 );
|
mPlaneList.setSize( 6 );
|
||||||
edgeList.setSize( 12 );
|
mEdgeList.setSize( 12 );
|
||||||
|
|
||||||
buildBoxData( *this, mat, box, invertNormals );
|
buildBoxData( *this, mat, box, invertNormals );
|
||||||
}
|
}
|
||||||
|
|
@ -190,13 +190,13 @@ struct PolyhedronUnmanagedVectorData : public PolyhedronData
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
/// List of planes. Note that by default, the normals facing *inwards*.
|
/// List of planes. Note that by default, the normals facing *inwards*.
|
||||||
PlaneListType planeList;
|
PlaneListType mPlaneList;
|
||||||
|
|
||||||
/// List of vertices.
|
/// List of vertices.
|
||||||
PointListType pointList;
|
PointListType mPointList;
|
||||||
|
|
||||||
/// List of edges.
|
/// List of edges.
|
||||||
EdgeListType edgeList;
|
EdgeListType mEdgeList;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
@ -204,26 +204,26 @@ struct PolyhedronUnmanagedVectorData : public PolyhedronData
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
/// Return the number of planes that make up this polyhedron.
|
/// Return the number of planes that make up this polyhedron.
|
||||||
U32 getNumPlanes() const { return planeList.size(); }
|
U32 getNumPlanes() const { return mPlaneList.size(); }
|
||||||
|
|
||||||
/// Return the planes that make up the polyhedron.
|
/// Return the planes that make up the polyhedron.
|
||||||
/// @note The normals of these planes are facing *inwards*.
|
/// @note The normals of these planes are facing *inwards*.
|
||||||
const PlaneF* getPlanes() const { return planeList.address(); }
|
const PlaneF* getPlanes() const { return mPlaneList.address(); }
|
||||||
PlaneF* getPlanes() { return planeList.address(); }
|
PlaneF* getPlanes() { return mPlaneList.address(); }
|
||||||
|
|
||||||
/// Return the number of points that this polyhedron has.
|
/// Return the number of points that this polyhedron has.
|
||||||
U32 getNumPoints() const { return pointList.size(); }
|
U32 getNumPoints() const { return mPointList.size(); }
|
||||||
|
|
||||||
///
|
///
|
||||||
const Point3F* getPoints() const { return pointList.address(); }
|
const Point3F* getPoints() const { return mPointList.address(); }
|
||||||
Point3F* getPoints() { return pointList.address(); }
|
Point3F* getPoints() { return mPointList.address(); }
|
||||||
|
|
||||||
/// Return the number of edges that this polyhedron has.
|
/// Return the number of edges that this polyhedron has.
|
||||||
U32 getNumEdges() const { return edgeList.size(); }
|
U32 getNumEdges() const { return mEdgeList.size(); }
|
||||||
|
|
||||||
///
|
///
|
||||||
const Edge* getEdges() const { return edgeList.address(); }
|
const Edge* getEdges() const { return mEdgeList.address(); }
|
||||||
Edge* getEdges() { return edgeList.address(); }
|
Edge* getEdges() { return mEdgeList.address(); }
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
};
|
};
|
||||||
|
|
@ -239,13 +239,13 @@ struct PolyhedronFixedVectorData : public PolyhedronData
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
/// List of planes. Note that by default, the normals facing *inwards*.
|
/// List of planes. Note that by default, the normals facing *inwards*.
|
||||||
PlaneListType planeList;
|
PlaneListType mPlaneList;
|
||||||
|
|
||||||
/// List of vertices.
|
/// List of vertices.
|
||||||
PointListType pointList;
|
PointListType mPointList;
|
||||||
|
|
||||||
/// List of edges.
|
/// List of edges.
|
||||||
EdgeListType edgeList;
|
EdgeListType mEdgeList;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
@ -302,9 +302,9 @@ struct PolyhedronImpl : public Base
|
||||||
/// Construct a polyhedron described by the given planes and edges.
|
/// Construct a polyhedron described by the given planes and edges.
|
||||||
PolyhedronImpl( PlaneListType planes, PointListType points, EdgeListType edges )
|
PolyhedronImpl( PlaneListType planes, PointListType points, EdgeListType edges )
|
||||||
{
|
{
|
||||||
this->planeList = planes;
|
this->mPlaneList = planes;
|
||||||
this->pointList = points;
|
this->mPointList = points;
|
||||||
this->edgeList = edges;
|
this->mEdgeList = edges;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return the AABB around the polyhedron.
|
/// Return the AABB around the polyhedron.
|
||||||
|
|
|
||||||
|
|
@ -462,7 +462,7 @@ void PolyhedronData::buildBoxData( Polyhedron& poly, const MatrixF& mat, const B
|
||||||
|
|
||||||
// Corner points.
|
// Corner points.
|
||||||
|
|
||||||
typename Polyhedron::PointListType& pointList = poly.pointList;
|
typename Polyhedron::PointListType& pointList = poly.mPointList;
|
||||||
|
|
||||||
pointList[ 0 ] = min; // near left bottom
|
pointList[ 0 ] = min; // near left bottom
|
||||||
pointList[ 1 ] = min + yvec; // far left bottom
|
pointList[ 1 ] = min + yvec; // far left bottom
|
||||||
|
|
@ -475,7 +475,7 @@ void PolyhedronData::buildBoxData( Polyhedron& poly, const MatrixF& mat, const B
|
||||||
|
|
||||||
// Side planes.
|
// Side planes.
|
||||||
|
|
||||||
typename Polyhedron::PlaneListType& planeList = poly.planeList;
|
typename Polyhedron::PlaneListType& planeList = poly.mPlaneList;
|
||||||
|
|
||||||
const F32 pos = invertNormals ? -1.f : 1.f;
|
const F32 pos = invertNormals ? -1.f : 1.f;
|
||||||
const F32 neg = - pos;
|
const F32 neg = - pos;
|
||||||
|
|
@ -490,7 +490,7 @@ void PolyhedronData::buildBoxData( Polyhedron& poly, const MatrixF& mat, const B
|
||||||
// The edges are constructed so that the vertices
|
// The edges are constructed so that the vertices
|
||||||
// are oriented clockwise for face[0].
|
// are oriented clockwise for face[0].
|
||||||
|
|
||||||
typename Polyhedron::EdgeType* edge = &poly.edgeList[ 0 ];
|
typename Polyhedron::EdgeType* edge = &poly.mEdgeList[ 0 ];
|
||||||
|
|
||||||
for( U32 i = 0; i < 4; ++ i )
|
for( U32 i = 0; i < 4; ++ i )
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -215,27 +215,27 @@ void ScenePolyhedralObject< Base, P >::unpackUpdate( NetConnection* connection,
|
||||||
// Read planes.
|
// Read planes.
|
||||||
|
|
||||||
const U32 numPlanes = stream->readInt( 8 );
|
const U32 numPlanes = stream->readInt( 8 );
|
||||||
mPolyhedron.planeList.setSize( numPlanes );
|
mPolyhedron.mPlaneList.setSize( numPlanes );
|
||||||
|
|
||||||
for( U32 i = 0; i < numPlanes; ++ i )
|
for( U32 i = 0; i < numPlanes; ++ i )
|
||||||
mathRead( *stream, &mPolyhedron.planeList[ i ] );
|
mathRead( *stream, &mPolyhedron.mPlaneList[ i ] );
|
||||||
|
|
||||||
// Read points.
|
// Read points.
|
||||||
|
|
||||||
const U32 numPoints = stream->readInt( 8 );
|
const U32 numPoints = stream->readInt( 8 );
|
||||||
mPolyhedron.pointList.setSize( numPoints );
|
mPolyhedron.mPointList.setSize( numPoints );
|
||||||
|
|
||||||
for( U32 i = 0; i < numPoints; ++ i )
|
for( U32 i = 0; i < numPoints; ++ i )
|
||||||
mathRead( *stream, &mPolyhedron.pointList[ i ] );
|
mathRead( *stream, &mPolyhedron.mPointList[ i ] );
|
||||||
|
|
||||||
// Read edges.
|
// Read edges.
|
||||||
|
|
||||||
const U32 numEdges = stream->readInt( 8 );
|
const U32 numEdges = stream->readInt( 8 );
|
||||||
mPolyhedron.edgeList.setSize( numEdges );
|
mPolyhedron.mEdgeList.setSize( numEdges );
|
||||||
|
|
||||||
for( U32 i = 0; i < numEdges; ++ i )
|
for( U32 i = 0; i < numEdges; ++ i )
|
||||||
{
|
{
|
||||||
typename PolyhedronType::EdgeType& edge = mPolyhedron.edgeList[ i ];
|
typename PolyhedronType::EdgeType& edge = mPolyhedron.mEdgeList[ i ];
|
||||||
|
|
||||||
edge.face[ 0 ] = stream->readInt( 8 );
|
edge.face[ 0 ] = stream->readInt( 8 );
|
||||||
edge.face[ 1 ] = stream->readInt( 8 );
|
edge.face[ 1 ] = stream->readInt( 8 );
|
||||||
|
|
@ -344,7 +344,7 @@ bool ScenePolyhedralObject< Base, P >::_setPlane( void* object, const char* inde
|
||||||
&plane.d
|
&plane.d
|
||||||
);
|
);
|
||||||
|
|
||||||
obj->mPolyhedron.planeList.push_back( plane );
|
obj->mPolyhedron.mPlaneList.push_back( plane );
|
||||||
obj->setMaskBits( PolyMask );
|
obj->setMaskBits( PolyMask );
|
||||||
obj->mIsBox = false;
|
obj->mIsBox = false;
|
||||||
|
|
||||||
|
|
@ -366,7 +366,7 @@ bool ScenePolyhedralObject< Base, P >::_setPoint( void* object, const char* inde
|
||||||
&point[ 2 ]
|
&point[ 2 ]
|
||||||
);
|
);
|
||||||
|
|
||||||
obj->mPolyhedron.pointList.push_back( point );
|
obj->mPolyhedron.mPointList.push_back( point );
|
||||||
obj->setMaskBits( PolyMask );
|
obj->setMaskBits( PolyMask );
|
||||||
obj->mIsBox = false;
|
obj->mIsBox = false;
|
||||||
|
|
||||||
|
|
@ -389,7 +389,7 @@ bool ScenePolyhedralObject< Base, P >::_setEdge( void* object, const char* index
|
||||||
&edge.vertex[ 1 ]
|
&edge.vertex[ 1 ]
|
||||||
);
|
);
|
||||||
|
|
||||||
obj->mPolyhedron.edgeList.push_back( edge );
|
obj->mPolyhedron.mEdgeList.push_back( edge );
|
||||||
obj->setMaskBits( PolyMask );
|
obj->setMaskBits( PolyMask );
|
||||||
obj->mIsBox = false;
|
obj->mIsBox = false;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -586,10 +586,10 @@ void SceneContainer::polyhedronFindObjects(const Polyhedron& polyhedron, U32 mas
|
||||||
Box3F box;
|
Box3F box;
|
||||||
box.minExtents.set(1e9, 1e9, 1e9);
|
box.minExtents.set(1e9, 1e9, 1e9);
|
||||||
box.maxExtents.set(-1e9, -1e9, -1e9);
|
box.maxExtents.set(-1e9, -1e9, -1e9);
|
||||||
for (i = 0; i < polyhedron.pointList.size(); i++)
|
for (i = 0; i < polyhedron.mPointList.size(); i++)
|
||||||
{
|
{
|
||||||
box.minExtents.setMin(polyhedron.pointList[i]);
|
box.minExtents.setMin(polyhedron.mPointList[i]);
|
||||||
box.maxExtents.setMax(polyhedron.pointList[i]);
|
box.maxExtents.setMax(polyhedron.mPointList[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( mask == WaterObjectType ||
|
if ( mask == WaterObjectType ||
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue