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);
}
Beispiel #3
0
AxialBox Extent::getBoundingBox ( void ) const
{
	return Containment3d::EncloseABox(getSphere());
}
Beispiel #4
0
Sphere Extent::getBoundingSphere ( void ) const
{
    return getSphere();
}
Beispiel #5
0
BaseExtent * Extent::clone ( void ) const
{
    return new Extent( getSphere() );
}