cleanups for decal and mesh road, and the meshroad and river editors

This commit is contained in:
Azaezel 2018-03-14 17:43:03 -05:00
parent d11a942f6d
commit 1b548e5304
4 changed files with 40 additions and 54 deletions

View file

@ -1265,7 +1265,7 @@ void DecalRoad::_generateEdges()
//
for ( U32 i = 0; i < mEdges.size(); i++ )
{
RoadEdge *edge = &mEdges[i];
edge = &mEdges[i];
edge->p0 = edge->p1 - edge->rvec * edge->width * 0.5f;
edge->p2 = edge->p1 + edge->rvec * edge->width * 0.5f;
_getTerrainHeight( edge->p0 );
@ -1467,20 +1467,20 @@ void DecalRoad::_captureVerts()
for ( U32 i = 0; i < clipperList.size(); i++ )
{
ClippedPolyList *clipper = &clipperList[i];
RoadEdge &edge = mEdges[i];
RoadEdge &nextEdge = mEdges[i+1];
edge = &mEdges[i];
nextEdge = &mEdges[i+1];
VectorF segFvec = nextEdge.p1 - edge.p1;
VectorF segFvec = nextEdge->p1 - edge->p1;
F32 segLen = segFvec.len();
segFvec.normalize();
F32 texLen = segLen / mTextureLength;
texEnd = texStart + texLen;
BiQuadToSqr quadToSquare( Point2F( edge.p0.x, edge.p0.y ),
Point2F( edge.p2.x, edge.p2.y ),
Point2F( nextEdge.p2.x, nextEdge.p2.y ),
Point2F( nextEdge.p0.x, nextEdge.p0.y ) );
BiQuadToSqr quadToSquare( Point2F( edge->p0.x, edge->p0.y ),
Point2F( edge->p2.x, edge->p2.y ),
Point2F( nextEdge->p2.x, nextEdge->p2.y ),
Point2F( nextEdge->p0.x, nextEdge->p0.y ) );
//
if ( i % mSegmentsPerBatch == 0 )
@ -1572,12 +1572,12 @@ void DecalRoad::_captureVerts()
Box3F box;
for ( U32 i = 0; i < mBatches.size(); i++ )
{
const RoadBatch &batch = mBatches[i];
batch = &mBatches[i];
if ( i == 0 )
box = batch.bounds;
box = batch->bounds;
else
box.intersect( batch.bounds );
box.intersect( batch->bounds );
}
mWorldBox = box;

View file

@ -1132,11 +1132,11 @@ void GuiMeshRoadEditorCtrl::setSelectedNode( S32 node )
mSelNode = node;
if ( mSelNode != -1 )
{
const MeshRoadNode &node = mSelRoad->mNodes[mSelNode];
const MeshRoadNode &curNode = mSelRoad->mNodes[mSelNode];
MatrixF objMat = mSelRoad->getNodeTransform(mSelNode);
Point3F objScale( node.width, 1.0f, node.depth );
Point3F worldPos = node.point;
Point3F objScale(curNode.width, 1.0f, curNode.depth );
Point3F worldPos = curNode.point;
mGizmo->set( objMat, worldPos, objScale );
}

View file

@ -1277,11 +1277,11 @@ void GuiRiverEditorCtrl::setSelectedNode( S32 node )
mSelNode = node;
if ( mSelNode != -1 )
{
const RiverNode &node = mSelRiver->mNodes[mSelNode];
const RiverNode &curNode = mSelRiver->mNodes[mSelNode];
MatrixF objMat = mSelRiver->getNodeTransform(mSelNode);
Point3F objScale( node.width, 1.0f, node.depth );
Point3F worldPos = node.point;
Point3F objScale(curNode.width, 1.0f, curNode.depth );
Point3F worldPos = curNode.point;
mGizmo->set( objMat, worldPos, objScale );
}

View file

@ -1681,54 +1681,40 @@ void MeshRoad::_generateSlices()
}
}
}
//
// Calculate uvec, fvec, and rvec for all slices
//
MatrixF mat(true);
for ( U32 i = 0; i < mSlices.size(); i++ )
{
calcSliceTransform( i, mat );
mat.getColumn( 0, &mSlices[i].rvec );
mat.getColumn( 1, &mSlices[i].fvec );
mat.getColumn( 2, &mSlices[i].uvec );
}
//
// Calculate p0/p2/pb0/pb2 for all slices
//
for ( U32 i = 0; i < mSlices.size(); i++ )
{
MeshRoadSlice *slice = &mSlices[i];
slice->p0 = slice->p1 - slice->rvec * slice->width * 0.5f;
slice->p2 = slice->p1 + slice->rvec * slice->width * 0.5f;
slice->pb0 = slice->p0 - slice->uvec * slice->depth;
slice->pb2 = slice->p2 - slice->uvec * slice->depth;
}
// Generate the object/world bounds
Box3F box;
for ( U32 i = 0; i < mSlices.size(); i++ )
{
const MeshRoadSlice &slice = mSlices[i];
// Calculate uvec, fvec, and rvec for all slices
calcSliceTransform( i, mat );
MeshRoadSlice *slicePtr = &mSlices[i];
mat.getColumn( 0, &slicePtr->rvec );
mat.getColumn( 1, &slicePtr->fvec );
mat.getColumn( 2, &slicePtr->uvec );
// Calculate p0/p2/pb0/pb2 for all slices
slicePtr->p0 = slicePtr->p1 - slicePtr->rvec * slicePtr->width * 0.5f;
slicePtr->p2 = slicePtr->p1 + slicePtr->rvec * slicePtr->width * 0.5f;
slicePtr->pb0 = slicePtr->p0 - slicePtr->uvec * slicePtr->depth;
slicePtr->pb2 = slicePtr->p2 - slicePtr->uvec * slicePtr->depth;
// Generate or extend the object/world bounds
if ( i == 0 )
{
box.minExtents = slice.p0;
box.maxExtents = slice.p2;
box.extend( slice.pb0 );
box.extend( slice.pb2 );
box.minExtents = slicePtr->p0;
box.maxExtents = slicePtr->p2;
box.extend(slicePtr->pb0 );
box.extend(slicePtr->pb2 );
}
else
{
box.extend( slice.p0 );
box.extend( slice.p2 );
box.extend( slice.pb0 );
box.extend( slice.pb2 );
box.extend(slicePtr->p0 );
box.extend(slicePtr->p2 );
box.extend(slicePtr->pb0 );
box.extend(slicePtr->pb2 );
}
}
}
mWorldBox = box;
resetObjectBox();