問題タブ [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 - OpenGLシェーディング言語によるピッキング
シェーダーを使用してレンダリングされた情報を選択するための最良の方法を見つけようとしています。ウィンドウマネージャバッファ(ウィンドウ)は、レンダリングの出力に使用されます。ユーザーイベントでは、レンダリングされたジオメトリを選択する必要があります。gluPickの使用は簡単ですが、シェーダーのみを使用して選択しようとしています。
シェーダーの柔軟性は、正しい解決策を見つけるのに役立ちません。私は次の解決策を見つけました:
- システムが提供するバッファを使用したレンダリング(実際には色を使用)。glScissorを使用して特定の領域でのレンダリングを制限し、glReadPixelsを使用して色をフェッチし、ジオメトリ識別子でマップします
- 別のフレームバッファオブジェクトを使用してレンダリングします。レンダーバッファフォーマットを定義する必要があります。たぶん、名前を付けるために単純な整数を使用できますか?
- レンダリングとピッキングの両方で、フレームバッファオブジェクトを使用してレンダリングします。レンダリングされた名前を含む追加のrenderbufferオブジェクト。
ウィンドウバッファを変更せず、ジオメトリ名を指定するカスタムの方法を定義できるため、2番目のソリューションが最適のようです。
なにか提案を?
PS:
フラグメントシェーダーでは、フラグメントデータを定義するためにvec4の配列を宣言しているので、サイズの整数の内部形式で格納されたRコンポーネントのみを持つレンダリングバッファーを保持するフレームバッファーを設定するにはどうすればよいですか?
フラグメントシェーダーの出力変数を特定のアタッチされたレンダーバッファーにリンクすることは可能ですか?
opengl - 同じプログラムで複数のピクセル (フラグメント) シェーダーを使用できますか?
2 つのピクセル シェーダーが必要です。最初に 1 つのことを行い、次に別のことを行います。これは可能ですか、それともすべてを 1 つのシェーダーに詰め込む必要がありますか?
opengl - レイキャスティング:射影行列を適切に適用する方法は?
私は現在、正常に動作する GLSL でのレイキャスティングに取り組んでいます。とにかく、正射影から透視投影に移行したいのですが、適切に行う方法がわかりません。レイキャスティングで射影マトリックスを使用する方法に関する良いリンクはありますか? マトリックスを何に適用する必要があるのか さえわかりません(おそらく、何らかの形でレイの方向に?)。今、私はこのようにしています(疑似コード):
しかし今は、gluPerspective 関数と同様に機能する projMatrix を使用して、アスペクト比、fov、近距離および遠距離の平面を簡単に定義できるようにしたいと考えています。基本的に、誰かが私に同様のプロジェクトマトリックスを設定するためのコードのチャンクを提供できgluProjection
ますか? 次に、それを rayDirection で乗算するのが正しいかどうか教えてください。
opengl - GLSL でプリプロセッサ マクロを外部定義する
GLSL には完全な C スタイルのプリプロセッサがあります。機能しないのは #include だけです。優れた機能の 1 つは、#ifdef を使用して関数をコメント アウトし、特定の機能が使用されていない場合に間引くことができる 1 つのシェーダーを作成できることです。
私の質問は:
C コードからマクロを定義する方法はありますか?
openGL インターフェイスでそれを行う方法はないようです。簡単なハックは、コードがフォーム ファイルをロードする前に #define FOO を数行追加することです。しかし、それは一種の後退のようです。
opengl - フラグメントシェーダーを使用したGLSLは、黒のGL_POINTSのみをレンダリングします。
多くのGL_POINTSといくつかのGL_LINESを描画する古いOpenGLプログラムにいくつかのシェーダーを追加しようとしています。
これらの2つのシェーダーを作成しました。
バーテックスシェーダー:
フラグメントシェーダー:
これらの2つのシェーダーは、問題なくコンパイルおよびリンクされます。そして、頂点シェーダーはうまく機能します。頂点シェーダーでそのsinを使用してGL_POINTSが置き換えられているのがわかります。しかし、問題は、すべての点と線が黒にレンダリングされるため、背景色が黒でない場合にのみGL_POINTSとGL_LINESを表示できることです。レンダリングコードでglColor3fで設定されたすべての色が無視されているようです。フラグメントシェーダーでコメント化された行のコメントを解除すると、すべての行とポイントを赤にすることができますが、gl_Colorは各ポイントにglColor3fで設定された色に対応するべきではありませんか?
この動作を引き起こす可能性のあるOpenGLコードに他に何かありますか?
geometry - フラグメントがジオメトリ上にあるかどうかのGLSLチェック
現在、ジオメトリの位置を の RGB チャネルgl_FragColor
に書き込んでいます。フラグメントがジオメトリの一部である場合はアルファ チャネルに 1.0 を書き込み、空の場合は 0.0 を書き込みたいと考えています。
フラグメントがジオメトリかどうかを見分ける簡単な方法はありますか? 多分を通してgl_FragCoord.z
?
ありがとう
c++ - GLSL エラー: 2001 - このエラー コードは何を意味しますか?
コンパイル エラーが発生したときに情報ログを照会した後に、これを取得しました。エラーコードが何を意味するのかを教えてくれる単一のリソースを見つけることができませんでした!
glsl 1.1 をサポートする Intel モバイル チップセットで Ubuntu 9.10 を使用する。メサのドライバー。
頂点シェーダー:
フラグメント シェーダー:
シェーダー オブジェクトを初期化するときは、次を呼び出します。
これらの呼び出し
頂点属性をバインドするのが早すぎるということですか? シェーダーがバインドされている場合、それらはバインドする必要がありますか?
opengl - GLSL シェーダをデバッグするには?
GLSL プログラムをデバッグする必要がありますが、中間結果を出力する方法がわかりません。GLSL で (printf のような) デバッグ トレースを作成することは可能ですか?
c++ - GLSL で均一変数を更新する方法
アプリケーションからシェーダーの目の位置を更新しようとしていますが、これを試みるとエラー 1281 が発生し続けます。その後、値を更新しようとすると、初期化後に問題はありません。これが私のコードです:
void GraphicsObject::SendShadersDDS(char vertFile [], char fragFile [], char filename []) {
}
そして、目の位置を更新するために呼び出す関数は次のとおりです。
void GraphicsObject::UpdateEyePosition(Vector3d& eyePosition){
}
変数を更新するいくつかの方法を試しましたが、これが最新の化身です。ご覧いただきありがとうございます。すべてのコメントを歓迎します。
更新: エラーは実際にはここではまったく発生していません。エラーが発生したと仮定したのは私のせいです。実際には、いくつかのスプリングを描画するとエラーが発生します。
for(int i = 0; i < 2; i++) {
最初のものを描画すると問題ありませんが、glBegin(GL_LINE_STRIP) に応答して glEnd() を呼び出す時点で 2 番目のものを呼び出すとエラーが発生します。私が投稿したエラーではなかったので、ご不便をおかけして申し訳ありませんが、少なくとも、ユニフォーム変数を更新する方法を知りたい場合は、こちらをご覧ください。
shader - GLSLを使用した独自のデプスバッファの実装
通常の深度バッファーと同じサイズのデータ構造が必要であり、シェーダーで読み取りと書き込みができる必要があります。これは可能ですか、そしてこのデータ構造はどのように見えますか?