問題タブ [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.

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

graphics - OpenGLES2 Shader : 照明位置とカメラの動き?

http://www.learnopengles.com/android-lesson-two-ambient-and-diffuse-lighting/のチュートリアルに従って、OpenGLES2 アプリケーションに照明を追加しようとしました。

上記のチュートリアルとは異なり、FPS カメラの動きがあります。頂点シェーダーでは、ワールド座標でカメラ位置 (u_LightPos) をハードコーディングしています。しかし、カメラを動かすと、奇妙な照明効果が得られます。マトリックスを表示しますか?

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

opengl - GLSL を使用した長方形テクスチャのレンダリング

ビデオフレーム (Mac の場合) をカスタム フレームバッファ オブジェクトにレンダリングするクラスを作成しました。入力として YUV テクスチャがあり、入力として 3 つの長方形テクスチャ (Y、U、および V プレーンごとに 1 つ、データは GL_TEXTURE_RECTANGLE_ARB、GL_LUMINANCE、および GL_UNSIGNED_BYTE を使用して glTexSubImage2D によってアップロードされる) を受け取るフラグメント シェーダを正常に作成しました。レンダリングする前に、アクティブなテクスチャを 3 つの異なるテクスチャ ユニット (0、1、2) に設定し、それぞれにテクスチャをバインドします。パフォーマンス上の理由から、GL_APPLE_client_storage と GL_APPLE_texture_range を使用しました。次に、glUseProgram(myProg)、glBegin(GL_QUADS) ... glEnd() を使用してレンダリングしました。

それはうまく機能し、期待どおりの結果が得られました (ちらつき効果は別として、これは、2 つの異なるスレッドで 2 つの異なる GL コンテキストを使用したという事実に関係していると思います。 [それは後で別の質問のトピックです])。とにかく、頂点シェーダーも追加してコードをさらに改善することにしました。これにより、glBegin/glEnd をスキップできるようになりました。これは時代遅れであり、とにかく避けるべきです。

次のステップとして、2 つのバッファ オブジェクトを作成しました。1 つは頂点用、もう 1 つはテクスチャ座標用です。

次に、シェーダーをロードした後、頂点シェーダーの属性の場所を取得しようとします。

これにより、texCoord が 0 になり、位置が 1 になり、問題ないようです。

属性を取得した後、私も呼び出します

(私はそれを一度だけ行っていますか、それともすべての glVertexAttribPointer と glDrawArrays の前に行う必要がありますか?テクスチャ ユニットごとに行う必要がありますか?またはシェーダーが glProgram でアクティブ化されている間に行う必要がありますか?それとも、どこでも行うことができますか?)

その後、glBegin/glEnd を置き換えるようにレンダリング コードを変更しました。

しかし、コードをこれに変更して以来、結果として常に黒い画面しか表示されません。だから私はいくつかの簡単な手順を欠いていると思います.glEnable/glDisableやいくつかの設定を適切に行っているかもしれません. 参考までに、頂点シェーダーは次のとおりです。

私の推測では、ここで明らかな何かが欠けているか、進行中のプロセスをまだ十分に理解していないだけです。OpenGLShaderBuilder も使用してみましたが、フラグメント シェーダーの元のコードを正しく取得するのに役立ちました (これが、ここに投稿していない理由です)。とにかく position/texCoord 属性がわからない場合、どのように出力を生成するかを知ることができますか?)

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

c - 頂点データを複数回出力する CGFX シェーダ

頂点シェーダーからピクセル シェーダーに何かを複数回出力するにはどうすればよいですか。たとえば、頂点シェーダーで頂点の色に対していくつかの異なる数学演算を実行した後、頂点の色を float 4 としてピクセル シェーダーに 4 回出力する必要がありますか?

私はこれを行うことができますか?空のfloat4 color2を作成し、In.colorからIn.vertcolorを読み取って出力しようとしました...エラーは発生しませんが、テクスチャは白です。空の float 4 を読み取るだけです...

これがこのセクションの私のコードです。ありがとう!

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

directx - メッシュの頂点構造と頂点シェーダーの頂点構造

[HLSL、*.fx ファイル、DirectX9 を使用]

私はシェーダーを使用するのが初めてで、シナリオが機能していますが、その理由がわかりません。シェーダーが別の頂点宣言を定義できる一方で、メッシュが頂点宣言の 1 つのバージョンをどのように持つことができるかについて、私は混乱しています。

ID3DXMeshで球を作成します。D3DXCreateSphere(...)これは でセットアップされD3DFVF_XYZ | D3DFVF_NORMALます。ID3DXMesh::DrawSubset(0)私はレンダリングを呼び出します。BeginPass/EndPass 呼び出し内。

次に、構造体が定義された頂点シェーダーを用意します。

