2012-03-31 30 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'メソッドに入れました

私の前提では、このコードはカメラを私の銃のすぐ後ろに置き、銃(および十字線)を動かすと、カメラは常に画面の中央で十字線を見るべきですそれはすべてのヘルプははるかになりカメラすべてでこれをやっていないと、すべての

で銃や十字線を移動するdoesntのは、私の十字線が目の前にあるだけのオブジェクトである。この目的のために

答えて

0

をにappriciated銃とそれは銃で動く

「目」が砲身のすぐ後ろにないと(銃が視界を遮る) - 「目」が銃のわずかに上であっても、十字線オブジェクトを介して地面を見ることになります。視線の方向はカメラの方向とまったく一致しません。それに対処するために

いくつかの方法:

  1. 、2D形状として画面の中央に十字線を描画したカメラからの弾丸を撃つ、そしてちょうどショーのための銃のモデルを描きます。私はそれが "昔"(運命1など)でそれを行うのはかなり一般的な方法だと思う。
  2. 十字の中央を2dの形で描く。カメラの位置から開始し、カメラと同じ方向を指す衝突検出センサー(光線)を作成します。ユーザーが「発射」を押すと、この光線センサーを使用して衝突照会が実行され、何かに当たると、その時点でガンが発砲します。これは、あなたが第三者のシューティングゲームを書く場合、狙いを扱う唯一の真の方法です。
  3. 十字線とユーザーのレーザーポインター/視線を除去して銃を照準してください(涼しいかもしれません)、銃から弾丸を撃ちます。レーザーポインターの光線はもちろん銃に由来するはずです。これは、ゼロトレランス、avp、その他いくつかのゲームで使用されていました。

また、3D撮影者では、カメラの向きは、角度のヨー/ピッチ/ロールの組み合わせとして格納されることがよくあります。

+0

それは私に別の質問に光を当てることができると仮定しないでください今、それを試してみていただきありがとうございます(馬小屋)http://stackoverflow.com/questions/9955762/directx-lighting – AngryDuck

関連する問題