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

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

1
GLSL、1つまたは多くのシェーダープログラムですべてですか?
OpenGLを使用して3Dデモを行っていますが、GLSLが多少「制限されている」ことに気づきました(または、私だけですか?)。とにかく、私は多くの異なる種類の資料を持っています。一部のマテリアルにはアンビエントカラーと拡散カラーがあり、一部のマテリアルにはアンビエントオクルージョンマップがあり、一部にはスペキュラマップとバンプマップがあります。 1つの頂点/フラグメントシェーダーペアですべてをサポートする方が良いでしょうか、それとも多くの頂点/フラグメントシェーダーを作成し、現在選択されているマテリアルに基づいて選択する方が良いでしょうか?OpenGLまたはD3Dの通常のシェーダー戦略とは何ですか?
17 opengl  3d  shaders  glsl 

2
OpenGL:VBOまたはglBegin()+ glEnd()?
私は最近、オリジナルのOGLレッドブックを渡した人からチュートリアルサイトへのこのリンクを与えられました。3番目のヘッダーは、典型的なレンダリングメソッドとしてglBegin()とglEnd()を忘れるようにはっきりと述べています。Redbookの方法で学びましたが、VBOにはいくつかの利点があります。これは本当に進むべき方法ですか?その場合、レンダーコードと後続のシェーダーをVBOと後続のデータ型に簡単に変換する方法はありますか?
16 opengl  graphics  glsl  vbo 

2
RenderMonkeyの後継者はいますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 5年前に閉鎖されました。 GLSLシェーダープログラミングから始めて、RenderMonkeyを検討しています。悲しいことに、AMDはもはやサポートしていません。どうして?後継者はいますか?
16 shaders  glsl 

2
可変線幅のトゥーン/セルシェーディング?
私はセルシェーディングを行うためにそこにいくつかの広範なアプローチを見ています: 法線が反転したモデルの複製と拡大(私にとってはオプションではありません) エッジ検出へのSobelフィルター/フラグメントシェーダーアプローチ エッジ検出へのステンシルバッファアプローチ 面とエッジの法線を計算するジオメトリ(または頂点)シェーダーアプローチ たとえば、ジオメトリ中心のアプローチが照明や線の太さを最大限に制御できると仮定するのは正しいでしょうか。丘のシルエットラインが徐々に平野に合流するのを見るかもしれない地形のために? 地形の表面にピクセル照明が必要ない場合はどうすればよいですか?(そして、セルベースの頂点ベースまたはテクスチャマップベースのライティング/シャドウイングを使用する予定ではないでしょう。)それから、ジオメトリタイプのアプローチを続けるか、代わりにスクリーンスペース/フラグメントアプローチを使用する方が良いでしょうか物事をシンプルに保つために?もしそうなら、メッシュ全体のアウトラインだけではなく、メッシュシルエット内の丘の「インク」をどのように取得し ますか(そのアウトライン内に「インク」の詳細はありませんか?(示唆的な輪郭、折り目))。 最後に、ジオメトリシェーダーを使用して、反転法線アプローチを安価にエミュレートすることは可能ですか?これに関する私の懸念は、すべての頂点を確実に複製し、それに応じてスケーリングできることですが、法線の反転やフラグメントシェーダーの明確な色付けにどのようにアプローチするのでしょうか? 私が欲しいもの-シルエット内の邪魔な線で線の太さを変える... 欲しくないもの... 編集:さらなる研究により、次のことが明らかになりました... 私は地形に大量の頂点を持っているため、距離ベースのLoDを考慮しても、すべての複製とスケーリングに伴う計算の複雑さのために、フリップされた法線もジオメトリシェーダーベースのアプローチも(錐台カリングを使用しても)賢明なオプションになりますアップロードされた頂点。 テレインサーフェス上でソリッドトーンシェーディングの形でピクセル単位のライティングを必要としないことを考慮すると、これらのように、フェース法線ベースのアプローチ(そうでない場合は正しいサーフェスライティングの要件)を検討することも賢明ではなくなります計算するのは当然非常に高価です。しかし、それらが最高レベルの制御を提供することは事実です。たとえば、「芸術的な」ストロークを使用してエッジをシェーディングする機能:美しいですが、非常に複雑なゲーム環境では実際には実行できません。 ステンシルバッファーは、シェーダーですべての作業を行うことを好むため、避けたいものです。(上記の赤いアウトラインの例は、ステンシルバッファーで行われました-古い学校です。) これにより、フラグメントシェーダーのイメージ空間アプローチが残ります。計算の複雑さは、頂点の数ではなくフラグメントの数に削減されます(私の場合、これはジオメトリシェーダーで行う必要がある操作よりも10〜100倍少ない操作です)。これには、不連続フィルター(Sobel演算子など)を適用できるgバッファー(通常バッファーとオプションで深度バッファーで構成される)を生成するために、複数のレンダーパスが必要です。深さの不連続性は、示唆的な輪郭と折り目を可能にします。このアプローチの私の唯一の問題は、インクエッジの幅をより細かく制御できないことですが、フラグメントシェーダーの適切なアルゴリズムを使用すれば、これが可能になると確信しています。 質問はより具体的になりました:フラグメントシェーダーで、特に外側のシルエットで、可変エッジ幅をどのように正確に取得するのですか?

