問題タブ [glsles]
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.
three.js - Three.js でディスプレイスメント マップを実装すると、球の極で頂点が切断されるのはなぜですか?
パーリン ノイズを含むディスプレイスメント マップを球体に適用して、小惑星を作成しようとしています。球の極が歪んでいることを除いて、すべてが期待どおりに機能します。極の頂点が切り離されているように見えます。
Frontview: 期待
どおりに見えます Topview: 見苦しく見えます ;-)

最初は、これはディスプレイスメント マップと関係があると思っていましたが、それを球面に適用しているのですが、立方体に適用すると、面の間に隙間もできてしまいます。
それらのギャップを埋めるために何ができるかわかりません。後のステップで、テクスチャにレンダリングし、ノイズにランダム シードを使用して、ディスプレイスメント マップを一般的に生成する必要があります。したがって、Blender や Photoshop などの外部プログラムを使用してディスプレイスメント マップを変更することはできません。シェーダーで何か間違ったことをしたのでしょうか、それともこれは「正常な」動作ですか? それを避けるために何かできることはありますか?キューブマップについて読みました。これはおそらく解決策になるでしょうか?もしそうなら、Three.js r57以降の実用的な例はありますか?
ここに私のシェーダーコードがあります:
ユニフォームと球体コードは次のとおりです。
コードが球の代わりに 20 面体を使用しているのを見ましたが、球でも同じことが起こっています。
hlsl - ハイブリッド cg/hlsl シェーダーを glsl es に変換する
cg/hlsl ハイブリッド シェーダーを glsl es シェーダーに変換できるツールを探しています。実行可能な hlsl キーワードですが、キーワード「extern」を理解しない hlsl2glsl を試しましたが、cgc を調べましたが、glsl es のコンパイル方法に関するドキュメントは見つかりませんでした。
ありがとう
ios - iPad Opengl ES プログラムはシミュレーターでは正常に動作しますが、デバイスでは動作しません
デバイスの場合、1 つを除いてすべてのシェーダーが正常に読み込まれます。このシェーダー プログラムの場合、"Fragment program failed to compile with current context state" エラーが発生し、続いて glGetProgramInfoLog(...); を呼び出すと、頂点シェーダーで同様のエラーが発生します。
頂点シェーダー:
フラグメント シェーダー:
特に、テクスチャ座標が追加された上記とまったく同じプログラムがあるため、何が起こっているのかわかりません。また、glGetShaderiv(theShader, GL_COMPILE_STATUS, &result) を使用してプログラムをリンクしたときに、各シェーダーのコンパイル ステータスを確認したところ、すべて正常にチェックアウトされました。何か案は?
opengl-es-2.0 - グラフィックス ハードウェア パイプラインで GLSL シェーダー プログラムはどのように実行されますか?
OpenGL ES 2.0 と GLSL をいじる度に、シェーダー プログラムがハードウェア上でどのように実行されるのか正確に疑問を呈しています。頂点シェーダー プログラムとフラグメント シェーダー プログラムの背後にある概念はよく理解していますが、それらが金属でどのように機能するかについてはまだ非常に不明です。GPU について読んでいると、パイプラインという用語に出くわすことがよくあります。GPU には特定の数のパイプラインがあります。
パイプラインの機能を理解しています。パイプラインは一連の頂点 (ジオメトリック プリミティブを表す) を受け取り、指定されたパラメーターを使用して頂点シェーダーを実行し、それらの出力に基づいて操作を実行する固定機能ハードウェアを介して頂点シェーダーの出力を送信します。また、頂点シェーダーは、プリミティブの各フラグメントで補間された値を出力し、フラグメント シェーダーに入力するため、一般的なアルゴリズムを使用して多くの複雑なレンダリングを簡単に実行できます。
しかしこれは、GPU に n 個のパイプラインがある場合、任意の時点で n 個のパイプラインのそれぞれが単一のジオメトリ プリミティブのシェーダー プログラムのインスタンスを実行できることを意味するのでしょうか?
私は OpenGL ES 2.0 プログラミング ガイドを読んでいます (Kindle によると約 60% を読んでいます) が、おそらく私のまだ発展途上の理解のせいで、まさにこの質問に対する答えを見逃しているのでしょう。
私がこの質問をする実際的な理由の 1 つは、GPU ではなく CPU で実行すべき作業と実行すべきでない作業に関するものです。たとえば、単一の更新およびレンダリング スレッドを操作している場合、すべてのオブジェクトの行で実行する必要がある場合、CPU で行列をベクトル乗算するのは賢明ですか? それとも、複数のジオメトリ プリミティブの描画を実行するシェーダー プログラムを異なるパイプラインで同時に実行できる GPU にアウトソーシングする方がよいでしょうか?
それぞれの個別の描画呼び出しではなく、VBO を使用して画面上に多くのクワッドを描画するようにコードを最適化することに取り組んでいます。しかし、これは配列レンダリングと見なされるため、mvp マトリックスがクワッドの 4 つの頂点ごとに同じであっても、頂点ごとにすべてのマトリックスを GPU に送信する必要があります。これは帯域幅のヒットと見なすことができます。しかし、シェーダー プログラムが、CPU 上のレンダリング スレッドで次々に実行されるのではなく、同時に実行される場合、おそらくそれは価値のあるトレードオフです。しかし、私はどちらかと言えばそのレベルの専門知識を持っていません。
android - Galaxy SII および SIII での fract 操作が非常に遅い
私の地形では、4 つの異なるテクスチャを使用するシェーダーを使用しています。Windows と Linux マシンでは正常に動作しますが、Android では両方の銀河で 25FPS しか得られません。テクスチャが問題だと思いましたが、そうではないようです。問題は、テクスチャ座標を分割し、fracを使用してタイル座標を取得する部分にあります。それがなければ、60FPSになります。
注: ライトの計算とフォグ用のコードがいくつかありますが、使用されていません。コメントを外すと、大きな遅延が発生する行を示しました。floor を使って小数部分を手動で計算してみましたが、ラグは同じです。何が間違っている可能性がありますか?
編集:今ここに私が理解していないものがあります。
これ:
うまくいきます。
これ:
SIIIで平均を実行します。
これ:
ラグ...
これ:
まあ、5FPSは思ったよりもまだ良いです...
それで、何が得られますか?なぜこうなった?私の理解では、これは何の違いもありません。しかし、そうです。そして巨大なもの。
opengl-es-2.0 - OpenGL (および OpenGL ES) はプリプロセッサの「行継続」文字をサポートしていますか?
OpenGL ES フラグメント シェーダーに、次のようなマクロがあります。
これは、私のデスクトップやさまざまな Android デバイスで問題なく動作します。(ええ、明示的なフロー制御から離れる必要がありますが、今のところ必要な出力が得られます。) 問題は、いくつかのデバイスがこのシェーダーのコンパイルに失敗し、次のようなエラーが発生することです。
(ライン 257 は"if ( x"ライン、ライン 260 は"} \"ラインであり、263 はここには示されていませんCHECK。マクロの最初の使用です。シェーダーの他の場所には、すべて大文字の「DELTA」の他のインスタンスはありません。)
このエラーは、行継続文字でつまずいていることを意味していると思いますか? これは本当に一部の GLSL コンパイラだけがサポートするものですか?
#version 100デスクトップと Android の間で可能な限り互換性を持たせるために、シェーダーを構築しています。
javascript - webgl シャドウ マッピング gl.DEPTH_COMPONENT
この例を使用して、webgl でシャドウ マッピングを実装しようとしています: チュートリアル
私がやろうとしていることは
深度テクスチャとフレームバッファを初期化します。単純なシェーダーを使用してそのフレームバッファーにシーンを描画し、テクスチャとして深度テクスチャーを持つボックスを使用して新しいシーンを描画し、他のシェーダーを使用して深度マップを表示できるようにします。
colortexture では問題ないように見えますが、すべて白の depthtexture で作業することはできません。
私はドロップボックスにコードを置きます: ソースコード はほとんどがファイルインデックスhtml webgl_all jsオブジェクトjsにあります
現在使用していないライト シェーダーがいくつかあります。
誰かが私を助けてくれることを本当に願っています。
デンマークからのご挨拶
opengl-es - Webgl GLSL / オープン GL ES 2.0
現在、OpenGLES 2.0 を使用して Android および IOS デバイス用に記述されたエンジンを webgl に移植していますが、シェーダーを使用して問題に遭遇しました。モバイル アプリ用に作成されたシェーダーのほとんどは、webGL では機能しません。例 :
( $ は、コンパイルされる前にプリプロセッサによって値に置き換えられます)
頂点シェーダー:
フラグメント シェーダー :
OpenGLES では魅力的に機能しますが、webGL では const float が非定数値で初期化されているという報告があります。私が行う操作は、const を宣言するときに常に同じ結果を返します。
それについて何かできることはありますか、それとも WebGL GLSL の仕様に合わせてすべてのシェーダーを書き直す必要がありますか?
android - Samsung Galaxy S3 の GLSL バグの length()
Android ゲーム用に GLSL でシェーダーを作成しました。このシェーダーでは、現在のピクセルと FX の中心の間の長さを計算する必要があります。
このシェーダには次の行が含まれています。
MCPosition は、現在のピクセルの座標を含む highp vec2 です。center は、FX の中心を含む highp vec2 です。
このシェーダーは多くのデバイス (Galaxy Nexus、kindle fire など) でうまく機能しますが、samsung galaxy S3 では、すべての float 値を mediump として管理する場合のように、期待される結果が 256 を超える場合、length(tc) は正しくない値を返します。
誰かが私に理由を説明できますか?