問題タブ [fragment-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 に答える
394 参照

c++ - フラグメント シェーダーが使用するテクスチャを認識するために、テクスチャ ユニットを切り替える必要があるのはなぜですか?

私は簡単なテスト目的でこのプログラムを持っています。プログラムは 2 つの 1-D テクスチャを作成し、シェーダーに渡します。フラグメント シェーダーは非常に単純です。最初のテクスチャのインデックス 4 のテクセルを取り出し、そのテクセルをカラー フラグメントにします。

正方形を描いています。最初のテクスチャのインデックス 4 のテクセルには、赤色の <1.0, 0.0, 0.0, 1.0> が含まれています。したがって、上記のシェーダーの結果は赤い四角です。問題は、2 番目の 1-D テクスチャを作成してシェーダーに渡すときに発生します。なんらかの理由で、シェーダーが気に入らず、機能しなくなり、赤い正方形の代わりに黒い正方形が描画されます。C++ コードは次のとおりです (関数 "makeGLTexture" 内のコードは下にあります)。

テクスチャバインディングは関数「makeGLTexture」で行います。中のコードはこちら。

奇妙なことに、2 番目のテクスチャを作成した直後にアクティブなテクスチャ ユニットを最初のテクスチャのテクスチャ ユニットに切り替えると、プログラムが再び動作し、赤い四角が描画されます。

その後、プログラムは再び動作します。

私の質問は、なぜこれが起こっているのですか? シェーダはテクスチャユニットから独立していませんか? テクスチャ ユニットをサンプラー変数に渡すだけでいいのではないですか? この場合、シェーダーを再度実行するためにテクスチャ ユニットをテクスチャ ユニット ゼロに戻さなければならないのはなぜですか? 何が起こっている?

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

android - Android OpenGL-ES 2.0 フラグメント シェーダーで使用できるテクスチャを設定するにはどうすればよいですか?

1 つのフラグメント シェーダーで 2 つのテクスチャにアクセスしようとしています。

このために、次のコードで設定した 2 つのテクスチャがあります。

そして、それらを次のフラグメントシェーダーと組み合わせようとします:

どういうわけかこれは機能せず、2 番目のテクスチャしか表示されません。

PS: Windows7 でシェーダーを開発していますが、C++ コードとシェーダーを Android デバイスの Android NDK で使用したいと考えています。

編集:私はそれを機能させ、ここにコードを投稿して、他の人がそれから利益を得ることができるようにします:

頂点シェーダー

フラグメントシェーダー

与える

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

opengl - フラグメントシェーダーの出力値

ブレンディングとは関係のないものの8ビット整数インデックスとしてアルファチャネルを使用しているので、ビット値を注意深く制御したいと思います。特に、特定のアルファ値を持つ1つのFBOレンダリングされたテクスチャのすべてのピクセルが、シェーダー内の同じアルファ値を持つすべてのピクセルと一致する必要があります。経験から、浮動小数点値を同等と比較するときは注意する必要があります...

浮動小数点vec4を使用して色の値を設定しても問題は発生しない可能性があります。私の理解では、半精度の16ビット浮動小数点でもすべての8ビット整数(0〜255)値を区別できます。ただし、フラグメントシェーダーで整数演算を実行したいので、値を確認します。

フラグメントシェーダーで整数演算を実行すると、パフォーマンスが低下する可能性がありますか?

出力はどのようにスケーリングされますか?フラグメントのカラー出力として整数ベクトルを送信することが有効であるとどこかで読みました。しかし、それはどのようにスケーリングされますか?整数0〜255のuvec4を送信した場合、それは適切にスケーリングされますか?整数値をピクセル形式に直接書き込むようにしたいのですが、整数形式の場合はスケーリングを行わないようにします。おそらく、RGBA8が255を超えるint値を送信すると、255にクランプされ、負のintがゼロにクランプされます。

この問題は、レンダリングされた画像を取得して注意深く調べないとカラー値を印刷してデバッグできないため、困難になります。何かが合わない場合は、明るい色を描くことができるかもしれません。

これが私がこのトピックで見つけた関連するスレッドです。それは以前よりも私を混乱させました。

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

shader - Three.jsの本当にシンプルなカスタムシェーダー-それを機能させる方法は?

Three.js用の最も単純なカスタムシェーダーを作成しようとしていますが、それを機能させる方法がわかりません。シェーダーを使用しているオブジェクトがまったく表示されません。

私のページのhtmlには次のものがあります。

次に、JavaScriptで:

オブジェクトがあるべき場所には何もありません。素材を。に置き換えれば問題なく動作しMeshLambertMaterialます。それを機能させるために必要なものが欠けていますか?

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

opengl-es - OpenGLSL の奇妙な効果 - 原因がわからない

Render Monkey と HTC Desire HD の両方で完全に正常に動作するエッジ検出シェーダーがあります。ただし、LG 3D P920 では動作しません。シェーダーは次のとおりです。

つまり、中央のピクセルを取り、その周囲の 8 つの値を減算しています。テクスチャは 512x512 です。

現在、PC と Desire HD では、これは主に黒の画像として表示され、色付きのエッジが強調表示されています。ただし、LG デバイスでは露出オーバーの画像として表示されますが、かなりのノイズが含まれています。

精度の問題のように感じます。ご覧のとおり、精度を上げようとしましたが、他に何を試すべきか、またはそれが正しく行われたかどうかはわかりません。

これは、このシェーダーに分離されたものではありません。このデバイスにはノイズがあるように見える照明シェーダーがありますが、他のデバイスにはありません。

私も最終値をクランプしようとしました。

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

shader - 頂点シェーダーでポリゴン内のすべての頂点にアクセスすることは可能ですか?

Unityでワイヤーフレーム頂点/フラグメントシェーダーを作成しようとしています。この論文によれば可能だと思われます。一般的な考え方は、頂点シェーダーで計算された距離ベクトルをフラグメントシェーダーの各フラグメントに渡すことです。これを使用して、ポリゴン内の位置に基づいてワイヤーフレームラインを描画する明るさを決定できます。

ただし、私が読んだ他のすべてのことから、頂点シェーダーでは1つの頂点にしかアクセスできないようです。ecah頂点のポリゴン内のすべての隣接する頂点にアクセスする必要があります。このペーパーは、ジオメトリシェーダーが不要であることを示唆しているようです。これは、Unityがまだサポートしていないため良いことです。

私は何が欠けていますか?頂点シェーダーで隣接する頂点にアクセスすることはできませんか?ジオメトリシェーダーなしでは不可能にしようとしていることはありますか?

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

glsl - 低オクターブのパーリン ノイズのスムージング

ここにある Noise 関数を使用して、フラグメント シェーダーで非常に単純な Perlin ノイズ クラウドを作成しようとしています。

低いオクターブでの出力は、より適切な言葉が必要なため、'blobby' になります。これらのぼんやりした領域を滑らかにしてノイズを滑らかにしたいだけでなく、1 オクターブよりも少し詳細にしたいだけです。

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

実際の例:
http://glsl.heroku.com/e#1413.0

左が今持っているものです。どうすれば、適切な画像とよりインラインで何かを達成できるでしょうか?

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

opengl-es-2.0 - 2 つのテクスチャ、1 つのシェーダー - OpenGL ES 2.0

ES 2.0初心者です。現在、ES 2.0 と PowerVR SDK を使用してステレオ画像から 3D インターレース画像を作成しようとしています。1枚の画像テクスチャは問題なく出力できるのですが、2枚目を出力しようとすると1枚目を上書きしてしまうようです。そこで、私の質問は、以下のフラグメント シェーダーを使用して 2 つのテクスチャを描画できるか、または sampler2d ユニフォームを 1 つのテクスチャ ユニットにのみバインドできるかということです。フラグメント シェーダーは次のとおりです (PowerVR の「トレーニング コース」サンプル プログラムから取得)。

画像テクスチャをシェーダーにロードする方法は次のとおりです。

では、このコードは sampler2d ユニフォームを上書きしているだけなのでしょうか? 2 番目のイメージに別のユニフォームまたはシェーダーが必要ですか?

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

opengl - 色付けに配列を使用するシェーダーのアニメーション化

そのため、以下に示すように、一種のジグザグ パターンがあります。ジグザグ パターン、次のフラグメント シェーダーによって作成されます。

ジグザグを上に動かしてアニメートしたいと思います。

私の質問は、中央値からのオフセットを作成するために配列を使用していることを考えると、どうすればよいでしょうか? 次のアニメーション ステップで配列が (.1,.2,.1,0,-.1,-.2,-.1,0, .1)?

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

shader - WebGLフラグメントシェーダの浮動小数点テクスチャからクランプされていない値にアクセスする

輝度値が0〜4000の場合、キャンバス上の輝度値のマトリックスを画像としてレンダリングしようとしています。2D浮動小数点テクスチャを使用しているのは、2D浮動小数点テクスチャが[-inf、inf]。

ただし、フラグメントシェーダーでテクスチャ値を取得すると、それらは常に[0、1.0]の間にクランプされます。具体的には、

texcolour.rgbは常に0から1.0の間になります。フラグメントシェーダー内のクランプされていない値にアクセスして、自分で正規化を行うにはどうすればよいですか?

ありがとうございました