1
GLSLバージョン330でスカイボックスを実装する
OpenGL 3.3およびGLSLバージョン330で動作するスカイボックスを取得しようとしています。 ウェブ上のどこにも完全に最新のOGLスカイボックスチュートリアルが見つからなかったため、古いものを最新化しました(頂点などのglVertexAttribPointer()代わりに使用gl_Vertex)。それはほとんど動作していますが、2つの主要な詳細: スカイボックスは空の三角形に似ており、テクスチャはひどくゆがんで伸びています(それらはスターフィールドであると想定されていますが、黒の背景に線が描かれています)。これは、古いチュートリアルを完全に正しく移植しなかったためだと99%確信しています。 これが私のスカイボックスクラスです。 static ShaderProgram* cubeMapShader = nullptr; static const GLfloat vertices[] = { 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, …
14 c++  opengl  glsl  cubemap  skybox 

2
GLSLシェーダー-色相/彩度/輝度の変更
GLSLフラグメントシェーダーを使用して画像の色相を変更しようとしています。Photoshopの色相/彩度調整レイヤーに似たものを実現したい。 次の画像では、私がこれまでに得たものを見ることができます。緑色の正方形の色相を変更して右側の赤い正方形のようにしたいのですが、このシェーダーでは半分の赤い半分のピンクの正方形(中央の正方形)が得られます。 フラグメントシェーダーで行っているのは、テクスチャの色をHSVに変換してから、頂点シェーダーから取得したHSV色を追加して、色をRGBに変換し直すことです。 私は何を間違えていますか? フラグメントシェーダー: precision mediump float; varying vec2 vTextureCoord; varying vec3 vHSV; uniform sampler2D sTexture; vec3 convertRGBtoHSV(vec3 rgbColor) { float r = rgbColor[0]; float g = rgbColor[1]; float b = rgbColor[2]; float colorMax = max(max(r,g), b); float colorMin = min(min(r,g), b); float delta = colorMax - colorMin; float …

1
シェーダーをコンパイルされた形式またはプレーンテキストで配布する必要がありますか?
GLSLで記述されたシェーダーを使用するアプリケーションがある場合、現実世界での配布とデスクトップおよびモバイルの最適な戦略は何ですか? 私はこれをバイナリ形式で、またはプレーンなシリアル化されたテキストとして配布することを目指しています。これについての良い提案をお願いします。

4
シェーダーコードのデバッグ?
ゲームエンジンを作成しています。パースビューカメラを使用すると、黒い画面が表示されます。共有するコードがたくさんあるため、これがなぜなのかを正確に尋ねるつもりはありません。 問題は、デバッグ方法がわからないことです。変化するのは投影行列だけです。投影行列が正常に見える場合、なぜ機能しないのかわかりません。理想的には、シェーダーが計算を行ったときにさまざまな値を出力しますが、GLSLにはprintf()関数がありません。 だから私の質問は次のとおりです。どうすれば問題をデバッグできますか?私が考えることができる唯一のことは、クライアント側でできる限り多くの値をチェックし、順列でプログラミングすることですが、私はそれを行ってどこにも行きませんでした。ビデオカードで何が起こっているかを確認する方法はありますか?私が使用できる完全に異なる技術はありますか? 私はGLSLバージョン420(およびそのバージョンに固有の機能)を使用しているため、2010年に最後に更新されたことを考えると、glslDevilはオプションではないと思います。 編集 まったく関係のないデバッグによって問題を解決できました。

1
OpenGL / GLSL:キューブマップにレンダリングしますか?
シーンをキューブマップにレンダリングする方法を見つけようとしています。私はこれに少し立ち往生しており、皆さんに助けを求めると思いました。OpenGLは初めてで、FBOを使用するのは初めてです。 現在、キューブマップbmpファイルの使用例があり、フラグメントシェーダーのsamplerCubeサンプルタイプがGL_TEXTURE1にアタッチされています。シェーダーコードはまったく変更していません。キューブマップbmpファイルをロードしていた関数を呼び出さず、以下のコードを使用してキューブマップにレンダリングしようとしているという事実を変更しているだけです。 以下のように、GL_TEXTURE1にもテクスチャを再度アタッチしています。これは、ユニフォームを設定したときです。 glUniform1i(getUniLoc(myProg, "Cubemap"), 1); フラグメントシェーダーでにアクセスできますuniform samplerCube Cubemap。 私は次のような関数を呼び出しています: cubeMapTexture = renderToCubeMap(150, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE); ここで、下の描画ループで、+ x、-x、+ y、-y、+ z、-z軸を見下ろすようにビューの方向を変更していないことに気付きます。私は本当にそれを実装する前に何かが最初に動作するのを見たいだけでした。私は少なくとも、コードが今のようにオブジェクト上に何かを見るべきだと考えました。 私は何も見ていません、ただ真っ黒です。背景を白にしましたが、オブジェクトは黒です。キューブマップテクスチャをサンプリングするために照明と色を削除しましたが、まだ黒です。 GL_RGB8、GL_RGBAのテクスチャを設定するときの問題は、フォーマットのタイプかもしれないと思っていますが、私も試しました: GL_RGBA、GL_RGBA GL_RGB、GL_RGB フレームバッファにアタッチされたテクスチャにレンダリングするので、これは標準だと思いましたが、異なる列挙値を使用する異なる例を見てきました。 また、キューブマップを使用するすべての描画呼び出しでキューブマップテクスチャをバインドしようとしました。 glBindTexture(GL_TEXTURE_CUBE_MAP, cubeMapTexture); また、ほとんどの例で見たFBO用の深度バッファーを作成していません。これは、キューブマップのカラーバッファーのみが必要だからです。実際にそれを追加して、それが問題かどうかを確認しましたが、それでも同じ結果が得られました。試してみたときに、それを少しでもおかしくすることができました。 正しい方向に私を向けることができる助けはありがたいです。 GLuint renderToCubeMap(int size, GLenum InternalFormat, GLenum Format, GLenum Type) { // color cube map GLuint textureObject; int face; GLenum status; …
13 opengl  glsl  cubemap 

1
SSAO実装で望ましい結果が得られない
遅延レンダリングを実装した後、このチュートリアルを使用してSSAO実装を試してみました。残念ながら、SSAOのように見えるものは何も得られません。私の結果を以下で見ることができます。 奇妙なパターンが形成されており、オクルージョンシェーディングが必要な場所(つまり、オブジェクト間および地面)がないことがわかります。私が実装したシェーダーは次のとおりです。 #VS #version 330 core uniform mat4 invProjMatrix; layout(location = 0) in vec3 in_Position; layout(location = 2) in vec2 in_TexCoord; noperspective out vec2 pass_TexCoord; smooth out vec3 viewRay; void main(void){ pass_TexCoord = in_TexCoord; viewRay = (invProjMatrix * vec4(in_Position, 1.0)).xyz; gl_Position = vec4(in_Position, 1.0); } #FS #version 330 core uniform …

4
OpenGLでマルチパスシェーダーはどのように機能しますか?
Direct3Dでは、プログラム内でパスを文字通り定義できるため、マルチパスシェーダーの使用は簡単です。OpenGLでは、シェーダープログラムに必要な数の頂点シェーダー、ジオメトリシェーダー、およびフラグメントシェーダーを与えることができるため、もう少し複雑に思えます。 マルチパスシェーダーの一般的な例は、トゥーンシェーダーです。1つのパスは実際のセルシェーディング効果を実行し、もう1つのパスはアウトラインを作成します。2つの頂点シェーダー「cel.vert」と「outline.vert」、および2つのフラグメントシェーダー「cel.frag」と「outline.frag」(HLSLで行う方法と同様)がある場合、どうすればよいですかそれらを組み合わせてフルトゥーンシェーダーを作成しますか? マルチパスGLSLシェーダーの背後にある理論を知りたいだけなので、これにジオメトリシェーダーを使用できると言ってほしくありません;)
12 opengl  shaders  glsl 

2
GLSLで効率的なブルームシェーダーを作成するにはどうすればよいですか?
GLSLを使用してブルームエフェクトのレンダリングに関連するリソースをネットで検索しましたが、何も見つかりませんでした。Philip RideoutのWebサイトのチュートリアルは優れていますが、私のNvidia GPUでのパフォーマンスは非常に劣っています。 誰もこの問題にどのようにアプローチし、ブルーム効果のかなり効率的な実装を構築するべきかについて私を導くことができますか?
12 shaders  glsl  bloom 

1
GLSL-メイン関数のスコープ外でのグローバル変数の宣言
GLSLのメイン関数スコープの外で変数を宣言することは役立ちますか?これらの変数は実際に再利用されますか?それはより効率的ですか? 問題のコードは次のとおりです。 varying vec2 vposition; uniform float seed; uniform float top; uniform float bottom; uniform float phi; uniform float theta; uniform float scaledPI; uniform float yn; uniform float ym; uniform float rx; uniform float ry; uniform float radius; const float PI = 3.141592653589793238462643383; float left; float right; float mscaled; float …
12 glsl 

1
画面スペースの派生物とは何ですか、いつ使用しますか?
私が見るddxとddyGLSLの機能をし、HLSL同等物は、すべての今してシェーダコードに出てきます。私は現在それらを使用して、接線または接線なしでバンプマッピングを行っていますが、基本的にコードをコピーして貼り付けました。これらの関数が実際に何であるか、それらが何をするのか、いつ使用するのかを理解できません。 だから質問: スクリーンスペース微分関数とは何ですか? これらの関数は何をしますか?入力値と出力値 最も一般的に使用される効果は何ですか? これらの機能に目を向けるには、どのような効果が必要ですか?

1
GLSLフラグメントシェーダーでこの種のリップルを実装する方法は?
だから私はすでに反射部分を実装しました: uniform sampler2D texture; uniform vec2 resolution; uniform vec3 overlayColor; void main() { vec2 uv = gl_FragCoord.xy / resolution.xy; if (uv.y > 0.3)// is air - no reflection or effect { gl_FragColor = texture2D(texture, vec2(uv.x, uv.y)); } else { // Compute the mirror effect. vec4 color = texture2D(texture, vec2(uv.x, 0.6 …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.