問題タブ [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.
opengl - アルファ透過性のための AMD RenderMonkey GLSG Config
RenderMonkey を使用して、アルファ透明度を使用する GLSL シェーダーを設計しようとしていますが、RenderState エディターは、OpenGL で慣れ親しんだ用語を使用していません。単純なアルファ透過性を設定する方法について誰かアドバイスできますか?
opengl - GLSLフラグメントシェーダー構文エラー
次の単純なフラグメントシェーダーコードは失敗し、ログに情報のないメッセージが残ります。
ERROR: 0:1: 'gl_Color' : syntax error syntax error
次のものが機能している間:
Lighthouse3Dのチュートリアルでgl_Colorがvec4であると言われているように、これは私の頭を悩ませます。別のvec4に割り当てられないのはなぜですか?
opengl - GLSL: テクスチャリング + シェーダーの有効化/無効化
シェーダーから OpenGL の状態にアクセスする方法を探しています。すばらしいリソースであるGLSL クイック リファレンス ガイドは、これに関してはあまり役に立ちませんでした。
私が取り組んでいる例では、次の 2 つのシェーダーがあります。
バーテックス:
断片:
テクスチャが適用されていないポリゴンをレンダリングすると、アルファ値は正しいのに黒が割り当てられます。
vec4(1.0, 1.0, 1.0, 1.0)
1、変数 'texel' が無効になっているときにテクスチャからサンプリングするのではなく、変数 'texel' が設定されるようにするには、どのような条件チェックを設定できますGL_TEXTURE_2D
か?
2、テクスチャリングモードごとに異なるシェーダーを作成し、glEnable
/ glDisable
( GL_TEXTURE_2D
) を使用する場所でシェーダーを切り替えると、処理が速くなりますか?
opengl - GLSLのOpenGLライトの状態がわからないのはなぜですか?
属性の受け渡しや大量の異なるシェーダーの作成を伴わないライトがGLSLで有効になっているかどうかを確認する方法はありますか?
NVidiaのCforGraphics(Cg)を使用するのはどうですか?Cgでできますか?
私は今あなたがそれをすることができないと確信しています。しかし今、私は尋ねます:なぜそうではないのですか?
opengl - OpenGL GLSL 補間
GLSL を使用して OpenGL でポイント ライトを実装しようとしています。必要なすべてのデータをシェーダーに送信します。簡単にするために、ここでは拡散光のみを使用します。
私の例は、単一の光源で照らしたい巨大な三角形を示しています。光源は小さな青い三角形として表示されます。
拡散光の場合、光と表面の間の角度を知る必要があります。したがって、法線と光の方向を計算します。内積は、-1 から 1 の間の数値を与えますが、0 から 1 の間のすべてが照らされます。
ただし、この例ではこの角度が正しく計算されていないため、ここで立ち往生しています。シェーダーをデバッグするのは難しいので、サーフェスの色としていくつかの出力を使用しました。三角形の色として法線を使用し、ライトがどこにあっても表面は常に緑色でした。つまり、法線は y 軸を上に向けているため、正しく計算されます。つまり、ライトの方向が間違っているに違いありません。しかし、私はそれが間違っている理由を見つけることができません。ライトの位置と頂点の位置は、ワールド空間で頂点シェーダーに渡されます。頂点シェーダーは、それらを目の空間に変換し、ライトの方向を計算して、これをフラグメント シェーダーに渡します。
頂点シェーダー:
フラグメント シェーダー:
補間が本当に奇妙であることを明確に示すこの例の写真をいくつか追加しました。貼り付けたコードが正しいかどうか、またはコードの詳細を知る必要があるかどうかを知りたいです。さらに、この補間動作は正常ですか、それとも私のコードのバグですか?
http://img41.imageshack.us/img41/3566/interpolation.png http://img189.imageshack.us/img189/3566/interpolation.png
特に最初の写真は、光の中心点が光の真下ではなく、三角形の中心にわずかに移動していることを示しています。
「pos」をフラグメント シェーダーに渡し (つまり、補間されます)、フラグメント シェーダーで「lightDir」を計算すると、すべて正常に動作します。
opengl - glUseProgram(0)は50msかかりますか?
glslプログラムを無効にするための呼び出しに50ミリ秒かかる理由はありますか?
以前にglFlushを実行したので、プログラムが変更される前にパイプラインがフラッシュされることはありません。
シェーダーを有効にするには0.03msかかります。
glsl - 球体に円を描く
シェーダーを使用して球体にたくさんの円を描こうとしています。基本的なアルゴリズムは次のようになります。
- (テクスチャ座標を使用して) フラグメントから円の中心の位置までの距離を計算します (円の中心もテクスチャ座標で指定されます)。
- フレジェントから円の中心までの角度を計算します。
- 角度に基づいて、テクスチャ (360 ピクセルを含み、赤のチャネルが半径距離を指定する) にアクセスし、指定された角度の半径を取得します。
- フラグメントから円の中心までの距離が取得した半径よりも小さい場合、フラグメントの色は赤になり、それ以外の場合は青になります。
描きたいのですが... 青い球体に赤い円を60個描いてください。y シェーダーを 1 つの円で動作させましたが、60 を行うにはどうすればよいですか? これが私がこれまでに試したことです....
特定の角度の半径を指定するデータ テクスチャを渡しましたが、アーティファクトが忍び寄っていることに気付きました。これは、以下を使用してデータ テクスチャから情報を取得しようとしたときの線形補間によるものだと思います。
ここで、angles は特定の角度の半径を含むデータ テクスチャ (Sampler2D) であり、x = angle / 360.0 (角度は 0 ~ 360) および y = 0 ~ 60 (y は円の番号)
Uniform float radii[360] を渡そうとしましたが、動的インデックスで半径にアクセスできません。私もこの混乱を試しました...
等々 ...
テクスチャを作成し、そのテクスチャにすべての円を配置してから、青い球体を円を含む球体とマルチテクスチャリングすると機能しますが、ご想像のとおり、エイリアシングが非常に悪くなります。事実上エイリアシングがないため、フラグメントの位置と円の位置に基づいて円を手続き的に生成するというアイデアが気に入っています。しかし、私は私が1つ以上行うのですか?
どうも!!!
〜ボルト
macos - OS X での GLSL シェーダー開発にはどのようなオプションがありますか?
Apple の Shader Builder はそれほど高度ではありません。ブートキャンプで何かを実行する以外に、OS X のより良い選択肢があるかどうか疑問に思っていました。
opengl - modelviewmatrixとviewmatrixからmodelmatrixを抽出するGLSL
GLSLではモデルマトリックスが利用できないので、gl_ModelViewMatrixとユニフォームとして渡す「ビューマトリックス」からプログラムで取得できるかどうか疑問に思っていましたか?
はいの場合、どのように?
ありがとう!
c++ - GLSL シェーダー命令の制限を破った場合のエラー メッセージは何ですか?
私たちは小さな開発チームで、古いグラフィックス カードをコンパイルするには大きすぎるかもしれない GLSL を扱っています。これが発生した場合、エラーのタイプに基づいて、(単に情報ログをダンプしたり、一般的な「このシェーダーは機能しませんでした」タイプのメッセージを出力したりするのではなく)、適切なエラー メッセージをユーザーに表示したいと考えています。
問題は、ATI と nVidia ではこれらのエラー メッセージの規則が異なり、シェーダーで発生したエラーの種類を判断する唯一の方法は、glGetShaderInfoLog によって生成されたエラー文字列を解析することです。
それを考えると、どこかにリストがありますか、またはATIとnVidiaカードの両方のエラー出力がどのように見えるかを誰かが知っていますか? または、命令の制限を超えたことを検出するより良い方法はありますか?