2011-05-15 19 views
3

私はopenglエンジンで上軸にz軸を使用しようとしていましたが、何もしなくても何も表示されないようです。 、コードは次のようであったOpenGL Z軸Up

float width = xymax - xmin; 
float height = xymax - ymin; 

float depth = zfar - znear; 
float q = -(zfar + znear)/depth; 
float qn = -2 * (zfar * znear)/depth; 

float w = 2 * znear/width; 
w = w/aspect; 
float h = 2 * znear/height; 

m[0] = w; 
m[1] = 0; 
m[2] = 0; 
m[3] = 0; 

m[4] = 0; 
m[5] = 0; 
m[6] = h; 
m[7] = qn; 

m[8] = 0; 
m[9] = q; 
m[10] = 0; 
m[11] = 0; 

m[12] = 0; 
m[13] = 0; 
m[14] = -1; 
m[15] = 0; 

前に、私はアップとしてY軸を持っていたとき(うまく働いている):私はこのようなビュー行列を計算

m[0] = w; 
m[4] = 0; 
m[8] = 0; 
m[12] = 0; 

m[1] = 0; 
m[5] = h; 
m[9] = 0; 
m[13] = 0; 

m[2] = 0; 
m[6] = 0; 
m[10] = q; 
m[14] = -1; 

m[3] = 0; 
m[7] = 0; 
m[11] = qn; 
m[15] = 0; 

各オブジェクト/頂点が最初に単純な変換行列を乗じ:

1 0 0 xposition 
0 1 0 yposition 
0 0 1 zposition 
0 0 0 1 

、次いで 上に生成された射影行列によって私は黒い画面を得ます。これが機能するために私が変える必要がある何か他にありますか?

答えて

1

これらは投影行列で使用する行列のように見えますが、回転すると奇妙なことが起こります。なぜなら、入力データのOpenGLの期待に惑わされているからです。

代わりに、投影を適用する前に、入ってくるベクトルに回転を適用する必要があります。つまり、回転した行列で始まり、その上に投影を掛けます。

固定機能パイプラインを使用している場合は、作業用バリアントを使用して、投影行列に配置してください。また、シェーダーを使用している場合は、それをgl_ProjectionMatrixユニフォームに入れます。世界の空間の頂点の位置を必要とする多くのシェーダアルゴリズムがあります。投影とモデルビューがマージされているのは問題です。お使いのモデルビューのために

は、あなたの単位行列として、次の前提としています

1 0 0 0 
0 0 1 0 
0 1 0 0 
0 0 0 1 

をし、作業の投影を使用し続けると、第二段階でそれを適用します。あなたはしかし、無思慮にすべてゼロ以外のy <交換して何をしたか


- 間違っている> zのエントリを、:

w 0 0 0 
0 h 0 0 
0 0 q qn 
0 0 -1 0 

正しいこのy、zの列スワップされているでしょう:

w 0 0 0 
0 q 0 0 
0 0 h -1 
0 0 qn 0 

上記の新しい「識別情報」をr倍した場合、作業計画で得られるものはまさにこれです。

+0

私は3番目の行列を得るために何をやっているのかわかりません。列は入れ替えられていないようです。すべてが並べ替えられています。また、r-multiplyとは何ですか?レンダリングの詳細を投稿しました – zacaj

関連する問題