問題タブ [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.
opengl-es-2.0 - GLSLES頂点シェーダーとフラグメントシェーダー間で変数を渡す
サンプルシェーダーを見ると、この種のことはほとんど魔法のように起こります。情報が位置/色などの特別な場所に保存されることもありますが、フラグメントシェーダーがパラメーターを使用し、フラグメントシェーダーがこのデータの取得先をどのように認識しているかを確認することもできます。
誰かがこれを行う中程度の単純なGLESシェーダーを提供し、それがどのように機能するかを説明できますか?
android - OpenGL ES 2.0 によるピッキングの調整
OpenGL ES 2.0 で座標ピッキング機能を実装しようとしています。デスクトップ バージョンで実装した 2 つのバージョンを実装できません。
バージョン 1 では、三角形のインデックスを表す一意の色ですべての三角形をレンダリングし、レイキャストで座標を計算します。OpenGL ES GLSL バージョン 1.0 では変数 GL_PrimitiveID がなく、ビットごとのシフトもできないため、このバージョンは機能しません。
バージョン 2 は浮動小数点テクスチャの値として座標をレンダリングすることですが、浮動小数点テクスチャは OpenGL ES 2.0 では使用できません。
私が実装できるものを他に考えている人はいますか?それほどパフォーマンスが高くないため、すべての三角形をレイキャストしたくありません。
助けとアイデアをありがとう。
algorithm - GLSL-ES FP16 制限のランダム粒状ノイズ
厳密にFP16制限を持つコンパクトでシンプルなノイズ関数を作成しようとしています。これは私がこれまでに出てきたものですが、操作のどこかで数値がfractまたはsinに対して小さすぎると思います。GPU では、これらがFP16の制限内にあるためにこれを記述する必要があるためです。私が間違っていることについてのアイデアはありますか?ところで、時間変数もサンプル ノイズ テクスチャも使用できません。私が正しく取得する必要がある関数は、コンパクトで小さく、自己完結型であり、単純な粒子の粗いノイズ効果を生成する必要があります。注: 次のアルゴリズムはどのデスクトップ GPU カードでも問題なく動作しますが、「 MALI 400 MP 」 GPU では完全に失敗します。これは浮動小数点値に FP16 制限があるためです。
GLSL-ESの他のランダム関数を推奨できますが、厳密にはFP16制限がある場合も素晴らしいでしょう。シンプレックス ノイズなどの他のランダムな実装については知っていますが、これらは大きすぎて処理速度が遅すぎます。したがって、パーリンおよびシンプレックスノイズ アルゴリズムはオプションではありません。
android - Opengles 2.0 でのスムーズ シェーディングからフラット シェーディングへの切り替え
私はopengles 2.0を使用してAndroidで3Dアプリケーションに取り組んでいますが、いくつかのモデルを描画しますが、それらは
箱のようなモデルは、滑らかなシェーディングでは滑らかすぎるように見えます。球体モデルには滑らかなシェーディングが必要です。
ブレンダーから滑らかな色合いで .OBJ ファイルに 3d モデルをエクスポートしました。
今、私の3Dモデル構造は
頂点ごとの法線。
頂点インデックス配列を使用してモデルを描画します。
私のモデルの法線は頂点ごとの法線であるため、これに対処する私の計画は面ごとの法線を作成することです
通常の描画方法をすべて再構築して、頂点インデックス配列を使用しないようにすると、実行できなくなります。
頂点インデックス配列が消費するメモリが少ないため、この計画を実行したくありません。
補間された可変または別の方法からの中間値を使用してGLSLを作成する機能のように、描画用の頂点インデックス配列でフラットをスムーズにする方法はありますか?
あなたの助けに感謝し、私の悪い英語を申し訳ありません.
opengl-es - フラグメント シェーダの距離精度
フラグメント シェーダーに問題があります。2D でフレームごとのライティングを実装したいと考えています。distance
光源までの距離を測る機能を使っています。オブジェクトが原点 (0, 0) に近い場合は正常に動作します。私のオブジェクトがそこから離れている場合 ((5000, 0) としましょう)、非常に目に見える不正確さがあります。試してみhighp
ましたが、役に立ちませんでした。モデル座標の任意の点からフラグメントまでの距離を測定する良い方法はどれですか?
java - Windows ではなく Mac での GLSL シェーダー エラー: 'const int' から '4-component vector of float' に変換できません
私はシェーダーが初めてで、昨日それらのいくつかをいじり始めました。Windows PC では正常にコンパイルされますが、Mac で実行すると、両方でエラーが発生します。
エラー: 0:14: '=' : 'const int' から '4-component vector of float' に変換できません
Android では、2 番目のシェーダーでのみエラーが発生します。オーバーロードされた一致する関数ドットがないという言及の上にエラーがあります。
これらは同じ頂点シェーダーを使用します。
1 つのフラグメント シェーダー (Mac ではエラー):
他のフラグメント シェーダー (Mac および Android でのエラー):
opengl-es - glslのsampler2DArrayShadowはどのように機能しますか
sampler2DAprayShadows の使用方法とその動作を理解できません。参照深度との比較結果を取得するために、深度テクスチャ値 (GL_DEPTH_COMPONENT) を使用する必要がある部分を取得しました。しかし、戻り浮動小数点値を使用してテクセルを取得する方法。
参照元: http://www.khronos.org/opengles/sdk/docs/manglsl/xhtml/texture.xml
以下のようにテストするための小さなコードを書きました: 私のフラグメントシェーダーは:
3D テクスチャ (texdata) を作成し、次のようにバインドします。
android - サムスンギャラクシータブ2でglslコンパイラのバグの可能性はありますか?
これは実際のコードから取った例です。これは私の Samsung Galaxy Tab 2 ではコンパイルできません:
アイデアは、引数リストの「some_macro(FOO)」部分が何も展開されないようにすることです。代わりに、「ERROR: 0:520: '(' : syntax error」のようなエラー メッセージが生成されます。これは、マクロ呼び出しで左の親を参照していると思われます。パラメーターのないマクロ (単純な #define) は、同じ場所で正常に動作します。 .
この構文を回避するためにコードをリファクタリングする必要があることについてはそれほど心配していませんが、このコードが GLSL ES 仕様に従って機能するかどうかを誰かが知っているかどうか疑問に思っています。これは、他のデバイス (Galaxy Note II など) でも問題なくコンパイルできます。
opengl-es - 深度テクスチャをミップマップできますか?
知りたかったのですが、深度テクスチャをミップマップすることは可能ですか。はいの場合、それがどのように機能し、それを使用するか。
たくさん検索しましたが、どこにも良い説明がありませんでした。
android - レンダリング中にシェーダーをコンパイルすることは、OpenGL ES で有効なプラクティスですか?
システム: Android 4.03、OpenGL ES 2.0
問題:最初のフレームが別のプログラム/シェーダーで既にレンダリングされた後に glAttachShader が呼び出されると、一部のデバイス (Galaxy S3) が「GL_INVALID_VALUE」エラーでクラッシュします (エラー スタックに詳細はありません)。他のデバイス (Asus eee TF101) はそれでまったく問題ありません。エラーは常に発生するわけではなく、代わりに「GL_INVALID_ENUM」になることもあります。onDrawFrame の最初の呼び出しですべてのシェーダーを強制的にコンパイルすると、すべての (私の) デバイスで動作します。
質問: openGL(ES) マシンがシェーダーをコンパイルできない状態はありますか? バインドされたバッファ、テクスチャ、または有効な属性配列が、プログラムへのシェーダのアタッチを妨げる可能性はありますか? もしそうなら、シェーダーを取り付けてプログラムをリンクする前に確保しなければならない理想的な状態は何ですか? 他のオブジェクトが他のシェーダーで既にレンダリングされた後にシェーダーをコンパイルすることは有効ですか?
バックグラウンド:私は、openGL グラフィックスをよりオブジェクト指向の方法 (「シーン」、「マテリアル」、「モデル」などのオブジェクトを使用) で使用して、ゲームを簡単に作成できるようにする Android ライブラリを開発しています。シーン、モデルなどは、GL コンテキストとは異なるスレッドで作成されます。onDrawFrame がこれらのオブジェクトの 1 つに遭遇した場合にのみ、適切なスレッド内でバッファ オブジェクト バインディング、テクスチャ バインディング、およびシェーダ コンパイルを実行します。コードの最初ですべてのシェーダーをコンパイルすることは避けたいと思います。シェーダー ソースは、マテリアル、モデル、およびシーンの要件に応じて組み立てられます (例: マテリアル: バンプ マッピングを含む、モデル: マトリックス パレット スキミングを含む、シーン: フォグを含む)。モデルがシーンから削除されたら、シェーダーをもう一度削除します。別のモデルを追加すると、
現時点では、コードを掲載せずにできるだけ簡潔にしようとしています。このライブラリから関連部分を抽出するのは難しいことは想像に難くないでしょう。