[英]OpenGL use left handed coordinate system in model view
在我的OpenGL中,我想在模型空间中使用左手坐标系,而在视图空间中使用右手坐标系。 那是因为如果我认为我是坐标系的原点:
setLookAtM
方法中放入z -= 1
,这很常见,如果我往回走,我必须向后减去z值 我使用android.OpenGL.Matrix
以下函数来创建我的视图和投影矩阵:
Matrix.setLookAtM(data, 0, 0, 0, 0, 0, 0, -1, 0, 1, 0);
Matrix.perspectiveM(projection, 45, width / height, 1f, 50f);
我该怎么做/必须做些什么才能获得上面描述的结果,以便模型的z轴指向屏幕,而相机的z轴指向屏幕之外?
如果这两个矩阵不可能做到这一点,那么我就必须忍受它,因为现在我不想每次由于时间而渲染对象时都对每个modelMatrix施加新的操作。
您可以使用任何所需的坐标系。
如果要使用左手世界坐标系,而要用右手眼坐标系,则意味着您需要在视图变换中翻转惯性。 您可以通过将镜像转换作为视图矩阵的一部分来执行此操作。
仅有的一点麻烦是setLookAtM()
将不支持该功能。 它建立的矩阵是旋转和平移的组合,可以保持惯用性。 您可以将结果与镜像转换结合在一起。 但是,由于使用您传递的参数,视图矩阵非常简单,因此自己构建视图矩阵也很容易。
实际上,您的setLookAtM()
调用:
setLookAtM(data, 0, 0, 0, 0, 0, 0, -1, 0, 1, 0);
建立一个单位矩阵。 因此,如果要翻转z坐标,请使用此镜像变换作为视图矩阵,而不是现在拥有的单位矩阵:
[ 1 0 0 0 ]
[ 0 1 0 0 ]
[ 0 0 -1 0 ]
[ 0 0 0 1 ]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.