用C语言实现OpenGL中的绝对定位
使用OpenGL、GLUT、GLU和C 我正在尝试用C语言创建一个3D游戏,我已经准备好了摄像机移动、碰撞检测和所有主要的东西,但是我在第一关就失败了。要创建我正在使用的矩形用C语言实现OpenGL中的绝对定位,c,opengl,camera,C,Opengl,Camera,使用OpenGL、GLUT、GLU和C 我正在尝试用C语言创建一个3D游戏,我已经准备好了摄像机移动、碰撞检测和所有主要的东西,但是我在第一关就失败了。要创建我正在使用的矩形 glutSolidCube (2.0); 我知道变换、缩放和旋转,但我在寻找如何将其放置在一个精确的位置。假设我有一个3D空间,有XYZ。假设我把相机放在5,5,20,以一定角度看向0,0,0,然后把一个立方体放在5,2,10,然后再把另一个放在-5,-2,20。我将如何使用这些绝对位置?还有,我如何使用绝对尺寸,比如说
glutSolidCube (2.0);
我知道变换、缩放和旋转,但我在寻找如何将其放置在一个精确的位置。假设我有一个3D空间,有XYZ。假设我把相机放在5,5,20,以一定角度看向0,0,0,然后把一个立方体放在5,2,10,然后再把另一个放在-5,-2,20。我将如何使用这些绝对位置?还有,我如何使用绝对尺寸,比如说我希望-5,-2,20的尺寸是20,5,10。在OpenGL中如何执行此操作?您必须使用以下函数:
glTranslatef()
glRotatef()
glScalef()
此外,还要学习以下内容:
glPushMatrix()
glPopMatrix()
有关详细信息,请阅读。先忘掉立方体。GLUT不是OpenGL的一部分,它只是OpenGL的一个小型便利库 您必须了解OpenGL只处理点、线和角度。它不维护场景,只是绘制点、线和三角形。它们各自独立,没有任何拓扑含义。此外,OpenGL不应与某些数学库混淆。glTranslate、glRotate、glScale等函数都是纯遗留函数,已从当代OpenGL版本中删除 话虽如此 假设我把相机放在5,5,20,以一定角度看向0,0,0,然后把一个立方体放在5,2,10,然后再把另一个放在-5,-2,20。我将如何使用这些绝对位置?还有,我如何使用绝对尺寸,比如说我希望-5,-2,20的尺寸是20,5,10。我如何在OpenGL中实现这一点 我将使用您已经知道的旧OpenGL-1.1和GLUT:
void draw()
{
/* Viewport and projection really should be set in the
drawing handler. They don't belong into the reshape. */
glViewport(...);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
your_projection();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(5, 5, 20, 0, 0, 0, 0, 1, 0);
glPushMatrix();
glTranslatef(5, 2, 10);
draw_cube();
glPopMatrix();
glPushMatrix();
glTranslatef(-5, -2, 20);
draw_cube();
glPopMatrix();
glPushMatrix();
glTranslatef(-5, -2, 20);
glScalef(20, 5, 10);
draw_cube();
glPopMatrix();
}
啊,太好了。谢谢我只是在使用glTranslatef,这可能是它不起作用的原因,因为Translate3f看起来不错。谢谢既没有glTranslate3f也没有glRotate3f。哎呀,我错了。。。也许我被glColor3f或类似的东西弄糊涂了。