2016-05-03 7 views
1

どのような操作でも、最下行を何か他のものにすることはできません。[0 0 0 1]と頂点位置にはvec3が付属しています。これらは変換前にvec4にアップグレードする必要があります。しかし、私は常に投影/ビュー/ modeltoworldのためのmat4を使用してシェイダーを参照してください。それで、なぜmat4xではなくmat4を使うのが標準ですか? mat4xvec4の乗算の16バイトと1/4の転送を節約できました。ほとんどのシェーダがmat3x4ではなくmat4を使用するのはなぜですか?

+1

あなたはまだvec4が必要です(W = 1が必要です)。問題の行列はmat4x3(4列、3行)である必要があります。それ以外の場合、位置の翻訳は機能しません。 –

答えて

3

例えば、透視投影変換は、[0 0 -1 0]の最下位行を持ち、wの頂点座標に影響します。したがって、vec3をシェーダーの頂点を表すために使用した場合、mat3x4変換を適用した後、w座標に1.0の値が自動的に挿入され、が無効になりますそれらは眼から離れ得るようにオブジェクトが小さく見えることを可能にする魔法である透視分割ステップ(グラフィックス・システムは、X各を分割する場合、すなわち、Y、及びZワットにより座標)。

一般に、ユニフォーム更新(投影変換マトリックスを更新するためのもので、シェイダープログラムバインディングごとに1回発生する可能性があります)あたり16バイトを節約することは、頂点属性またはテクスチャアップロードを最適化することと比べて何も行われません。事実上他のグラフィックス関連。

+0

ええ、私はパフォーマンス面をより論理的な側面に押し付けたいとは思わなかった。そしてええ、そうですよ、明るいところで、私はちょうど私が使っている図書館で見つけましたが – user2475269

関連する問題