2012-03-15 12 views
-1

新しいOpenGL仕様では、行列操作関数が削除されています。変換行列を手で計算してシェーダに渡す必要があります。 glRotateglScaleなどが姿を消したが、私は交換で何も表示されませんでした...OpenGLでのシェーダの変換行列の計算方法

私の質問:

どのように変換を扱うのですか?理論を掘り下げて手作業で実装するか、いくつかの定義済みのライブラリを使用しますか? "公式" OpenGLソリューションはありますか?

たとえば、datenwolfは、Cライブラリin this postの手作りを指します。 Javaユーザーの場合(Androidの場合)、AffineTransformクラスがありますが、3x3行列に適用されるため、OpenGLに適用するために余分な努力が必要ですmat4

解決策はありますか?

+0

-1:これは投票の質問です。これらはSOを歓迎するものではありません。 –

+0

@ニコルボラス:私は同意しない。明確な問題があります:「変換のためのOpenGLのサポートはもうありません。それではどうしますか?」すべての2番目の質問は、それが投票であると言って打ち込むことができます。 –

+0

いいえ、あなたは「あなたの解決策は何ですか?」と尋ねました。 *誰もが別の解決策を持っているので、これは投票の質問です。あなたは私達にこれをどのように扱うか個別に尋ねています。 –

答えて

3

どのように変換を処理しますか?理論を掘り下げて手作業で実装するか、いくつかの定義済みのライブラリを使用しますか?

いずれかの方法が使用されます。しかし、問題は次のとおりです。3Dジオメトリを扱う実際のプログラムでは、レンダリングだけでなく、これらの変換マトリックスが必要です。何らかの物理シミュレーションを実行しているとします。剛体の位置は、通常、それらの変換行列によって表されます。だから、物理学シムをやっているなら、その変換行列はどこかにあるので、それを使うだけです。

完全統合されたシミュレーションエンジンでは、冗長性を避けたいので、ODE、Bulletなどの物理シミュレーションライブラリを使用して、オブジェクトをコピーせずに構造を表すオブジェクトに直接作用するように修正します。データをライブラリー固有のレコードに振り分けて戻して戻します。

だから、通常はいくつかの混合物で終わる。数学の中には、既存の図書館や、自分で実装するものがあります。

3

私はdatenwolfに同意しますが、私はEigenを使用しています。これは、幻想的な汎用マトリクスの数学ライブラリです。

+0

+1アイガーに言及する – datenwolf

0

glsl 3.0 glTraslate()、glRotate()、fTransform()などの関数は廃止されていますが、まだ使用可能です。

より良い方法は、glsl仕様と互換性のあるGLM http://glm.g-truc.net/のような数学ライブラリを使用することです。

投影行列、モデル行列、およびビュー行列は、均一変数としてシェーダに渡されます。

関連する問題