void TracerSceneNode::move(const GLfloat pos[3], const GLfloat forward[3]) { const GLfloat d = 1.0f / sqrtf(forward[0] * forward[0] + forward[1] * forward[1] + forward[2] * forward[2]); azimuth = 180.0f / M_PI * atan2f(forward[1], forward[0]); elevation = -180.0f / M_PI * atan2f(forward[2], hypotf(forward[0],forward[1])); setCenter(pos[0] - 0.5f * TailLength * d * forward[0], pos[1] - 0.5f * TailLength * d * forward[1], pos[2] - 0.5f * TailLength * d * forward[2]); light.setPosition(getSphere()); }
void SphereSceneNode::addRenderNodes( SceneRenderer& renderer) { const GLfloat* sphere = getSphere(); const ViewFrustum& view = renderer.getViewFrustum(); const float size = sphere[3] * view.getAreaFactor() / getDistance(view.getEye()); const int lod = (size < 100.0f) ? 0 : 1; renderNode.setHighResolution(lod != 0); const GLfloat* eye = view.getEye(); const float azimuth = atan2f(sphere[1] - eye[1], eye[0] - sphere[0]); const int numSlices = (lod == 1) ? NumSlices : SphereLowRes; renderNode.setBaseIndex(int(float(numSlices) * (1.0f + 0.5f * azimuth / M_PI)) % numSlices); renderer.addRenderNode(&renderNode, &gstate); }
AxialBox Extent::getBoundingBox ( void ) const { return Containment3d::EncloseABox(getSphere()); }
Sphere Extent::getBoundingSphere ( void ) const { return getSphere(); }
BaseExtent * Extent::clone ( void ) const { return new Extent( getSphere() ); }