0

Collada 形式から独自のカスタム形式に変換できるプログラムを作成しようとしています (この部分は簡単で制御可能です)。私がやりたいことは次のとおりです。

1.) Collada ファイルから解析された正確なデータを使用して、モデルを描画する方法を見つけます。a.) 単純な立方体は 8 つの頂点、36 の法線、および 12 のテクスチャ座標を生成します。これは検索ですが、OpenGL でこれを描画する唯一の方法は、法線の量と一致するように頂点と法線のデータを複製する必要があります。 .

2.) マルチテクスチャリングを実装する方法を見つけます。a.) これに関するチュートリアルをたくさん見つけましたが、実際にこれを使用する方法が見つからないようです。これらの機能は私のバージョンのopenGLに組み込まれていないようで(2台のコンピューターでこれを試しました)、欠落している可能性のある必要なdllを誰も文書化していません。

4

1 に答える 1

0

単純な立方体は、8 つの頂点、36 の法線、および 12 のテクスチャ座標を生成します。

いいえ、単純な立方体には 8 つの位置がありますが、頂点は単なる位置ではなく、他のすべての属性も含んでいます。したがって、実際には頂点の重複は発生しませんが、そのとおりです。属性に冗長性が生じることになります。

なぜそうなのかを説明する更新

頂点は、その属性のベクトル全体です。1 つを変更すると、まったく異なる頂点になります。

純粋に抽象的な属性のセットとテクスチャ座標を使用する頂点シェーダーがあるとします。

#version 150

attribute vec2 foobar;
attribute vec4 fnord;
attribute vec2 texcoord;

この頂点シェーダーは、これらの属性から位置を計算します。

void main() {
    gl_Position = vec3(fnord.xw, dot(foobar,texcoord));
}

ご覧のとおり、頂点の位置はすべての属性に直接依存するようになりました。しかし、もちろん、他の変数も同様です。

冗長な計算を保存するために、GPU は頂点属性入力から変換ステージ/頂点シェーダー出力へのキャッシュ マッピングを維持します。頂点がインデックスの間接化によってアクセスされる場合、キャッシュは実際にはインデックスをキーとして使用します。

覚えておいてください: 頂点に関連する何かが変更されると、頂点全体が変更されます。また、最新の OpenGL では、頂点の属性、さらには位置が非常に異なる結果になる可能性があります。

これらの関数は、私のバージョンの openGL に組み込まれていないようです

ああ、彼らはおそらくあなたのドライバーの一部です。おそらく、それらをプログラムにロードしていないだけです。OpenGL DLL は、非常に基本的なことだけをカバーしています。それ以外の場合は、関数ポインターを動的にロードする必要があります。これには GLEW のような素敵なラッパーを使用してください ( http://glew.sourceforge.netで入手できます)。

于 2012-09-22T00:33:21.037 に答える