第一人稱視角的一種解決方案

2022-09-02 23:42:16 字數 1063 閱讀 9107

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座標系轉化而來的一種組裝多個模型為乙個模型的一種演算法,當然這種演算法也可以實現將攝像機繫結到人的腦袋上實現第一人稱視角,各位讀者可以根據需要來判定是否用這種演算法。

openGL實現第一人稱視角

最近做的乙個題目要求用opengl實現乙個漫遊功能,雖然不知道這個漫遊是不是指第一人稱 其實我覺得第三人稱俯視的那種也算 不過都差不多 主要使用opengl的glulookat函式,通過計算球面座標來實現 目錄 glulookat 實現過程 demo 最終效果 void glulookat gldo...

第一人稱視角漫遊(unity 暴風魔鏡)

沒用的話就不說了,直接開始。1 開啟unity,將場景的攝像機刪除掉。找到mojingmain.prefab,新增到場景中。2 搭建場景。3 場景中新增mojingfirstcharactercontroller.prefab和integrateinputmanager.prefab 4 建立乙個空...

Unity VR學習 第一人稱射擊遊戲(1)

1 封裝標籤 1.標籤有player,enemy,gamecontroller,fader 畫布 maincamera 2.使用const常量進行封裝 const 宣告某個常量欄位或常量區域性變數。注意 常量欄位和常量區域性變數不是變數並且不能修改 利用const管理遊戲標籤 2 場景淡入淡出 1....