Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言实现OpenGL中的绝对定位_C_Opengl_Camera - Fatal编程技术网

用C语言实现OpenGL中的绝对定位

用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。我将如何使用这些绝对位置?还有,我如何使用绝对尺寸,比如说

使用OpenGL、GLUT、GLU和C 我正在尝试用C语言创建一个3D游戏,我已经准备好了摄像机移动、碰撞检测和所有主要的东西,但是我在第一关就失败了。要创建我正在使用的矩形

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或类似的东西弄糊涂了。