2012-03-31 42 views
0

嗨,我使用DirectX 10和C++來製作一個非常簡單的第一人稱射擊遊戲,只是一個槍和目標,我有槍和目標和槍射擊子彈的方向等。DirectX相機定位第一人稱射擊遊戲

但是我不能讓相機在槍被鎖定,着眼於十字線, 相機我有這個

vecEye.x = g_f_GunX; 
vecEye.y = g_f_GunY + 3; 
vecEye.z = g_f_GunZ - 5.0; 


vecAt.x = g_f_CrossX; 
vecAt.y = g_f_CrossY; 
vecAt.z = g_f_CrossZ; 

g_Camera.SetViewParams(&vecEye, &vecAt); 

本作的目的,我的十字準線僅僅是一個對象,它是盈方的槍,它隨槍移動,我已經把相機的代碼放在'onFrameRender'方法中

這是我的假設,這個代碼應該把相機放在我的槍後面,當槍(和十字線)移動時,相機應該一直在屏幕中心看十字準線,但是在運行時它的攝像頭完全不這樣做的,犯規在所有

任何幫助將大大appriciated

回答

0

因爲我這個十字的目的與槍或十字線移動只是一個對象,它是在前面槍和它隨槍移動

除非「眼睛」直接位於槍管後面(槍將阻擋視線),否則這種方法無法工作 - 如果「眼睛」甚至略高於槍管,則最終將通過十字準線對象觀察地面,並且視圖方向根本不匹配攝像機方向。

幾種方法來對付它:在屏幕的中間爲2D形狀

  1. 繪製十字線,從相機拍攝子彈,並繪製槍模型作秀。我認爲這是在「過去的日子」(末日1等)中執行此操作的相當常見的方式。
  2. 將屏幕中間的十字準線畫成二維形狀。製作一個在相機位置開始的碰撞檢測傳感器(射線),並指向與相機相同的方向。當用戶按下「射擊」時,使用這個射線傳感器進行碰撞查詢,如果碰到任何東西,就在那一刻開槍。如果你正在編寫第三人稱射擊遊戲,那麼這是處理瞄準的唯一真正方法。
  3. 刪除十字線和用戶激光指示器/瞄準瞄準槍(可能看起來很酷),從槍射擊子彈。當然,激光指示器射線應該來源於槍支。這被用於零容忍,AVP和其他幾個遊戲。

同樣在3d射手相機方向經常存儲爲角度的偏航/俯仰/滾動組合。

+0

感謝那個病人現在給它一個嘗試,不要假設你可以在我的另一個問題上拋出任何光(雙關語不打算)http://stackoverflow.com/questions/9955762/directx-lighting – AngryDuck 2012-03-31 12:40:35