我开始使用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();
}
我有几个问题:
如果我像这样运行程序,我看到的只是一个白色的窗口......我没有将颜色设置为蓝色吗?
当我在显示功能结束时执行glutSwapBuffers()
并运行程序时,我看到没有三角形的蓝色窗口。所以,我认为glutSwapBuffers()
函数只适用于双缓冲。
最重要的是,到底是我的三角形? O.o我没有将带glTranslatf()
功能的相机在z轴上翻译成-10吗?如果你想知道我为什么使用gluPerspective,我不得不说我正在尝试新的东西,但是如果我使用gluOrtho2D()则不行。
我不知道我错过了什么或什么。也许我需要搜索更多关于此的信息,但我认为大多数代码都是正确的。
答案 0 :(得分:2)
1&amp; 2)使用单个缓冲区时,您不必调用glutSwapBuffers()
。但是你必须调用glFlush()
,所以draw命令在GPU上执行。
3)我注意到你正在创建具有双坐标的顶点,但是你正在调用整数版本的glVertex **函数(小数部分将被截断) - 这意味着你将绘制零大小的三角形。
使用glVertex3d()
或glVertex3f()
代替glVertex3i()
。
小注意:在最新的OpenGL中不推荐使用中间模式。