SceneObject::objBoxContainsPoint()
by Orion Elenzil · 08/17/2006 (12:04 pm) · 2 comments
SceneObject.h
additions in bold.
SceneObject.cc
additions in bold.
additions in bold.
Box3F mObjBox; ///< Bounding box in object space[b] Box3F mObjBoxScaled; ///< Bounding box in object space, convolved by mObjScale.[/b] Box3F mWorldBox; ///< Bounding box in world space SphereF mWorldSphere; ///< Bounding sphere in world space
public:
SceneRenderState mSRS;
//basically these two virtual methods are implemented for notifying derived classes when they first
//enter the render state, and when they leave the render state
virtual void onSceneRenderEnter(){}
virtual void onSceneRenderLeave(){}
[b]
public:
bool objBoxContainsPoint(const Point3F& point);[/b]SceneObject.cc
additions in bold.
void SceneObject::setScale(const VectorF & scale)
{
mObjScale = scale;
setTransform(MatrixF(mObjToWorld));
// Make sure that any subclasses of me get a chance to react to the
// scale being changed.
onScaleChanged();
[b]
mObjBoxScaled = mObjBox;
mObjBoxScaled.min.convolve(mObjScale);
mObjBoxScaled.max.convolve(mObjScale);
[/b]
setMaskBits( ScaleMask );
}
void SceneObject::resetWorldBox()
{
AssertFatal(mObjBox.isValidBox(), "Bad object box!");
mWorldBox = mObjBox;
mWorldBox.min.convolve(mObjScale);
mWorldBox.max.convolve(mObjScale);
mObjToWorld.mul(mWorldBox);
// #if defined(__linux__) || defined(__OpenBSD__)
// if( !mWorldBox.isValidBox() ) {
// // reset
// mWorldBox.min.set( 0.0f, 0.0f, 0.0f );
// mWorldBox.max.set( 0.0f, 0.0f, 0.0f );
// }
// #else
AssertFatal(mWorldBox.isValidBox(), "Bad world box!");
//#endif
// Create mWorldSphere from mWorldBox
mWorldBox.getCenter(&mWorldSphere.center);
mWorldSphere.radius = (mWorldBox.max - mWorldSphere.center).len();
[b]
mObjBoxScaled = mObjBox;
mObjBoxScaled.min.convolve(mObjScale);
mObjBoxScaled.max.convolve(mObjScale);[/b]
}[b]
//------------------------------------------------------------------------
bool SceneObject::objBoxContainsPoint(const Point3F& point)
{
Point3F pointObjSpace;
mWorldToObj.mulP(point, &pointObjSpace);
return mObjBoxScaled.isContained(pointObjSpace);
}
ConsoleMethod( SceneObject, objBoxContainsPoint, bool , 3, 3, "(point)")
{
Point3F pos;
dSscanf(argv[2],"%f %f %f", &pos.x, &pos.y, &pos.z);
return object->objBoxContainsPoint(pos);
}
[/b]About the author

Torque Owner Cinder Games