2011-08-14 18 views
2

私は基本四角形を移動する必要があることについてちょっと混乱しています。翻訳マトリックスを使用するか、オブジェクト頂点を変更する必要がありますか?どちらが正確ですか?移動オブジェクトOpengl Es 2.0

私は頂点シェーダを使用します gl_Position = myPMVMatrix * a_vertex;

また、VBOを使用

+0

ここで新しくなったので、受け入れと投票の機能についてあなた自身に知らせてください。 –

答えて

1

すべての頂点を変更してオブジェクトを移動しないでください!何千もの頂点を持つ複雑なモデルはどうですか?たとえそれが単純な広場であっても、そのような悪い習慣を進化させないでください。それはまさに変換行列のためのものです。既にシェーダコードで変換マトリックスを使用しています。命名から、私はそれが前もって乗算されたモデル - ビュー - 投影行列であると仮定します。そのため、ワールド空間にオブジェクトを配置するモデル行列(ここでは翻訳が通常入ります)、世界を目/カメラ空間に配置するビュー行列(モデルとビュー行列は、時にはモデルビュー行列固定された関数GLで)、投影行列はあらゆる種類の透視射影および/またはクリッピングボリュームへの変換を行い、3つすべてがP * V * Mとして掛け合わされます。これらの変換行列およびそれらの使用についてまだ疑問がある場合は、 3D変換に関する文献やお気に入りのOpenGLチュートリアル。

3

正確さの観点から、両方の方法はほぼ同等です。 1つのスクエアでは、おそらく差異を測定することはできませんが、100万個の正方形(または三角形)を考えると少し複雑になると思います。 :

すべての三角形が相対的な位置を変えている場合は、グラフィックカードのメモリに直接データをプッシュできるので、おそらくvboを変更するほうがよいでしょう。非常に遅い)。

すべての三角形が(同じ3Dモデルの場合のように)同じ位置にある場合は、変換行列を変更するだけです。この場合、データをgfxメモリに再度プッシュする必要はなく、関数呼び出しを1つしか持たず、数バイトのデータだけをgfxメモリに転送しています。

アプリケーションによっては、三角形を異なるカテゴリに分けて適切に更新することをお勧めします。

+1

+1は私の答えよりもはるかに優れています。 –

関連する問題