我的程序(c ++中的openGL)发生了什么?

时间:2013-10-23 07:43:56

标签: c++ opengl camera glut

我开始使用openGL和c ++,我想知道为什么我在窗口看不到任何内容。这是我的代码:

#include <GLUT/GLUT.h>
#include <stdlib.h>
void init() {
    glClearColor(0, 0, 1, 0);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60.0, 1.0, 1.0, 100.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(0, 0, -10);
}

void display() {

    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_TRIANGLES);
    glVertex3i(-0.5, -0.5, 0);
    glVertex3i(0, 0.5, 0);
    glVertex3i(0.5, -0.5, 0);
    glEnd();
}


int main(int argc, char **argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE| GLUT_RGBA);
    glutInitWindowPosition(200, 200);
    glutInitWindowSize(400, 400);
    glutCreateWindow("Window");

    init();

    glutDisplayFunc(display);


    glutMainLoop();
}

我有几个问题:

  1. 如果我像这样运行程序,我看到的只是一个白色的窗口......我没有将颜色设置为蓝色吗?

  2. 当我在显示功能结束时执行glutSwapBuffers()并运行程序时,我看到没有三角形的蓝色窗口。所以,我认为glutSwapBuffers()函数只适用于双缓冲。

  3. 最重要的是,到底是我的三角形? O.o我没有将带glTranslatf()功能的相机在z轴上翻译成-10吗?如果你想知道我为什么使用gluPerspective,我不得不说我正在尝试新的东西,但是如果我使用gluOrtho2D()则不行。

  4. 我不知道我错过了什么或什么。也许我需要搜索更多关于此的信息,但我认为大多数代码都是正确的。

1 个答案:

答案 0 :(得分:2)

1&amp; 2)使用单个缓冲区时,您不必调用glutSwapBuffers()。但是你必须调用glFlush(),所以draw命令在GPU上执行。

3)我注意到你正在创建具有双坐标的顶点,但是你正在调用整数版本的glVertex **函数(小数部分将被截断) - 这意味着你将绘制零大小的三角形。

使用glVertex3d()glVertex3f()代替glVertex3i()

小注意:在最新的OpenGL中不推荐使用中间模式。