我正在實現一個OpenGL ES 2.0 iOS應用程序的平移,並且在某些情況下我正努力在z方向上進行平移。最初,當模型加載時,y +朝向屏幕的頂部,x +指向屏幕的左側,而z +則在屏幕之外到達用戶。平移按預期工作 - 平移「正確」按預期沿正x軸移動模型。 Y也適用 - 平移「向上」將模式沿着正Y軸移動(座標變爲負值,所以我們只需翻轉座標以正確表現)。問題始終與z軸有關,當模型旋轉時,z +軸現在指向右側,平移「右側」我收到負向z值並平移到左側我得到正值,所以它看起來像座標像z軸一樣翻轉。當z +指向屏幕左側時會出現相同的邏輯 - 左側平移和右側平移右側的負值。到現在爲止還挺好。基於旋轉矩陣的OpenGL ES平移(X,Y,Z)
如果z +正面臨着向屏幕的頂部,向上掃視給我正值當所有其他方向沿Z +平移時,給了我負值。平移降低了我的負面價值。所以當z向左/向右時,我需要翻轉座標,但是當z向上/向下時,如果我這樣做,則平移是向後的。我所做的只是從平移手勢中檢索觸摸位置,創建一個z = 0的GLKVector3
,然後將我當前的模型視圖矩陣應用到此矢量。模型視圖矩陣應該應用當前旋轉,因此給定點並根據旋轉輸出相應的點......所以我認爲。有沒有一些邏輯可以準確處理z方向的平移?
基本上我的相機永遠不會發生變化,它總是聚焦於0,0,並在近平面。我假設這就是爲什麼你還添加了第二句,因爲這聽起來像我想要完成的。因此,從我的眼座標中獲取我的平移點,使用z =近平面並將其乘以逆矩陣或模型視圖矩陣*投影矩陣? – kschins
是的,這應該將它轉換到對象空間中。 –
這現在創建了相反的效果 - z +指向頂部屏幕正常工作,因爲z值是負向平移和正向平移。當z +運行在屏幕的右側時,z值爲+平移權和負平移剩餘,所以一組仍然按照預期平移。 locationVector = GLKMatrix4MultiplyVector3(GLKMatrix4Multiply(inverseModelViewMatrix,self.projectionMatrix),locationVector); – kschins