0

所以我得到了 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;
}
4

1 回答 1

0

你的顶点离剪裁平面太远了。

glOrtho通常使用像素坐标进行设置(但这不是必需的),请参见ref

你可能想要

glOrtho(0.0, 512.0, 0.0, 512.0, -1.0, 1.0);
于 2020-08-12T21:07:50.283 回答