使用C在OpenGL中进行绝对定位

时间:2012-01-15 15:30:01

标签: c opengl camera

(使用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中执行此操作?

2 个答案:

答案 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();
}