問題タブ [vertex-attributes]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2847 参照

opengl - 頂点シェーダー内から頂点属性が有効になっているかどうかわかりますか?

頂点属性が頂点シェーダー内から有効になっているかどうかを確認する方法があるかどうか疑問に思っていましたか? 頂点属性が無効になっている場合、すべての値が 0.0 として扱われることがわかっているので、次のようなテストを実行できます。

しかし、これには、属性が有効で値が 0 に設定されている場合 (無効であるかのように扱われる) の明らかな問題があります!

もう1つの解決策は、属性を使用するかどうかを示す一様な変数を使用することですが、それを行うGLSLに組み込まれたものがあるかどうか疑問に思いましたか?

0 投票する
1 に答える
492 参照

c++ - テクスチャード glDrawElement

3D モデルのテクスチャを取得するのに問題があります。テスト目的で基本的なプリミティブを使用しており、より多くのエンジン固有のコードに取り組んでいるため、3D モデルに飛び込んでいます。ただし、glDrawElements 関数に問題があります。テクスチャをクワッドに描画できるため、テクスチャが正しく読み込まれていることがわかっています (コメントの glBegin に注意してください)。ただし、glDrawElements を使用すると、テクスチャが描画されません。テクスチャの一部の色 (黄色) が表示されます。テクスチャリング コードを削除すると、3D モデルが最後に設定された色に戻るため、何かを行っています。おそらく glVertexAttributePointer と関係があるのではないかと考えています。これらの関数が何をしているのかがわかります。

私の VertexPTN クラスは、Position、Texture Coordinate、Normal の単なるコンテナです。したがって、クラス内のベクトルの配置が進むと想定しています。Vector3f、Vector2f、Vector3f、glVertexAttributePointer の最後のパラメーターを 0、12、20 に設定します。

私が見逃しているものについて誤解はありますか?私は実際には openGL のプロではありませんが、セットアップと基本的なレンダリングについてはある程度理解しています。未設定の GL 状態で、テクスチャがメッシュにレンダリングされない原因は何ですか?

0 投票する
1 に答える
586 参照

opengl - glDrawElementsでインデックスデータはどのように処理されますか?

glDrawElementsが呼び出されると、インデックスのバッファを使用して、どの頂点をどの順序で描画するかを決定することを私は知っています。私の質問は、これらのインデックスがテクスチャ、通常、および色の属性にどのように適用されるかです。各頂点に使用されるテクスチャ座標と法線に別のインデックス配列を設定することは可能ですか?または、描画されている頂点と整列するように、法線座標バッファーとテクスチャ座標バッファーを作成する必要がありますか?

0 投票する
1 に答える
819 参照

opengl - openglインスタンス化された配列を理解する

与えられた

私は、各インデックスをからのようFaceGroupにループすることによって、セット内のそれぞれをレンダリングしていました。cubeIndicesstart_indexstart_index + length

...これで正しい結果が得られます。次に、インスタンス化された配列を使用して同じものをレンダリングしたいと思います。私の推論によると、次のコードは上記のループと同等です。

しかし、それは顔の各グループの最初のものだけをレンダリングするようです(*暫定的な分析、私は間違っているかもしれません)。私は何が間違っているのですか?

0 投票する
1 に答える
1750 参照

opengl - この単純な OpenGL コード (「寛大な」3.3 および 4.2 プロファイルで動作) を厳密な 3.2 および 4.2 コア プロファイルで動作させるにはどうすればよいですか?

厳密なコア プロファイルではレンダリングされないが、「通常の」(コアのみとして明示的に要求されていない) プロファイル コンテキストでは問題なくレンダリングされることに気付いた 3D コードがいくつかありました。この問題を切り分けるために、三角形と四角形だけを描画する最小で最も単純な OpenGL プログラムを作成しました。

ここに画像の説明を入力

その OpenGL プログラムを Gist here として投稿しました。

useStrictCoreProfile変数を false に設定すると、プログラムはコンソールにエラー メッセージを出力せず、上記のスクリーンショットのように、Intel HD OpenGL 3.3 と OpenGL 4.2 を使用する GeForce の両方で四角形と三角形を描画します。

ただしuseStrictCoreProfileを true に設定すると、背景色はクリアされますが、三角形と四角形は描画されません。コンソール出力は次のとおりです。

... 3.2 の代わりに 4.2 の厳格なコア プロファイルが要求された場合、同じ問題が発生します。3 つの異なる nvidia GPU に適用されるため、厳密なコア プロファイルに適切に準拠していないと思います。何が間違っていましたか?どうすれば修正できますか?

インポートしている glutil パッケージ内にあるため、上記の Gist にはglEnableVertexAttribArray呼び出しが見つからないことに注意してください。ただし、これはGist のcompileShaders()関数の最後のステップとして呼び出されます。

0 投票する
1 に答える
3596 参照

opengl - 頂点属性配列ゼロが無効になっていると、OpenGL描画が失敗するのはなぜですか?

