圖片具有相同的幀,並直接在其上方邊界的透明的CALayer一個OpenGL ES 1.1渲染表面。使用4x4矩陣轉換(翻譯和旋轉)OpenGL場景中的對象。覆蓋的CALayer使用CATransform3D(which happens to be a 4x4 matrix, identical to ones used for OpenGL transforms)轉換子層。如何將3D OpenGL矩陣轉換爲CoreAnimation CATransform3D?
OpenGL的矩陣變換場景中的物體在完全相同的方式,我想他們。然後,我想要採用場景對象上使用的相同矩陣變換,並讓CALayer將其應用到子圖層,以使子圖層與場景對象的位置和方向完全相同。
問題是(我認爲)我的OpenGL場景和CALayer的「場景」不同意任意「場景單元」的定義,並且這種分歧表現爲自身翻譯中的差異子層與場景對象的翻譯(旋轉很好)。具體來說,CALayer似乎在理解場景單元與屏幕像素非常接近的情況下運行,而我的OpenGL場景使用更大的單元,這意味着CALayer只能轉換場景對象的一小部分。
所以,我正在尋找的是在數學上轉換矩陣變換在我的OpenGL場景單位指定的功能等價矩陣的CALayer的場景單位變換指定的方式。我需要能夠根據我的OpenGL場景單元定義一個CALayer場景單元,但我不知道CALayer如何在幕後與OpenGL進行交互。
是否可以計算出這樣的轉換?如果沒有,是否有其他方法可以幫助?
注意:我已經能夠使用純粹的經驗性方法來解決問題,基本上可以歸結爲需要對CATransform3D進行哪些調整才能使其在幾個位置上工作,並進行外推。我希望有更精確的事情。
,你用什麼來'glOrtho()'爲你的OpenGL ES的場景?通過調整正交矩陣,您可以將OpenGL ES座標系與CALayer座標系一致嗎? – 2011-05-04 21:59:41
@Brad:我實際上並沒有在OpenGL場景中使用正交投影。這是一個透視場景,透視截錐體是根據運行應用程序的設備的攝像機參數計算出來的。對CALayers的透視轉換看起來對我來說很深,因此我不確定兩者之間的相關性。 – 2011-05-04 22:17:58
那你使用'glFrustum()'嗎?如果是這樣,您可能需要將模型視圖矩陣與'glFrustum()'的透視矩陣相乘,以便像您的CATransform3D那樣使用它,正如David所言。 – 2011-05-04 22:32:20