簡體   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