問題タブ [vertex-shader]
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.
opengl-es - 頂点位置トリプレットはシェーダーで vec4 にどのようにマップされますか?
Spidergl を使用して既に実装されているサンプル コードから webgl シャドウ マッピングを実装しようとしています。WebGLの上に直接実装しようとしています。
ほとんど同じようなコードを持っていると思いますが、結果が得られません。問題をコードの小さな部分に絞り込みました。私のシェーダー コードではa_position
、(頂点位置属性) を vec3; として定義しています。Spidergl コードでは vec4 として定義されています。Spidergl コードをくまなく調べて、xyz トリプレットである頂点位置属性が vec4 にどのように入力されているかを理解しました。vertexAttribPointer の呼び出しでトリックが見つかると思っていました。しかし、彼らが渡しているサイズとストライドの値は、予想通り 3 と 12 です。同じことを行うようにコードを変更しましたが、まだ同じ結果が得られていません。
位置トリプレットがマップされる基本的なメカニズムを誰かが説明できますかvec4
? 立方体の角の x、y、z 座標と共に w について言及しているコードも見たことがありませんが、a_position
asを取るシェーダーがありますvec4
。それでは、vec4 の 4 番目の float には何が埋められるのでしょうか?
android - GLSL - 頂点属性の間違ったデータ
私はこの問題を理解しようとしてすでに 2 日を失いましたが、役に立ちませんでした。
Android用のopengles2.0を使用してcolladaアニメーションレンダラーを作成しました。スキニングにシェーダーを使用。コードはほぼ完成しており、私の HTC DesireS で問題なく動作します。
しかし、PowerVR チップセットを搭載した tridernt SetTopBox で同じことを実行しようとすると、ジオメトリが表示されません。デバッグの 1 日後、シェーダーのボーン マトリックス インデックスとして != -1 を取得しているため、これが発生していることがわかりました。
私の電話では == -1 であることを確認しました。ただし、SetTopBox では != -1 です。
何が間違っている可能性がありますか?この大難から私を救ってください。
コードを載せなくてすみません。これが頂点シェーダーです。私は vec2(boneIndices) が [0] と [1] に -1 を持つことを期待しています。しかし、Powervr ではそうではありません。
属性ポインタの設定
私の頂点とインデックスのバッファ
シェーダーでインデックスが -1 になることを期待しています。しかし、そうではありません。
c++ - DirectX10/11のGPUから変換された頂点を取得する
私が開発しているグラフィックエンジンは、頂点の行列変換である主要なボトルネックを開発しました(静的な頂点はほとんどありません)。これまで、CPUを使用して頂点を変換し、フレームごとに頂点バッファーを更新してきました(データのコピー自体は少しボトルネックですが、これまでのところ管理可能です)。
したがって、メッシュバッファーをGPU内に保持できれば、そこで頂点を変換し、変換された頂点のセットを他の処理のためにメインメモリに戻すことができると考えていました(後続の処理には、GPUシェーダーよりも少し多くの相互接続が必要です)許可する)。は、現在のコードのボトルネックを解消する可能性があります。
それを行う方法に関するヒントはありますか?ありがとう。
glsl - OpenGLES 2.0: gl_VertexID 相当?
シェーダーに送信された頂点の配列内のインデックスに基づいて、頂点の位置を動的に計算することにより、ポイントのグリッドを作成しようとしています。シェーダー内から呼び出すことができる gl_VertexID 変数に相当するものはありますか? または、GPU にさらにデータを送信することなく、配列内の位置にアクセスする別の方法はありますか? ありがとう、ジョシュ。
ここに私の頂点シェーダーがあります:
flash - 異なる Program3D を混在させると、一部のオブジェクトがレンダリングされない
Stage3D を使用していると、予期せぬ事態に遭遇しました。オブジェクト用に 2 つの異なるシェーダー プログラムを作成しました。プログラムの 1 つは、テクスチャ ビットマップと UV データを使用するためのものです。もう 1 つは単純にカラー データを使用します。2 つのオブジェクトは非常に異なります。最終的には、無地の色と単純なレンダリング ロジックを使用していくつかのもの (方向線、ハイライトなど) を表示し、他のもの (実際のオブジェクト、背景など) をミップマップでレンダリングするなどです。前方へ。問題は、これら 2 つの非常に異なるシェーダー プログラムを使用すると、どちらか一方しか機能しないことです。したがって、色のみのオブジェクトがすべて表示されるか、テクスチャのみのオブジェクトがすべて表示されます。もちろん両方出してほしいです。
テクスチャ オブジェクトの agal コードは次のとおりです。
頂点シェーダー:
フラグメント シェーダー:
これらのオブジェクトのレンダリング コードは次のようになります。
これは、プレーンな色のオブジェクト(つまり、テクスチャなし)の agal コードです。
頂点シェーダー:
フラグメント シェーダー:
これらのオブジェクトのレンダリング コードは次のようになります。
私が理解できない何らかの理由で、さまざまなデータをさまざまなレジスタ インデックス (va) に割り当てているという事実が原因で、レンダリング プロシージャの 1 つが失敗しています。テクスチャ ループで最初にテクスチャ オブジェクトをレンダリングすると、色付きのオブジェクトがすべて消え、その逆も同様です。オブジェクトは最初のフレームで正しく表示されます。しかし、レンダリング ループが 2 回目に再生されるとすぐに、この予期しない動作が発生します。
以下を追加してカラーオブジェクトのレンダリングコードを変更すると、次のことがわかりました。
できます。しかし、これは本当に良い解決策ではありません。プログラムのどこかで別のオブジェクトが n 個の可変レジスタでレンダリングされていることを知りたくないので、別の program3D インスタンスが n 個未満のレジスタを必要とする場合、未使用のすべての va を null に設定する必要があります。また、4 番目の va が必要なオブジェクト (光っているオブジェクトなど) 用に新しいシェーダー プログラムを作成した場合は、戻って他のすべてのシェーダー プログラムを変更し、va4 を null に設定して、すべてがレンダリングされるようにする必要があります。これは本当ですか?確かに私はここで何かが欠けています。すべてのテクスチャ レジスタ (ft) を設定する場合も同じです。
もっと多くの情報を提供できます...
glsl - GLSL シェーダー - 透明度のあるシャドウ (グラステーブル効果)
画像を約 180° 回転させて黒のグラデーションでオーバーレイできるシェーダーを作成しましたが、背景色として黒を使用する代わりに実際の透明度を作成したいと考えています。
これは私がこれまでに得たものです:
c++ - OpenGLで頂点が描画されない
変換と回転のための入力を伴うシェーダーを使用して、単純な頂点指定 (ボックスのような) ティーポット モデルを描画するのに問題がありました。gl コードとマトリックス (-z 上のオブジェクトの位置、原点にあるカメラなど) を何度もチェックしましたが、まだ空白の画面が表示される理由がわかりません。コードを短くするために、モデルの基本的な立方体のコードを挿入しました (少なくともそれが理解できれば問題ありません)。
}
頂点シェーダー
フラグメントシェーダー
opengl - glGetUniformBlockIndex() が INVALID_INDEX を返すのはなぜですか?
プログラムで以下の頂点シェーダを使用していますが、glGetUniformBlockIndex(id, "draw2DQuadVS")
なぜかINVALID_INDEX
.
プログラムは使用前に正しくリンクされ、正しい ID が渡されます。さらに、opengl エラーは設定されません。説明はありますか?
opengl - 頂点シェーダーで頂点を移動する
私のコードは、多数の頂点のグリッドを作成し、頂点シェーダーの高さのランダムなノイズ値によってそれらを置き換えます。を使用して移動
正常に動作しますが、それはグリッドの端まで行くことができることを意味します。
カメラの位置をシェーダーに送信し、ディスプレイスメント全体をシェーダーでオフセットすることを考えました。したがって、最終的な頂点シェーダーコードは次のとおりです。
編集:欠陥を修正しました。頂点自体が水平方向に移動しないようにする必要があります。
どういうわけか、これを実行してカメラの位置を変更すると、画面がちらつきますが、何も動きません。頂点はノイズ値によって正しく変位し、カラーリングとすべてが機能しますが、変位は移動しません。
参考までに、ここにgitリポジトリがあります:https ://github.com/Orpheon/Synthworld
私は何が間違っているのですか?
PS:「フリック」は間違っています。何も描かない位置もあれば、0位から通常のシーンを描く位置もあるので、止めずに動かすとちらつきます。でも、黒のままの場所、または正常な場所で停止できます。
opengl - opengl 3.3+ は glsl 130 コードと互換性がありませんか?
私のglsl 130コードがやや新しい(ATI 5850)ハードウェアで正しく実行されないという問題がありますが、同じコードは私が持っているNVIDIAカードを搭載した古いラップトップで完全に正常に実行されます..これはopenglに関係なくケースです.私が使用するコンテキスト。発生するのはベクトルです。in_position、in_colour、および in_normal は、新しいハードウェアで適切にバインドされません。新しいハードウェアで新しいバージョンの glsl (330) を強制されているようです。
頂点シェーダーの glsl コードは次のとおりです。かなりシンプルで基本的なものです。
何が起こるかは、次のデータです。
結合しないか、完全ではありません。値が奇妙に歪んでいます。私のテストでは、他のすべてが適切に機能します。バージョンを 330 に変更し、location キーワードを使用すると問題は修正されますが、コードは古いバージョンの OpenGL と互換性がなくなります...
これらの場所を指定するために使用するコードのサンプルを次に示します。
プログラムの場合:
その後、データ自体について:
私の質問は: opengl は下位互換性があるはずではありませんか?? プログラムを異なるハードウェアで実行するために、opengl の単一バージョンごとに個別のシェーダーを作成する必要があるのではないかと心配し始めています...これらの属性のバインドは非常に基本的な機能であるため、ATI 実装のバグではないかと思います...