rolled in more of https://github.com/GarageGames/Torque3D/pull/2315 + set the mProbeShapeType(s) for the two derivative classes

This commit is contained in:
Azaezel 2019-02-19 16:34:30 -06:00
parent 0f5fe527dd
commit 727dbbfd8d
3 changed files with 46 additions and 26 deletions

View file

@ -77,6 +77,7 @@ ConsoleDocClass(BoxEnvironmentProbe,
BoxEnvironmentProbe::BoxEnvironmentProbe() : ReflectionProbe() BoxEnvironmentProbe::BoxEnvironmentProbe() : ReflectionProbe()
{ {
mCaptureMask = REFLECTION_PROBE_CAPTURE_TYPEMASK; mCaptureMask = REFLECTION_PROBE_CAPTURE_TYPEMASK;
mProbeShapeType = ProbeRenderInst::Box;
} }
BoxEnvironmentProbe::~BoxEnvironmentProbe() BoxEnvironmentProbe::~BoxEnvironmentProbe()

View file

@ -77,6 +77,7 @@ ConsoleDocClass(SphereEnvironmentProbe,
SphereEnvironmentProbe::SphereEnvironmentProbe() : ReflectionProbe() SphereEnvironmentProbe::SphereEnvironmentProbe() : ReflectionProbe()
{ {
mCaptureMask = REFLECTION_PROBE_CAPTURE_TYPEMASK; mCaptureMask = REFLECTION_PROBE_CAPTURE_TYPEMASK;
mProbeShapeType = ProbeRenderInst::Sphere;
} }
SphereEnvironmentProbe::~SphereEnvironmentProbe() SphereEnvironmentProbe::~SphereEnvironmentProbe()

View file

@ -1153,9 +1153,9 @@ void GFXDrawUtil::_drawSolidCapsule( const GFXStateBlockDesc &desc, const Point3
for (S32 i=0; i<numPoints + 1; i++) for (S32 i=0; i<numPoints + 1; i++)
{ {
S32 imod = i % numPoints; S32 imod = i % numPoints;
verts[2 * i].point = Point3F( circlePoints[imod].x * radius, circlePoints[imod].y * radius, height ); verts[2 * i].point = Point3F( circlePoints[imod].x * radius, circlePoints[imod].y * radius, height/2 );
verts[2 * i].color = color; verts[2 * i].color = color;
verts[2 * i + 1].point = Point3F( circlePoints[imod].x * radius, circlePoints[imod].y * radius, -height ); verts[2 * i + 1].point = Point3F( circlePoints[imod].x * radius, circlePoints[imod].y * radius, -height/2 );
verts[2 * i + 1].color = color; verts[2 * i + 1].color = color;
} }
@ -1163,7 +1163,7 @@ void GFXDrawUtil::_drawSolidCapsule( const GFXStateBlockDesc &desc, const Point3
// Apply xfm if we were passed one. // Apply xfm if we were passed one.
for ( U32 i = 0; i < totalNumPnts; i++ ) for ( U32 i = 0; i < totalNumPnts; i++ )
mat.mulP( verts[i].point ); mat.mulV( verts[i].point );
// Apply position offset // Apply position offset
for ( U32 i = 0; i < totalNumPnts; i++ ) for ( U32 i = 0; i < totalNumPnts; i++ )
@ -1202,43 +1202,61 @@ void GFXDrawUtil::_drawSolidCapsule( const GFXStateBlockDesc &desc, const Point3
void GFXDrawUtil::_drawWireCapsule( const GFXStateBlockDesc &desc, const Point3F &center, F32 radius, F32 height, const ColorI &color, const MatrixF *xfm ) void GFXDrawUtil::_drawWireCapsule( const GFXStateBlockDesc &desc, const Point3F &center, F32 radius, F32 height, const ColorI &color, const MatrixF *xfm )
{ {
MatrixF mat; MatrixF mat;
if ( xfm ) if (xfm)
mat = *xfm; mat = *xfm;
else else
mat = MatrixF::Identity; mat = MatrixF::Identity;
mat.scale( Point3F(radius,radius,height*0.5f) ); S32 numPoints = sizeof(circlePoints) / sizeof(Point2F);
mat.setPosition(center); GFXVertexBufferHandle<GFXVertexPCT> verts(mDevice, numPoints * 2 + 2, GFXBufferTypeVolatile);
mDevice->pushWorldMatrix();
mDevice->multWorld(mat);
S32 numPoints = sizeof(circlePoints)/sizeof(Point2F);
GFXVertexBufferHandle<GFXVertexPCT> verts(mDevice, numPoints, GFXBufferTypeVolatile);
verts.lock(); verts.lock();
for (S32 i=0; i< numPoints; i++) for (S32 i = 0; i < numPoints + 1; i++)
{ {
S32 idx = i & (~1); // just draw the even ones S32 imod = i % numPoints;
F32 z = i & 1 ? 1.0f : -1.0f; verts[2 * i].point = Point3F(circlePoints[imod].x * radius, circlePoints[imod].y * radius, height / 2);
verts[i].point = Point3F(circlePoints[idx].x,circlePoints[idx].y, z); verts[2 * i].color = color;
verts[i].color = color; verts[2 * i + 1].point = Point3F(circlePoints[imod].x * radius, circlePoints[imod].y * radius, -height / 2);
verts[2 * i + 1].color = color;
} }
S32 totalNumPnts = numPoints * 2 + 2;
// Apply xfm if we were passed one.
for (U32 i = 0; i < totalNumPnts; i++)
mat.mulV(verts[i].point);
// Apply position offset
for (U32 i = 0; i < totalNumPnts; i++)
verts[i].point += center;
verts.unlock(); verts.unlock();
mDevice->setStateBlockByDesc( desc ); mDevice->setStateBlockByDesc(desc);
mDevice->setVertexBuffer( verts ); mDevice->setVertexBuffer(verts);
mDevice->setupGenericShaders(); mDevice->setupGenericShaders();
for (S32 i=0; i<numPoints; i += 2) mDevice->drawPrimitive(GFXTriangleStrip, 0, 2 * numPoints);
mDevice->drawPrimitive(GFXLineStrip, i, 1);
mDevice->popWorldMatrix();
Point3F sphereCenter; Point3F sphereCenter;
sphereCenter.z = center.z + 0.5f * height; MatrixF sphereMat;
drawSphere( desc, radius,sphereCenter,color,true,false);
sphereCenter.z = center.z - 0.5f * height; if (xfm)
drawSphere( desc, radius,sphereCenter,color,false,true); sphereMat = *xfm;
else
sphereMat = MatrixF::Identity;
sphereCenter.set(0, 0, 0.5f * height);
mat.mulV(sphereCenter);
sphereCenter += center;
drawSphere(desc, radius, sphereCenter, color, true, false, &sphereMat);
sphereCenter.set(0, 0, -0.5f * height);
mat.mulV(sphereCenter);
sphereCenter += center;
drawSphere(desc, radius, sphereCenter, color, false, true, &sphereMat);
} }
void GFXDrawUtil::drawCone( const GFXStateBlockDesc &desc, const Point3F &basePnt, const Point3F &tipPnt, F32 baseRadius, const ColorI &color ) void GFXDrawUtil::drawCone( const GFXStateBlockDesc &desc, const Point3F &basePnt, const Point3F &tipPnt, F32 baseRadius, const ColorI &color )