一般情況下實現第一人稱視角遊戲有兩種方法,一是移動場景,二是移動眼座標.移動場景方法比較簡單,使用gltranslatef與glrotatef配合即可,但一般只在簡單場景和單角色的情況下使用,而且角色的各種計算(如實時座標、碰撞)不好實現,所以不推薦使用;移動眼座標的方法就非常靈活,它對場景和角色的狀態未做任何操作,一般只要設定成跟隨主角色移動旋轉即可實現第一人稱視角視覺效果.
void airroam(void)
;static glfloat s_at=;
static glfloat s_angle = -90.0; //如果初始角度設定為0則初始面向x軸正方向,設定為-90面向
//z軸負方向,符合預設情況下的設計習慣。
float pi=3.14159f;
// 旋轉請求
if(key_down(dik_left))
if (key_down(dik_right))
float rad =float(pi*s_angle/180.0f); //計算sin和cos函式中需要的引數。
// 前進,後退請求
if(key_down(dik_up))
if(key_down(dik_down))
// 觀察點
s_at[0] = float(s_eye[0] + 100*cos(rad));
s_at[2] = float(s_eye[2] + 100*sin(rad));
s_at[1] = s_eye[1];
//觀察點可以設定的更遠一些,如果設定的更小可能導致不能看到較遠的物體,也是通過sin和cos函式實現
//向前進方向去設定觀察點。
// 設定觀察點
glloadidentity();
glulookat(s_eye[0], s_eye[1], s_eye[2],
s_at[0], s_at[1], s_at[2],
0.0, 1.0, 0.0);
}
在wxPython中使用OpenGL
參考資料只有wxpython doc的乙個例子。需要安裝pyopengl pyopengl.sourceforge.net 給opengl使用的視窗容器是wx.glcanvas.glcanvas,子類化它,並在子類的paint事件處理中這樣處理 def onpaint self,event dc w...
在wxPython中使用OpenGL
參考資料只有wxpython doc的乙個例子。需要安裝pyopengl pyopengl.sourceforge.net 給opengl使用的視窗容器是wx.glcanvas.glcanvas,子類化它,並在子類的paint事件處理中這樣處理 def onpaint self,event dc w...
在OpenGL中使用gluLookAt實現漫遊
一般情況下實現第一人稱視角遊戲有兩種方法,一是移動場景,二是移動眼座標.移動場景方法比較簡單,使用gltranslatef與glrotatef配合即可,但一般只在簡單場景和單角色的情況下使用,而且角色的各種計算 如實時座標 碰撞 不好實現,所以不推薦使用 移動眼座標的方法就非常靈活,它對場景和角色的...