4

したがって、頂点を変換してからGLSLのフラグメントシェーダーに渡す標準的な方法は次のようになります。

uniform mat4 u_modelview;
attribute vec4 a_position;

void main() {
    gl_Position = u_modelview * a_position;
}

ただし、私は2Dで作業しているため、4x4マトリックスには冗長性があります。これを行う方が効率的でしょうか?

uniform mat3 u_modelview;
attribute vec3 a_position;

void main() {
    gl_Position = vec4(u_modelview * a_position, 1.0);
}

gl_Positionには4成分ベクトルが必要なため、出力時に追加の操作が必要です。ただし、行列の乗算は16ではなく9要素用です。これ以上のことはできますか?

4

2 に答える 2

4

グラフィックハードウェアは、3x3と4x4のマトリックスで同じ時間変換されると思います。頂点を変換するプロセスで証明されたボトルネックがありますか?通常、スローダウンは頂点ではなくフラグメントシェーダーに表示されます

于 2011-03-27T14:39:33.887 に答える
1

場合によります。頂点ごとの複雑な情報があり、それがボトルネックである場合、頂点ごとのデータを減らすと、速度がいくらか向上するはずです。

最良の方法は、テストを設定し、それを両方の方法で測定することです。

于 2011-03-27T14:36:25.623 に答える