Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL:混合正交投影和透视投影_Opengl_Projection Matrix - Fatal编程技术网

OpenGL:混合正交投影和透视投影

OpenGL:混合正交投影和透视投影,opengl,projection-matrix,Opengl,Projection Matrix,我想混合透视和正交视图,但我无法让它工作 我希望X和Y坐标是正交的,Z坐标是透视的。为了澄清,我添加了从OpenGL坐标到屏幕显示所需转换的草图: (我从a开始,但找不到如何获取top、bottom等值)您可能可以使用来实现这一点 如果使用标准透视矩阵,并且相机面向长方体正面,X/Y将是均匀的,但是远离相机的移动将使X/Y坐标向中心移动,从而缩小它们以获得标准视差效果。您所绘制的是向窗口顶部移动。您所需要做的就是将透视投影裁剪到低于其标准中心的位置。这就是glFrustum的作用-向下移动通常

我想混合透视和正交视图,但我无法让它工作

我希望X和Y坐标是正交的,Z坐标是透视的。为了澄清,我添加了从OpenGL坐标到屏幕显示所需转换的草图:

(我从a开始,但找不到如何获取top、bottom等值)

您可能可以使用来实现这一点

如果使用标准透视矩阵,并且相机面向长方体正面,X/Y将是均匀的,但是远离相机的移动将使X/Y坐标向中心移动,从而缩小它们以获得标准视差效果。您所绘制的是向窗口顶部移动。您所需要做的就是将透视投影裁剪到低于其标准中心的位置。这就是
glFrustum
的作用-向下移动通常对称的顶部/底部参数,沿所需的轴对齐摄影机/视图矩阵,您应该具有所需的投影

摄影机/视图的任何旋转都会破坏X/Y平面上的均匀投影。对于相机移动,则仅限于平移和移动
glFrustum
边界


想一想,在调用
gluPerspective
之前,您可能只需输入一个
glTranslatef(shearX,shearY,0)
,就可以实现同样的效果。

您所绘制的只是透视图,而不是混合。您只需确保查看方向与z轴平行,以使长方体的正面和背面保持矩形。

您使用的是哪个版本的OpenGL?你已经使用自定义矩阵了吗?你想结合透视矩阵和剪切矩阵,我相信。。。我认为没有建立剪切矩阵的命令。您必须自己构造它。图表上的坐标看起来不正确,6个顶点的x坐标为10。@JWWalker:我修复了坐标,谢谢您的提示。我已经尝试过了,效果很好。一旦我知道了如何缩放场景,使场景在视锥体内最大化,我将把它作为答案发布。