[英]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.