2

Spidergl を使用して既に実装されているサンプル コードから webgl シャドウ マッピングを実装しようとしています。WebGLの上に直接実装しようとしています。

ほとんど同じようなコードを持っていると思いますが、結果が得られません。問題をコードの小さな部分に絞り込みました。私のシェーダー コードではa_position、(頂点位置属性) を vec3; として定義しています。Spidergl コードでは vec4 として定義されています。Spidergl コードをくまなく調べて、xyz トリプレットである頂点位置属性が vec4 にどのように入力されているかを理解しました。vertexAttribPointer の呼び出しでトリックが見つかると思っていました。しかし、彼らが渡しているサイズとストライドの値は、予想通り 3 と 12 です。同じことを行うようにコードを変更しましたが、まだ同じ結果が得られていません。

位置トリプレットがマップされる基本的なメカニズムを誰かが説明できますかvec4? 立方体の角の x、y、z 座標と共に w について言及しているコードも見たことがありませんが、a_positionasを取るシェーダーがありますvec4。それでは、vec4 の 4 番目の float には何が埋められるのでしょうか?

4

1 に答える 1

3

glVertexAttrib ドキュメントのこのセクションに興味があるかもしれません:

これらのコマンドを使用して、 indexで指定された汎用頂点属性の 1 つ、2 つ、3 つ、または 4 つすべてのコンポーネントを指定できます。

コマンド名の1は、値が 1 つだけ渡され、汎用頂点属性の最初のコンポーネントを変更するために使用されることを示します。2 番目と 3 番目のコンポーネントは 0 に設定され、4 番目のコンポーネントは 1 に設定されます。

同様に、コマンド名の2は、最初の 2 つのコンポーネントに値が提供され、3 番目のコンポーネントが 0 に設定され、4 番目のコンポーネントが 1 に設定されることを示します。

コマンド名の3は、最初の 3 つのコンポーネントに値が提供され、4 番目のコンポーネントが 1 に設定されることを示します。名前の4は、4 つのコンポーネントすべてに値が提供されることを示します。

基本的に、vec3 で vec4 属性を設定すると、vec4 の最初の 3 つの要素が vec3 と一致し、4 番目の要素が 1 に設定されます。

私の推測では、あなたの問題はコードのどこかにあると思います。

于 2012-04-02T15:45:35.210 に答える