opengl+delphi 鼠标拾取(2)

2021-04-06 05:22

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


opengl+delphi 鼠标拾取(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:神奇的滚筒

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: