-2

我从 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. 最重要的是,我的三角形到底在哪里?哦,我不是将带有glTranslatf()功能的相机在 z 轴上转换为 -10 吗?如果您想知道我为什么使用 gluPerspective,我不得不说我正在尝试新事物,但如果我使用 gluOrtho2D(),它们都不起作用。

我不知道我是否遗漏了什么或什么。也许我需要搜索更多关于此的信息,但我认为大部分代码都是正确的。

4

1 回答 1

2

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

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

使用glVertex3d()orglVertex3f()代替glVertex3i().

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

于 2013-10-23T08:06:34.957 回答