タグ付けされた質問 「glsl」

OpenGLシェーダー用のプログラミング言語。

1
GLSLデフォルトシェーダー
エラーチェックコードでエンジンを準備しています。私はこの状況を最善の能力で説明するつもりです。シェーダーをロードしてエラーが発生したときはいつでも(ファイルが存在しない、コンパイルエラー、問題が発生する可能性があるすべて)シェーダーを削除し、ポインターを0に設定します(これを確認する別の方法は考えられません)誤ってゴミを添付または削除しようとした場合)。これが発生した場合、プログラムを停止したくありません。誰かが誤ってゲームフォルダー内の1つのファイルを削除または変更し、そのためにゲーム全体を使用不可にしたくないからです。 さて、ポインタが0であるプログラムにシェーダをアタッチする場合、デフォルトの動作はありますか? 私のプログラムでは、頂点シェーダーが0に、フラグメントシェーダーが0に接続されている場合、OpenGLはデフォルトのプログラムを使用します(すべてが白で表示されます)。 これは、ディメンションが既にクリップスペースにある回転した立方体であり、透視投影や深度チェックなしでレンダリングされます。.objファイルから読み込まれます。 ここで、適切なフラグメントシェーダーをアタッチしたが、頂点シェーダーが0になると、次のようになります。 これは私が期待することです。フラグメントシェーダーはすべてvec4(1.0、0.3、0.7、1.0)を出力します。頂点シェーダーがないため、OpenGLはデフォルトのシェーダーを使用します(これは正しい仮定ですか?)。 ただし、正しい頂点シェーダーをアタッチしたが、フラグメントシェーダーを0にアタッチした場合(または、フラグメントシェーダーをまったくアタッチしない場合)、次のようになります。 目に見えないのは、このモデルが絶えずさまざまな色でペイントされていることです。そのため、私の画面では、黒い水平線が通る酸性の旅行のように見えます。 私は少し混乱しています。なぜなら、私は立方体がちょうど白いことを期待しているからです。私のシェーダーコードは最低限の骨であり、頂点シェーダーとフラグメントシェーダーの間で変数を交換していないことを指摘しておきます。ポインターが0に等しくないかどうかを確認しても何も変更されません。リンクされたプログラムは、ポインターに0を指定した場合と同じように動作します。私にとって最も奇妙なのは、常にゴミ箱ではなく、適切に網掛けされていることです。 編集:おそらくデフォルトのフラグメントシェーダーは、設定を省略している頂点からのgl_値を期待していますか?これは、表面が適切にシェーディングされる理由を説明するものであり、フラグメントシェーダーはスムーズなインを期待していますが、その値は単なるゴミです。 これは「未定義の振る舞い」ですか、それともどのように機能すると思われますか?

1
流体シミュレータの移流プログラムの奇妙な問題
2D流体シミュレータを実装しました。ソルバーは完全にGPUで実行されます。すべて正常に動作します...私の仕事用PCで。しかし、自宅のPCではひどい不具合があり、それらを修正する方法を理解できません。経験的に、問題がadvectプログラムのどこかにローカライズされていることを発見しました。これは、私がビデオを統合した仕事で、そして自宅で— NVIDIA GeForce 9800 GTは非常に奇妙な原因です。次に、advectプログラムのGLSLソースを示します(明確にするために一部の行が省略されています)。 #version 130 out vec3 value; uniform sampler2D q; uniform sampler2D velocity; uniform float dt; uniform float inverseSize; void main() { vec2 p = gl_FragCoord.xy * inverseSize; vec2 np = p - dt * texture(velocity, p).xy; value = texture(q, np).xyz; } そしていくつかのスクリーンショット。 仕事用PC: 自宅のPC:
7 opengl  physics  glsl 


1
GLSL-#330から#130へのシェーダーの書き換え
私は最近、ジオメトリシェーダーを使用してポイントをテクスチャ付きの三角形/カリングに変換するゲーム(LD21)を作成しました。#330のサポートが広く普及している印象を受けたので、#330シェーダーのみを作成しましたが、それほど古いハードウェアの多くは#130のみをサポートしているようです(GLViewによると)。 今、私は#330のコア機能に慣れているだけなので、シェーダーを#130に書き換えるのに苦労しています。フラグメントシェーダーを書き換えるのは非常に簡単でしたが、頂点シェーダーとジオメトリシェーダーを#150まで下げることができました。 それで、シェーダーを書き換えることは可能ですか、それとも私のレンダリングエンジンで多くの変更が必要になるでしょうか? ジオメトリシェーダー #version 150 layout(points) in; layout(triangle_strip, max_vertices = 4) out; uniform mat4 oMatrix; in VertexData { vec4 position; vec4 texcoord; vec4 size; } vert; out vec2 gTexCoord; void main() { if(vert.position.x>-4f && vert.position.x<4f && vert.position.y>-2f && vert.position.y<2f) { gTexCoord=vec2(vert.texcoord.z,vert.texcoord.y); gl_Position = vert.position + vec4(vert.size.x,vert.size.y,0,0); EmitVertex(); gTexCoord=vec2(vert.texcoord.x,vert.texcoord.y); gl_Position …
7 opengl  glsl 

4
glslデモの提案?
最近インタビューした多くの場所で、シェーダーを使用したかどうかを何度も尋ねられました。パイプラインを読んで理解しましたが、その質問に対する答えはノーです。最近、ある場所から「視覚的に洗練された」「何か」のサンプルを送ってもらえるかと尋ねられました。 そこで、思い切って、GLSLで簡単なシェーダーを(openglを使用して)作成することにしました。これで、glslシェーダーでvbosを使用できる基本的な設定ができました。 私は彼らに何かを送るための非常に短いウィンドウを残しており、経験を持つ誰かが誰かの注意を引くのに十分興味深いアイデアを提案できるかどうか疑問に思っていました。 ありがとう

1
FBOに描画するときにデフォルトの深度バッファーを使用できますか?
デフォルトの深度バッファーをFBOに接続する方法は?FBOにアタッチされた深度レンダーバッファーバッファーを(描画後に)デフォルトの深度バッファーとして使用する方法 基本的に、FBOレンダリングとバックバッファーレンダリングの両方に同じ深度バッファーを使用したいと思います。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.