2016-08-01 11 views
1

現在、私は自分のゲームで太陽のシャドーマッピングを実装しようとしています。このためには、glmの関数を使って太陽の視点からシーンをレンダリングする必要があります。ここに私のコードは次のとおりです。OpenGL GLM lookAtの異常な動作

projection = glm::ortho<float>(-200, 200, -200, 200, -200, 400); 
view = glm::lookAt(sun_pos_modelspace, -target_position_modelspace, glm::vec3(0, 1, 0)); // target needs to be negative for correct camera direction 
final_matrix = projection * view; 

これは、ゲームが開始されるときにシーンが太陽の視点からレンダリングされるため、うまくいきます。しかし、私がターゲットを変換すると、ビューマトリックスは元の目の位置(太陽の位置)から移動しているように見えます。私は目をまったく動かしたくありません。私はちょうどカメラが太陽の位置に座り、ターゲットベクトルに向かって直接見たいと思っています。

これを解決するために他のglm関数を使用する必要がありますか?またはlookAtを間違って使用していますか?

+1

私はあなたが使用しているglmのバージョンを知りませんが、0.9.7ではlookat()は想定通りに動作しません。自分でLookAtを計算することをお勧めします。 –

+1

@MichaelIV:that奇妙に聞こえる、glmはかなり長い間周りにあって、一般的に安定しています...あなたはそれのバグレポートを開くべきです、そうでなければ修正することはできません。 – karyon

+1

gluLookAt()で見つけたものともっと似たものを使っています.GLMでなぜ翻訳パートにドットをつけているのか分かりません。また、私の前進が正(GLのデフォルトに反して)であるので、 –

答えて

0

glm::lookAtの3つのパラメータは、eye,centerおよびupです。だから、あなたはそれが欲しいと思っていてどこにでも目を向けるので、それだけで動くべきではありません。太陽の位置にそれを設定する(しかし、それが世界座標であることを確認してください)

あなたの中心パラメータは少し魚のように見えます。それはカメラが見なければならないポイントであるはずです。いくつかの世界的ポジションを否定するのは私には意味がありません:)

否定にもかかわらず画面上に何かがある理由は、あなたの近くの飛行機(glm::orthoの最後のパラメータの2番目)です。通常は、カメラの前にオブジェクトを表示する距離です。負の値を指定すると、カメラの背後にあるオブジェクトが表示されます。

編集:明らかにするには、正射影の陰面に近い負の値を持つことが理にかなっています。遠くの場所に太陽を置いて、その前にあるすべてのものをレンダリングする方が簡単だと思います。これは概念的に簡単になります。

短いストーリーでは、目標位置を無効にして、近くの平面に正の値を使用しないでください。

+0

ありがとうございました@ karyonそれは働いた! – Jas

関連する問題