我正在迈出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;
}
这是图形的外观
答案 0 :(得分:2)
在旧版本的OpenGL中,这是通过现已弃用的矩阵操作函数(如glOrtho)完成的。 (事实上,你也不赞成使用glBegin,glVertex和glEnd ......)
如果您不介意使用已弃用的功能,请查看glPushMatrix,glPopMatrix,glScale,glRotate和glTranslate,您将开始了解如何定义不同的坐标系。还要研究glMatrixMode并了解投影矩阵和模型视图矩阵之间的区别。您的投影矩阵将是应用glOrtho的那个,或者可能是gluPerspective,如果您希望它“看起来正确”(远处的物体较小)。
但是,如果您想使用现代API,则必须使用像glm这样的库自行将矩阵转换应用于您的数据。
这是一个很好的tutorial如何做到这一点。