第一人称视角的一种解决方案
a模型在以b模型為基準點,實現b模型旋轉,其a模型還是會在a模型原來相對的一個點上。比如說,a模型在b模型左上方的某個位置,如果b模型繞摸個軸旋轉了某個度數,其a模型還是相對與b模型在左上方某個位置。一次類推,可以位移縮放等。
現在就來簡單的介紹一下這中情況在Android開發中的實現的具體的策略。
1.OpenGL ES在定點著色器中有一個步驟是模型的頂點需要左乘MVP矩陣,這一步驟中涉及到了三種坐標系的轉換,從模型坐標系-->攝像機坐標系--->投影坐標系。從中可以看到矩陣的作用是將某個頂點所在的坐標系轉化到另外一個坐標系。那么我們的解決上面的這個問題的思路就是從這里來的。
2.我們知道,在創建一個模型的時候,我們人為的規定這個模型的某個地方為坐標系原點,然后我們計算這個模型上的各個頂點的位置,并且按照索引法或者三角形繪制的方法繪制出來這個模型,顯示到屏幕上。不知道有沒有人注意到一點,構建一個模型的時候,其模型上某個頂點的位置是相對與自己規定的某個原點的,這個原點在這個模型坐標系中其是0,0,0,而在世界坐標系中,其是有一個坐標位置的x、y、z,我們初始化一個矩陣來構建一個此模型的矩陣,矩陣左乘這個頂點的其次坐標,可以看到是在構造模型時頂點的坐標來加上此原點在世界坐標系中的坐標。看懂的人現在應該就有了解決上面問題的一個大的輪廓了。看不明白的,可以多看幾遍上面所說的理論。
3. 我們不妨把a模型所在的位置當作b模型上的一個頂點,其具體操作便是,我們使用a模型在世界坐標系下的坐標位置減去b模型在世界坐標系下的坐標位置(特殊的說明一下,在OpenGL中如果不加特殊的說明,我們自己設定的某個模型的位置的數據全部都是世界坐標系的坐標),現在我們得到的這個結果是上面步驟二中所說的某個頂點相對與其自身模型坐標系的坐標點,然后我們以b模型為ab混合模型的圓心初始化一個矩陣,并把位移、縮放,旋轉等信息存放到矩陣中(注意,其位移、縮放、旋轉等信息全部都是b模型的),然后我們用這個矩陣左乘剛才計算出來的a相對與b的坐標(齊次一下),然后得到最終的結果便是,b模型旋轉,位移,縮放了多少以后,a相對與b模型還在b沒有變化的位置。
總結一下,這種思路是根據OpenGL ES坐標系轉化而來的一種組裝多個模型為一個模型的一種算法,當然這種算法也可以實現將攝像機綁定到人的腦袋上實現第一人稱視角,各位讀者可以根據需要來判定是否用這種算法。
轉載于:https://www.cnblogs.com/SmileSFL/p/5791007.html
總結
以上是生活随笔為你收集整理的第一人称视角的一种解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 管理员账号无权限写入注册表
- 下一篇: 敏捷转型历程 - Sprint3 回顾会