およびシェーダー自体:

lightDir と textureCoords を設定する前に null にすることもできますが、DirectX はそのVertex originalパラメーターで実際にどのようなデータを提供するのでしょうか?

位置だけ?が別のパラメーターとして提供されていることに気付きましたが、その値はシェーダーの開始時にfloat3 _normal:NORMALも内部にありますか?original

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

webgl - three.jsパーティクルシステムの作成によりINVALID_OPERATIONが提供されます:バインドされていないBUFFER_ARRAY

以下のコードでthree.jsパーティクルシステムを作成しようとしています。LinuxホストにインストールされたChromeでは、これは完全に正常に機能しますが、Windows Chromeポータブルで実行しようとすると、最初のレンダリング呼び出しで次のWegGLエラーが発生します。

WebGL:INVALID_OPERATION:vertexAttribPointer:バインドされていないARRAY_BUFFER WebGL:INVALID_OPERATION:drawArrays:属性が正しく設定されていません

...シェーダー構成からのスニペット:..。

...パーティクルシステムの作成...。

VBOがバインドされていない、またはバインドできない理由がわかりません。このトピックに関連して私がこれまでに見つけた問題:

  1. https://github.com/mrdoob/three.js/issues/1985
  2. https://github.com/mrdoob/three.js/issues/2073

しかし、私の場合、どちらも当てはまらないようです。

どんな助けでも大歓迎です;)

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

android - 銀河タブ 10 (tegra 2) で頂点シェーダーが動作しない

HTC Desire S で GLES2.0 を使用するアプリを作成しました。HTC では動作しますが、Samung Galaxy tab10.1 では動作しません。プログラムをリンクできません (GLES20.glGetProgramiv(mProgram, GLES20.GL_LINK_STATUS, linOk,0) は -1 を返します)、glGetError() はエラー 1282 (無効な操作) を返します。

この行を (シェーダーで) 置き換えると:

銀河タブでも機能します。私のシェーダーは次のようになります。

シェーダーがアタッチされている場所です。

そして、テクスチャはここにロードされます:

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

opengl - Cg頂点シェーダーからGlProgramバイナリを取得します

Cg Vertexシェーダーがいくつかあり、コンパイルされたバイナリをそこからキャッシュに取得したいと考えています。

Cg頂点をロードする方法はglProgramStringARBを使用していますが、その問題は、glGetProgramivとglGetProgramBinaryから値を取得できないことです。

これが私がしていることのサンプルコードです:

変数がglGetProgramiv呼び出しで変更されるかどうかを確認するために、長さを-10で初期化しましたが、結果として常に-10を取得します。

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

opengl - フラグメント シェーダーの「out」変数の名前

OpenGL SuperBible を読んでいるときに、最も基本的な (フラットな) シェーダーの例の 1 行を理解するのに問題があります。

第 6 章のリスト 6.4 と 6.5 では、次の 2 つの非常に基本的なシェーダーが紹介されています。

6.4頂点シェーダー:

6.5フラグメント シェーダー:

私の混乱は、main() でvFragColor言いながら out 宣言で言うことです。gl_FragColor

一方、ウェブサイトのコードでは、「vFragColor = vColorValue;」に修正されています。メインループで。

私の質問は、本のタイプミス以外に、outシェーダーの値に名前を付けるためのルールは何ですか? 特定の名前に従う必要がありますか?

OpenGL.org で、頂点シェーダーの外側には gl_Position が必要であることがわかりました。フラグメントシェーダーにそのようなものはありますか? それとも、出力が1つしかない場合、それはバッファ内の色になりますか?

フラグメント シェーダーに複数のシェーダーがある場合はどうなりますか? GLSL コンパイラは、バッファで使用するものをどのように認識しますか?

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

iphone - iPhone OpenGL-ES テクスチャがビューポートをカバーしないのはなぜですか?

サイズ 320x320 の正方形の画像があり、そこから OpenGL テクスチャを作成します。最も基本的な Vertext シェーダーと Fragment シェーダーを使用し、ビュー全体にテクスチャを表示したいと考えています。ビュー (多くの OpenGL iOS サンプルで見られる UIView から派生した EAGLView) も 320x320 のサイズです。

問題は、画像が左上隅に描画され、ビュー全体の約 50% しかカバーしていないことです。ビューの 100% をカバーするわけではありません。どうしてか分かりません?

赤い四角がEAGLView

これが私のコードです:

頂点シェーダー。

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

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

opengl - フィードバック入力と出力サイズを変換します

OpenGLでの変換フィードバックについて少し質問があります。

出力のサイズが出力と異なる可能性はありますか?次のようなVSを考えてみましょう。

だから私の出力バッファはちょうど新しい位置になります!

またはその逆に、入力よりも出力の方が多くなります。