私の頂点シェーダーをATIドライバーのOpenGL3.3コアで実行するのに非常に問題がありました。

glVertexAttrib4fを使用して色属性を指定し、属性配列をオフにしました。3.3コア仕様の33ページによると、これは機能するはずです。

頂点シェーダーに必要なジェネリック属性に対応する配列が有効になっていない場合、対応する要素は現在のジェネリック属性の状態から取得されます(セクション2.7を参照)。

しかし(ほとんどの場合、プロファイルとドライバーによっては)シェーダーがまったく実行されなかったか、無効な色属性にアクセスした場合は黒を使用していました。定数に置き換えると実行されます。

多くの検索により、WebGLに関するヒントのこのページが得られました。

常に頂点属性0配列を有効にします。頂点属性0配列を無効にして描画する場合、デスクトップOpenGL(Mac OSXなど)で実行しているときに、ブラウザーに複雑なエミュレーションを強制します。これは、デスクトップOpenGLでは、頂点属性0が配列対応でない場合、何も描画されないためです。bindAttribLocation()を使用して頂点属性にロケーション0を使用させ、enableVertexAttribArray()を使用して配列を有効にすることができます。

案の定、色属性がインデックスゼロに割り当てられただけでなく、別の配列対応属性を強制的にゼロにバインドすると、コードが実行され、正しい色が生成されました。

このルールに関する他の言及はどこにも見つかりません。確かにATIハードウェアでは見つかりません。このルールがどこから来ているのか誰か知っていますか?それとも、これはMozillaの人々が気づき、警告した実装のバグですか?

0 投票する
1 に答える
110 参照

java - 4 つの属性を持つグラフに頂点を追加するための関数/メソッドを作成できません

Java で 4 つの属性、つまり age、name、maritalStatus、および index を持つ頂点を追加するための関数/メソッドを作成できません。新しい頂点を指定されたインデックスに挿入する必要があります。

誰かがこれを行う方法を教えてもらえますか?

これらの詳細を保存するにはどうすればよいですか。隣接行列、隣接リスト、または配列リストの形式で?

0 投票する
2 に答える
4955 参照

opengl - glVertexAttribPointer() で GL_INT_2_10_10_10_REV を使用する

glVertexAttribPointer() の型パラメーターとして GL_INT_2_10_10_10_REV をどのように正確に使用するのか、誰か教えてもらえますか? この型を使用して色の値を渡そうとしています。また、このタイプの「REV」サフィックスの意味は何ですか? シェーダーで特別な処理が必要ですか?

私のコードは次のとおりです。

シェーダーは次のとおりです。 頂点シェーダー -

フラグメントシェーダー -

プログラム オブジェクトも検証されます。そこに問題はありません。このコードは、AMD カードでは問題なく動作しますが、NVidia では失敗します。失敗すると、glDrawArrays() 呼び出しで NULL ポインター アクセスを取得します。

0 投票する
2 に答える
457 参照

c++ - 特定の頂点属性を使用しないと glDrawElements がクラッシュする

私の OpenGL プログラムには、2 つのシェーダーがあります。1 つはテクスチャを使用してレンダリングし、もう 1 つは単色のみをレンダリングします。シェーダーをコンパイルしてリンクした後、天候に応じてテクスチャ座標頂点属性配列を有効にするか、シェーダーに属性が含まれていないかを確認します。

テクスチャをレンダリングする場合item、各要素vertsは 5 つの値 (x、y、z、tx、ty) で構成されますが、アイテムがテクスチャでない場合、各要素にvertsは 3 つの値 (x、y、z) のみが含まれます。 )。

問題は次のとおりです。GL コンテキストで最初itemにレンダリングされたものがテクスチャを持たない場合、glDrawElementssegfault が発生します。ただし、レンダリングされた最初のアイテムにテクスチャがある場合、それは正常に機能し、テクスチャ付きのアイテムの後の未テクスチャのアイテムは正常に機能します (つまり、新しいコンテキストが作成されるまで)。

このコードのチャンクは、item

シェーダーを設定する上記の関数を次に示します。

私の知る限り、この問題は Intel Integrated Graphics では明らかではなく、非常に寛大なようです。

編集:知っておくと便利な場合は、GLFW と GLEW を使用しています。

0 投票する
3 に答える
241 参照

c++ - 頂点属性の自動割り当ては正しい順序であることが保証されていますか?

を使用してシェーダー コードで頂点属性の位置を指定する場合、C++ プログラムでlayout(location = ...)を使用して位置をフェッチする必要はありません。glGetAttribLocation

レイアウト修飾子を使用してシェーダーで位置を定義したり、C++ プログラムでそれらを取得したりしない場合、それらは自動的に割り当てられます。質問は、この自動割り当てについてです。この順序は、シェーダー コードでの定義の順序と同じですか?

たとえば、最初のシェーダー コードでは、位置が 2 番目のシェーダー コードと同じであることが保証されていますか?

また、フラグメント シェーダーの出力にも同じ規則が適用されますか? 今のところ、私はglBindFragDataLocationそれらを取得するために使用します。