opengl+delphi 鼠标拾取
(0);// This starts off the first object in the stack
pObj := gluNewQuadric();// Get a new Quadric off the stack
gluQuadricTexture(pObj, true);// This turns on texture coordinates for our Quadrics
// Bind the sun texture to the sun quadratic
glBindTexture(GL_TEXTURE_2D, SunTex);// Bind the Sun texture to the sun
// Below we call glLoadName(). We need to pass in an ID that we can check later that will
// be associated with the polygons drawn next. Here is how it works. We call glLoadName()
// and pass an ID. Then we draw any primitives or shapes, then we call glEnd() which
// stops assigning polys to that object name. We now have a group of polygons that are
// given an ID. Our ID SUN now refers to the sun Quadric we draw below.
glLoadName(SUN);// Push on our SUN label (IMPORTANT)
// If we use glLoadName(), then we need to end it with glEnd(). There is a problem
// though with some video cards that MUST have a glBegin()/glEnd() between
// the calls to glLoadName()/glEnd(). This is strange but some cards grind
// to a 2 FPS speed (VoodooCards). Since we are using Quadrics there is
// no glBegin()/glEnd() being called explicitly, so we need to fake it.
// *Remember, you only have to do this if you are using Quadrics.* So, to fix
// this we just put a empty glBegin()/glEnd() statement between each object ID passed in.
{glBegin(GL_LINES);
glEnd(); }
// Here we push on a new matrix so we don't affect any other quadrics.
// We first translate the quadric to the origin (0, 0, 0), Then we rotate it
// about the Y axis. This gives it the spinning effect. Then we draw the
// largest of the spheres. This represents the sun with its texture map.
glPushMatrix();// Push on a new matrix scope
glTranslatef(0, 0, 0);// Translate this sphere to the left
glRotatef(SunRotation, 0, 1.0, 0);// Rotate the sphere around the Y axis to make it spin
gluSphere(pObj, 0.5, 20, 20);// Draw the sunwith a radius of 0.5
glPopMatrix();// End the current scope of this matrix
// Now that we drew the sun, we want to end our Object name. We call glPopName()
// to do that. Now nothing else will be associated with the SUN ID.
glEnd();// Stop assigning polygons to the SUN label (IMPORTANT)
// Next, we want to bind the Earth texture to our Earth sphere
glBindTexture(GL_TEXTURE_2D, EarthTex);
// Once again, we want to create a object ID for our earth, so we push on the EARTH ID.
// Now, when we draw the next sphere, it will be associated with the EARTH ID.
glLoadName(EARTH);// Push on our EARTH label (IMPORTANT)
// Pass in our empty glBegin()/glEnd() statement because we are using Quadrics.
// If
we don't do this when using glLoadName(), it will grind to a hault on some cards.
glBegin(GL_LINES);
glEnd();
// Once again, we want to pop