1

我正在迈出进入 OpenGL 领域的第一步,但在Vertex声明方面遇到了麻烦。意思是,我只是通过使用窗口的相对大小作为坐标来成功定义顶点(那些 0.25 意味着 500*0.25=125)。这似乎不直观。

如何定义没有相对值的顶点?

#include <GLUT/glut.h>
#include <stdlib.h>

void displayInit(void) {
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT);
}

void display(void) {
    glClear(GL_COLOR_BUFFER_BIT);

    // Select a drawing color
    glColor3f(1.0, 0.0, 0.0);
    // Draw a square
    glBegin(GL_POLYGON);
        glVertex2f(-0.25, -0.25); // start from -1/4 window w, -1/4 window h
        glVertex2f(-0.25, 0.25);  // add point 1/4 window h up from center
        glVertex2f(0.25, 0.25);
        glVertex2f(0.25, -0.25);
    glEnd();

    // Display the whole drawing on screen
    glFlush();
}

int main(int argc, char **argv) {
    // Initialize with a window
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(500, 500);
    glutInitWindowPosition(100, 100);
    glutCreateWindow(argv[0]);

    // Display first screen
    displayInit();

    // Enter the display loop
    glutDisplayFunc(display);
    glutMainLoop();

    return 0;
}

这就是图形的外观

在此处输入图像描述

4

1 回答 1

2

在旧版本的 OpenGL 中,这是通过现在已弃用的矩阵操作函数(如 glOrtho)完成的。(事实上​​,您对 glBegin、glVertex 和 glEnd 的使用也已被弃用...)

如果您不介意使用已弃用的功能,请查看 glPushMatrix、glPopMatrix、glScale、glRotate 和 glTranslate,您将开始了解如何定义不同的坐标系。还要查看 glMatrixMode 并了解您的投影矩阵和模型视图矩阵之间的区别。您的投影矩阵将是应用 glOrtho 的矩阵,或者如果您希望它“看起来正确”(远处的物体更小),则可能是 gluPerspective。

但是,如果您想使用现代 API,则必须使用glm之类的库自己对数据应用矩阵转换。

这是一个关于如何做到这一点的优秀教程。

于 2013-09-23T16:54:25.537 回答