gpt4 book ai didi

c++ - OpenGL 投影缩放

转载 作者:行者123 更新时间:2023-11-30 01:23:22 25 4
gpt4 key购买 nike

我有一个代表简单 3D 场景的学习项目。我正在修改模型 View 矩阵以使用 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);
}

最佳答案

正如我在评论中所说,您需要设置正交投影以适合您的窗口。假设您的 OpenGL 窗口在调整大小之前以正方形开始,(-1, 1, -1, 1, ...) 假设正方形坐标系。如果您更改它以更好地反射(reflect)窗口的纵横比,您应该会看到更好的外观。尝试以下操作:

glOrtho ((float)w/(float)h, (float)-w/(float)h, -1, 1, 0.8, 100);

这应该保持您设置的坐标系,但要遵守纵横比(按宽度)。

关于c++ - OpenGL 投影缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15107854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com