2017-01-07 7 views
1

私は自分自身を構築しようとしていますOpenGLに表示してください。私はOpenGLのView Matrixを理解しようとしています

私はOpenGLのドキュメントから、このリンク https://www.opengl.org/sdk/docs/man2/xhtml/gluLookAt.xml

を以下のよ、私は次のようしています。目の位置

= eye(xe, ye, ze)中心位置 = cen(0, 0, 0)

up = up(xu, yu, zu). (e.g. up = (0, 1, 0)) 

前方ベクトル

f' = cen - eye = (0, 0, 0) - (xe, ye, ze) = (-xe, -ye, -ze) 

側ベクトル

s' = f' x up 

F」までxは、なぜ私は理解していません、どうしてxf = S'X F 'なぜないのu' = F 'XS'

は、我々はSを正規化、U'、F」

'

u' = s' x f' 
はなぜuの理解do't'
s = norm(s'), u = norm(u'), f=norm(f') 

我々は(我々は代数クラスで学んだ)行優先で

R = 
s_x u_x f_x 0 
s_y u_y f_y 0 
s_z u_z f_z 0 
0 0 0 1 
回転行列を構築

翻訳行列:。

T = 
1 0 0 x 
0 1 0 y 
0 0 1 z 
0 0 0 1 

我々は

M = T*R 
View Matrix V = invert(M) 
V = invert(T*R) = invert(R)invert(T) 
V = transpose(R)invert(T) 

transpose(R) = 
s_x s_y s_z 0 
u_x u_y u_z 0 
f_x f_y f_z 0 
0 0 0 1 


invert(T) = 
1 0 0 -x 
0 1 0 -y 
0 0 1 -z 
0 0 0 1 

ので

View Matrix V = transpose(R)invert(T) 

しかし、OpenGLのドキュメントからを知って、Fの変更は

回転を-fします変更我々は負のを楽しみにベクトルを変更する必要がある理由

R = 
s_x u_x -f_x 0 
s_y u_y -f_y 0 
s_z u_z -f_z 0 
0 0 0 1 

を以下に私は理解しないでください。

答えて

2

クロスプロダクトオーダーはその定義からちょうど後になります。それはまるでそれのようです。あなたは右手座標系を設定しています。したがって、右手の親指を第1因子と人差し指を第2因子で揃えると、中指は交差商品の方向(両方に垂直)を指します。これについて実際にはそれほど多くのことは言いません。

右利きの座標系を設定しているので、カメラの順方向を負のz方向にマッピングする必要があります。そのため、回転行列の3番目の列が反転します。これをしなければ左利きの座標系になります。ここでカメラは正のz軸の方向を見ます。

関連する問題