(使用OpenGL,GLUT,GLU和C) 我正在尝试用C创建一个3D游戏,我有相机移动,碰撞检测和所有主要的东西准备好了,但是我在第一个障碍时失败了。要创建我的矩形,我正在使用
glutSolidCube (2.0);
我知道转换,比例和旋转,但我正在寻找如何将它放在一个精确的位置。假设我有一个带有XYZ的3D空间。假设我有5,5,20的相机,朝着0,0,0(所以有一个角度)看,想要在5,2,10处放置一个立方体,然后在-5,-2,20放置另一个立方体。我如何使用这些绝对位置?另外,我如何使用绝对尺寸,所以说我希望-5,-2,20的尺寸为20,5,10。我如何在OpenGL中执行此操作?
答案 0 :(得分:0)
你必须使用这些功能:
glTranslatef()
glRotatef()
glScalef()
此外,还要了解这些:
glPushMatrix()
glPopMatrix()
阅读OpenGL reference了解详情。
答案 1 :(得分:0)
首先忘掉glutSolidCube。 GLUT不是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();
}