射擊遊戲在屏幕中畫有『準星』用於射擊怪獸.因為『準星』固定在屏幕中心.當你移動滑鼠時.相機視角也隨之改變.而當你要移動射擊位置可通過按鍵盤上下鍵
移動滑鼠 | 響應 | 角度 |
左移 | 相機視角繞Y軸左轉 | if (y >= 360.0f) y = 0.0f; |
右移 | 相機視角繞Y軸右轉 | if (y <= -360.0f) y = 0.0f; |
上移 | 相機視角繞Z軸右轉 | if (z > 60.0f) z = 60.0f; |
下移 | 相機視角繞Z軸左轉 | if (z < -60.0f) z = -60.0f; |
鍵盤鍵 | 響應 | 位置與角度 |
上鍵 | 位置前移 | x = x – (speed * cos(DEG_TO_RAD(y)));
z = z – (speed * sin(DEG_TO_RAD(y))); |
下鍵 | 位置後移 | |
左鍵 | 相機視角繞Y軸左轉 | if (y >= 360.0f) y = 0.0f; |
右鍵 | 相機視角繞Y軸右轉 | if (y <= -360.0f) y = 0.0f; |
更新相機位置與角度
1.旋轉角度 deltaTime為時間間隔
rot.x = rot.x + dx * 60 *deltaTime;
rot.y = rot.y + dy * 60 *deltaTime;
rot.z = rot.z + dz * 60 *deltaTime;
2.限制視口角度否則會上下搖恍
if ( rot.y >= 360.0f || rot.y <= -360.0f)
player->rot.y = 0.0f;
if (player->rot.z > 60.0f)
player->rot.z = 60.0f;
if (player->rot.z < -60.0f)
player->rot.z = -60.0f;
3.角度轉弧度
float radian = 3.141592654f * player->rot.y / 180.0f;
計算移動速度
4.float speed = dx * 3 *deltaTime;
5.計算位置
pos.x = (float)(pos.x – (speed * cos(radian)));
pos.z = (float)(pos.z – (speed * sin(radian)));
radian = 3.141592654f * rot.z / 180.0f; // 弧度
pos.y = (float)(pos.y – (speed * sin(radian)));
6.UVN相機模型
最後製作準星紋理
- 繪製白色準星
- 背景色填充為黑色
- 模色設為『索引色』256色
- 設定透面色為黑色glAlphaFunc(GL_GREATER, 0);