如何用绝对值定义顶点?

时间:2013-09-23 16:51:18

标签: c opengl

我正在迈出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;
}

这是图形的外观

enter image description here

1 个答案:

答案 0 :(得分:2)

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

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

但是,如果您想使用现代API,则必须使用像glm这样的库自行将矩阵转换应用于您的数据。

这是一个很好的tutorial如何做到这一点。