2017-03-25 9 views
0

私はOpenGLを使って1人称シューティングゲームを作っています。物理的な剛体(Bulletライブラリを使用)の作成を相殺しようとしています。常にカメラの正面の設定点にあります。OpenGLでカメラの法線を計算する?

明らかに、これを行う方法の1つは、ビューマトリックスから3x3回転行列またはクォートを作成し、それに前方ベクトルを掛けて、カメラがどこに向いているかを示す法線を得ることです。

しかし、私はこれらの値(ビューマトリックスからのクワット、フォワードベクトルとなるもの、乗算の結果を正規化する必要があるかどうかなど)を取得する方法については不明です。私はチュートリアルを見てみましたが、私はまだこれらの値を得ることについては不明です。

+0

あなたのカメラには3x3のマトリックスを保存しているはずです。希望のベクトルは3番目の列です。カメラはシーンの一部であり、シーン内の他のオブジェクトと同じようにオブジェクト変換を構成するので、これは私がとにかく行うことです。 – Krum

答えて

1

あなたは実際にはかなり近く、cameraPosは正しいはずです。逆行列を見ると、カメラの法線/方位は、カメラの位置よりも前の列にすぎません。

は、ここにいくつかの擬似GLSL状コードは次のとおりviewがカメラのビュー行列(mat4)である

mat4 inv = inverse(view); 

vec3 pos = vec3(inv[3]); 
vec3 dir = -vec3(inv[2]); 

+0

ああ、ありがとう。だから通常の "vec3 norm = dir * pos;"ですか?もしそうなら、私は剛体の作成を相殺するために法線をどのように使うのか知っていますか?現在のところ、カメラの位置(x、y、z)が与えられていますが、カメラの前に常に剛体を作成する必要があります(向きに関係なく)。 –

+0

通常、カメラが向いている方向を指している場合は、この場合dirとなります。したがって、オフセット位置を作成したい場合は、 'new_pos = pos + dir * offset'を実行します。ここでoffsetは長さが' 10'です。それで 'new_pos'は' dir'の方向に 'pos'から10単位離れています。 – Vallentin

+1

素晴らしいです、あなたは長年の問題を解決するのに役立ちました。私はそれを(0.3,0,2)でオフセットしたいので、vec3を使ってオフセットしてみましたが、それは私が考え出すことのできるものです。とても有難い。 –

関連する問題