opengl+delphi 鼠标拾取(3)

2021-04-06 05:22

opengl+delphi 鼠标拾取

on a new matrix as not to affect any other spheres.
// We rotate the sphere by its current rotation value FIRST before we translate it.
// This makes it rotate around the origin, which is where the sun is.
// Then we rotate it again about the Y-axis to make it spin around itself.

glPushMatrix();// Push on a new matrix scope
glRotatef(EarthRotation / 3, 0, 1.0, 0);// Rotate the sphere around the origin (the sun)
glTranslatef(-2, 0, 0);// Translate this sphere to the left
glRotatef(EarthRotation, 0, 1.0, 0);// Rotate the sphere to make it spin
gluSphere(pObj, 0.2, 20, 20);// Draw the sphere with a radius of 0.2 so it's smaller than the sun
glPopMatrix();// End the current scope of this matrix

// We are done assigning the EARTH object, so we need
// to stop assigning polygons to the current ID.

glEnd();// Stop assigning polygons to the EARTH label (IMPORTANT)

// Bind the pluto texture to the last sphere
glBindTexture(GL_TEXTURE_2D, PlutoTex);

// Finally, we want to be able to click on Pluto, so we need a pluto ID.

glLoadName(PLUTO);// Push on our PLUTO label (IMPORTANT)

// Like we did with the earth, we rotate Pluto around the sun first,
// then we translate it farther away from the sun. Next, we rotate Pluto
// around the Y axis to give it some spin.

// 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();

glPushMatrix();// Push on a new matrix scope
glRotatef(PlutoRotation / 2, 0, 1.0, 0);// Rotate the sphere around the sun
glTranslatef(3, 0, 0);// Translate this sphere farther away from the sun than the earth
glRotatef(PlutoRotation, 0, 1.0, 0);// Rotate the sphere around itself to produce the spin
gluSphere(pObj, 0.1, 20, 20);// Draw the sphere with a radius of 0.1 (smallest planet)
glPopMatrix();// End the current scope of this matrix

// We are finished with the PLUTO object ID, so we need to pop it off the name stack.
glEnd();// Stop assigning polygons to our PLUTO label (IMPORTANT)

//SwapBuffers(h_DC);// Swap the backbuffers to the foreground

gluDeleteQuadric(pObj);// Free the Quadric

glPopName();// We pushed a name on the stack, we must pop it back off

// Below we increase the rotations for each sphere.

SunRotation := SunRotation + 0.2;// Rotate the sun slowly
EarthRotation := EarthRotation + 0.5;// Increase the rotation for the each
PlutoRotation := PlutoRotation + 0.6;// Make pluto go the fastest
end;

function RetrieveObjectID(x, y: integer): intege
r;
var
objectsFound: integer;
viewportCoords: array [0..3] of integer;
selectBuffer: array[0..31] of cardinal;
lowestDepth: cardinal;
sele


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

下一篇:神奇的滚筒

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

马上注册会员

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