繁体   English   中英

OpenGL在模型视图中使用左手坐标系

[英]OpenGL use left handed coordinate system in model view

在我的OpenGL中,我想在模型空间中使用左手坐标系,而在视图空间中使用右手坐标系。 那是因为如果我认为我是坐标系的原点:

  • 对我来说,很常见的是,距离较远且位于我前面的thig具有正z坐标,因此我必须在模型视图中使用左手坐标系
  • 如果我往回走,可以在创建我的视图矩阵的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM