【发布时间】:2013-02-27 08:58:40
【问题描述】:
我有一个代表简单 3D 场景的学习项目。
我正在修改模型视图矩阵以使用gluLookAt() 将视点移动到某个非原点,然后我将线球放置在原点。最后,我正在修改投影矩阵以使用glOrtho() 接收带有一些参数的正交投影。但是当调整窗口大小时,球体会变形。我想我应该修改reshape() 和glOrtho() 函数,但是如何修改?
void display(void){
glClear(GL_COLOR_BUFFER_BIT);
glColor3b(197, 96, 63);
glLoadIdentity();
gluLookAt(2, 0.5 ,2, 0, 0, 0, 0, 1, 0);
glutWireSphere(0.2, 20, 10);
glFlush();
}
void reshape(int w, int h){
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1, 1, -1, 1, 0.8 , 100);
glMatrixMode(GL_MODELVIEW);
}
【问题讨论】:
-
希望您的内容如何扩展?信箱?放大窗口?
-
您需要更改您的
glOrtho命令以尊重屏幕的AspectRatio。目前,您正在告诉它制作一个完美的正方形。如果您调整窗口大小但不更改函数调用的 (-1, 1, -1, 1, ...) 部分,glOrtho 将设置您的坐标系以使事物以完美的正方形投影到屏幕上,即使视口(w 和 h)不代表正方形。