如何在不改变OpenGL透视的情况下调整对象窗口渲染位置?
OpenGL对象上移且保留透视的解决方法
不用修改相机位置或模型顶点坐标,直接在绘制环节给模型添加模型视图矩阵平移操作即可,完全不会改变透视效果,步骤如下:
- 在
glRotatef前添加平移操作,注意用矩阵栈隔离变换,避免影响其他绘制内容:
glPushMatrix(); // 保存当前矩阵状态 glTranslatef(0, 0, 0.6f); // 沿相机up方向(你的场景中对应Z轴)平移,0.6可按需调整大小 glRotatef(angleRotationZ, 0, 0, 1); // 此处调用八面体绘制函数 drawOctahedron(); glPopMatrix(); // 恢复之前的矩阵状态
为什么这个方法可行:
- 相机参数完全不动,透视投影的所有特性(比如近大远小、视野范围)和之前完全一致;
- 没有修改模型原始顶点,只是在绘制时给模型整体加了一个平移变换,外观不会有任何改变;
- 用
glPushMatrix和glPopMatrix隔离变换,不会干扰场景中其他对象的绘制。
你之前修改相机位置导致透视变化,是因为相机观察点改变后,投影的透视关系会随之变化;修改顶点坐标则是改动了模型本身的结构,都不符合需求,而上述平移操作刚好规避了这两个问题。
内容的提问来源于stack exchange,提问作者TamimEhsan
相关产品推荐
相关产品推荐

