我试着用OpenGL绘制一个简单的正方形,但结果显示它是一个矩形。我想问题出在重塑功能上,但我不知道为什么(我是新来的OpenGL)。
当我调整窗口大小时,我要做的是保持宽高比,也就是不伸缩我的图像。
我的重塑功能
# define WINDOW_W 640
# define WINDOW_H 480
void reshape(int width, int height) {
if (height == 0)
height = 1;
GLfloat aspect = (GLfloat)width / (GLfloat)height;
glViewport(0, 0, (GLsizei)width, (GLsizei)height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (width >= height)
gluOrtho2D(0.0f, (GLdouble)WINDOW_W * aspect, (GLdouble)WINDOW_H, 0.0f);
else
gluOrtho2D(0.0f, (GLdouble)WINDOW_W, (GLdouble)WINDOW_H / aspect, 0.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
我的绘图函数
void display(void) {
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
// x=50 y=50 w=100 h=100 a square
glBegin(GL_QUADS);
glVertex2i(50, 50);
glVertex2i(50, 150);
glVertex2i(150, 150);
glVertex2i(150, 50);
glEnd();
glutSwapBuffers();
}
1条答案
按热度按时间9cbw7uwe1#
现在,您的“正方形”的高度将始终是宽度的1.3333倍,因为尽管您确实考虑了实际窗口大小并计算出实际窗口大小的实际长宽比,但无论出于什么原因,您都会将其乘以
640
的宽度和480
的高度。这是行不通的,因为这将“总是”将你的实际纵横比拉大1.3333倍,使你的正方形“总是”和它的宽度一样高1.3333。
要解决这个问题,只需将
gluOrtho2D()
调用的参数与相同的值相乘,这取决于具有正方形纵横比的正方形视图空间在您的世界空间或“视图空间”中应该是什么范围。