問題タブ [glsl]
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.
java - テクスチャが GLSL に表示されない理由として考えられるものは何ですか?
GLSL (LWJGL) でテクスチャを使用して、テクスチャをぼかす単純なフラグメント シェーダを作成する方法について学習していました。最初の試行 (テスト目的) は、元の色の値を取得するだけの非常に単純なシェーダーでした。
シェーダーは正常にコンパイルされます。コンパイル後、リンクして使用を開始しましたが、これまではすべてが機能しており、エラーは報告されていません。次に、テクスチャの均一変数を設定しようとします。
次に、通常の texcoords (両方の次元で 0.0f-1.0f) でクワッドを描画するだけですが、テクスチャが表示されません。テクスチャ自体は問題ではありません。フラグメント シェーダーを使用せずに、最初のクワッドの隣に 2 番目のクワッドを描画すると、期待どおりに表示されます。基本的なアプローチはNeHe: GLSL - An Introductionから取られています。uniformTextureAddr
は -1 ではなく、すべてのピクセルを赤くするだけのさらに単純なシェーダーを使用すると、赤いクワッドが得られます。予想通り。したがって、バグは sampler2D ビジネス全体にある必要があります。クワッドが単にフレームから外れているなどの些細なミスも、これによって除外されます。
はい、シェーダーなしで描画した後、再びシェーダーで glUseProgramObject(programObj) を呼び出します。
ちなみに、これは ATI Radeon Catalyst 10.6 ドライバーと LWJGL バージョン 2.4.2 を搭載した Windows XP SP3 で動作しています。
更新:プログラム自体に何か問題があると思います。シェーダーに別の変数を追加すると:
それを呼び出すglGetUniformLocationARB(programObject, "secondTexture");
と、そこにあるはずなのに-1が返されます。ログ情報はまだ言うだけです:
情報ログ: フラグメント シェーダーは、ハードウェアで実行するために正常にコンパイルされました。
更新 2:
実際のテクスチャはバックバッファからコピーされます。小さいビューポートに単純な白い線が描かれ、テクスチャにコピーされます。
しかし、私が言ったように、テクスチャは実際の問題ではないと思います。なぜなら、カスタム シェーダーなしで 2 番目のクワッドで問題なく表示されるからです。また、バインドについて心配する必要はありません。これはプログラム内の唯一のテクスチャであり、最初に 1 回だけバインドされます。
ここに私の描画コードがあります:
opengl - シェーダー言語間に大きな違いはありますか?
私は現在GLSLを学んでいます。シェーダー言語の1つを学習したら、他の言語の1つを学習することはそれほど難しくないように思われます。これは、wxWidgetsなどのウィジェットツールセットを学習してからQtに切り替えることに似ていますか?あるウィジェットツールセット内で何が起こっているかを理解すると、別のツールセットは、ある時点で最終的にほぼ同じことを実行するため、同様のことを実行しますか?あるシェーダー言語から別のシェーダー言語に移行したときの経験は何ですか?
python - OpenGLのGLSLで3x9テクスチャを繰り返すにはどうすればよいですか?
3x9の繰り返しセクションのあるテクスチャがあります。テクスチャ用に持っているテッセレートされた1920x1080の画像を保存したくないので、他の解像度で正しく適用できるように、コードで生成したいと思います。これをどのように行うことができるかについてのアイデアはありますか?元のテクスチャはここにあります:http://img684.imageshack.us/img684/6282/matte1.png
テクスチャが2の累乗ではないことを知っているので、シェーダー内で繰り返しを行う必要があります。これは次のように行います。
これが私がクワッドを描く方法です:
任意のアイデアをいただければ幸いです。
ありがとう!
iphone - OpenGLGLSLシェーダーに変数を渡す
GLSLシェーダーを使用してテクスチャの変換を実行するiPhoneアプリを作成していますが、少し苦労している点の1つは、変数をGLSLシェーダーに渡すことです。
OpenGL状態の一部をシェーダーに読み取らせることができることを読みました(そして、この変数への読み取り専用アクセスのみが必要です)が、その交換がどのように行われるかはわかりません。
つまり、フラグメントシェーダーの外部で作成されたfloat値を取得して、フラグメントシェーダーにアクセスできるようにしようとしています(シェーダーの内部から渡されるか、読み取られるかは関係ありません)。
あなたが提供できるどんな助け/ポインターにも感謝します、それは非常にありがたいです!
iphone - PowerVR SGX535 シェーダー パフォーマンス (OpenGL ES 2.0)
私は現在、iPad ゲーム用のいくつかのシェーダーに取り組んでいますが、Apple の GLSL コンパイラーが最適化を行っていないようです (またはほとんど行われていません)。シェーダーで 1 本の線を移動し、FPS を 30 から 24 に下げることはできますが、なぜこれが起こっているのか本当にわかりません。
誰もが次の参照を持っていますか:
- GLSL 命令から生成される PowerVR 命令は何ですか?
- PowerVR 命令のタイミングは?
- PowerVR535 にはどのような種類の並列処理ユニットがあり、どのように活用できますか?
ありがとう、トリスタン
c++ - GLSL の KD ツリー
OpenGL/GLSL で kd ツリーを実装する方法を理解しようとして 1 日を過ごした後、私はかなりイライラしています ...
GLSL で KD ノードを次のように宣言します。
SplitPoint は kd ツリーの分割点を保持し、ベクトルの 4 番目の要素は 3d 空間で平面を形成する splitDirection を保持します。DataPtr は現在、ツリーの葉にあるランダムな値のみを保持しています。
配列全体がAhnentafel Listを形成します。
C++ では、構造は次のようになります。
私はそれが正しいと信じており、構築されたツリーをバッファにアップロードします。チェックとして、バッファをメインメモリにマップし、値を調べます。
よく見えます (実際には、ノード 0 の y 方向に (0,256,0) でボリュームが分割されていると表示されます。-1 はデータがないことを示します)。
ツリートラバーサルのために、私はこれを試しました:
この時点で、画面上にランダムな色のパターンが表示されます。しかし、ほとんどの場合、目に見えるものは何もありません。
ノードから直接値を取得して正しい結果を得ようとしました...だから、均一なブロックデータの動的インデックス付けに何か問題があると思います。
誰かがここで私を助けてくれることを願っています...アイデアが不足しているため:/
フロリアン
opengl - GLSL - キャストの問題と奇妙なバグ
float を int にキャストしたときの GLSL コードの奇妙な動作について助けを得るためにここに来ましたが、GLSL を開始して以来、そのようなバグは見たことがありません
実際、GLSLを使用してCPUでメッシュスキニングを実現しようとしています
ATI Radeon HD 4850 (Gainward) を使用しており、Windows XP で OpenGL 2.1 を使用しています。
そのため、CPU 側でボーンのインデックスとウェイトを収集し、それらを頂点属性を使用してシェーダーに投げてから、ボーン マトリックスにウェイトを乗算し、その結果を使用して法線と gl_Position を計算します。
そこまではごく普通の
ボーン インデックスからボーンを取得する必要がある場合に問題が発生します。
4 つのボーンでスキニングされた単純なシリンダー メッシュを使用します。Cpu から均一な変数を介してボーンを送信しましたが、問題はこれらのボーン マトリックスに起因するものではないようです。シェーダーでハードコーディングしましたが、バグは残っています。ちなみに、Maya レンダリングと比較すると形状は正しいです。
さらに、各頂点のボーン インデックスは同じです: 0, 1, 2, 3; それらは VBO を介して GL_UNSIGNED_INT タイプで送信されます。しかし、シェーダーでは uvec4 が機能しないようです (ivec4 も)。そのため、float vec4 を使用して int() でキャストする必要があります。
ここに私の頂点シェーダーコードがあります:
FPS レートを見ているときにバグが表示されます。スキニングなしで、2000 FPS が得られます
ラインを使うとき
mat += v_boneWeights0[i] * bones[i];
、
いくつかのアーティファクトで適切な形状を取得します。FPS は 2000 のままです
しかし、私がラインを使用するとき
(これは他のラインに似ています) 形は完璧ですが、FPS は 1500 FPS に落ちます...
ループを遅くしたのは回線自体だと思いました。ただし、この行を離れて通常の gl_Position 計算からマットを削除すると、FPS レートは 2000 に上昇します
私が計算すると、別の奇妙な動作
ループの直後に、マット乗算なしで Normal gl_Position を計算します
FPS レートも 2000 に上昇します
合体しないとバグが出るみたい
これはハードウェアのバグだと思います。または、私のやり方が間違っているのかもしれません。わかりませんが、問題は int() のキャストに関連していると思います。
Nvidiaでこの種の動作に遭遇した人はいますか? Google で何も見つかりませんでした
あなたが私を助けてくれることを願っています
ありがとう :)
opengl - GLSL シェーダー ローダーの問題
問題は、glsl ローダーが機能せず、何が間違っているのかわかりません。
glsl - GLSLのprintf?
C では、次のようなコードをデバッグできます。
GLSLで... VertexまたはFragmentシェーダーで値をダンプする方法はありますか? 遅いかどうかは気にしません。値をダンプしたいだけです。理想的には、次のようなセットアップが必要です。
- 通常の状態 = GLSL シェーダーを通常どおり実行する
- キー「d」を押す = 次のフレームがULTRA低速モードで生成され、頂点/フラグメント シェーダーの「printfs」が実行され、ダンプされます。
これは実現可能ですか?(パフォーマンスは気にしません。これを 1 つのフレームで実行したいだけです)。
ありがとう!
iphone - OpenGL ES 2のGLSLで、前の出力で動作するシェーダーを作成するにはどうすればよいですか?
特定のテクスチャで始まるシェーダーが必要です。その後、アニメーションの各フレームは、シェーダーの前の出力と他の入力で動作します。
CPUからバッファを前後に移動することなく、各フレームが前のフレームの出力にアクセスできるように、フレームバッファを編成するにはどうすればよいですか?