所以我得到了 OpenGL Redbook 3e,目前在第 2 章(对于初学者来说,较新的 OpenGL 似乎太难进行图形编程)。我从书中复制了一个代码片段(我添加了初始化代码和绘图代码),并尝试了渲染顶点数组(、、和)的glDrawElements
每个glDrawRangeElements
选项gDrawArrays
。对于这个示例,我决定使用 glDrawArrays,因为它似乎是最直接的。据我所知,这段代码没有任何问题,因为它可以编译并运行。但是,没有绘制多边形。有谁知道发生了什么?我觉得我要么犯了一个非常愚蠢的错误,要么错过了一些基本的东西。
#include <stdio.h>
#include <GL/gl.h>
#include <GL/glext.h>
#include <GL/freeglut.h>
void init() {
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}
void display() {
static GLint vertices[] = { 25, 25,
100, 325,
175, 25,
175, 325,
250, 25,
325, 325 };
static GLfloat colors[] = { 1.0, 0.2, 0.2,
0.2, 0.2, 1.0,
0.8, 1.0, 0.2,
0.75, 0.75, 0.75,
0.35, 0.35, 0.35,
0.5, 0.5, 0.5 };
glClear(GL_COLOR_BUFFER_BIT);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(3, GL_FLOAT, 0, colors);
glVertexPointer(2, GL_INT, 0, vertices);
glDrawArrays(GL_POLYGON, 0, sizeof(vertices) / sizeof(GLint));
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glFlush();
}
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowSize(512, 512);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}