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

OpenGLグラフィックスライブラリの使用に関する質問。

9
新しいグラフィックプログラマは、OpenGLではなくVulkanを学習すべきですか?
wikiから:「Vulkan APIは当初Khronoによって「次世代OpenGLイニシアチブ」と呼ばれていました」、そしてそれは「OpenGLとOpenGL ESを後方にならない1つの共通APIに統合するための根拠のある再設計努力です」既存のOpenGLバージョンとの互換性」。 それでは、OpenGLの代わりにVulkanを学習するために、グラフィックプログラミングを始めようとしている人たちにもっと役立つべきでしょうか?彼らは同じ目的を果たすようです。
53 opengl  api  vulkan 

6
GLSLシェーダーをデバッグするにはどうすればよいですか?
自明ではないシェーダーを書くとき(他の自明でないコードを書くときと同じように)、人々は間違いを犯します。[要出典]ただし、他のコードのようにデバッグすることはできません。結局、gdbまたはVisual Studioデバッガーを添付することはできません。コンソール出力の形式がないため、printfデバッグすらできません。私が通常していることは、見たいデータを色としてレンダリングすることですが、それは非常に初歩的で素人的な解決策です。私は人々がより良い解決策を思いついたと確信しています。 では、シェーダーを実際にデバッグするにはどうすればよいですか?シェーダーをステップスルーする方法はありますか?特定の頂点/プリミティブ/フラグメントでシェーダーの実行を見ることはできますか? (この質問は、「通常の」コードをデバッグする方法に似たシェーダーコードのデバッグ方法に関するものであり、状態の変更などのデバッグに関するものではありません。)
45 opengl  glsl  debugging 

2
fwidthとは何ですか?
OpenGLのドキュメントには、そのfwidthを述べましたreturns the sum of the absolute value of derivatives in x and y。 これは数学的な用語ではあまり意味がなく、視覚化する方法はありますか? 関数の私の理解に基づいて、隣接するピクセルのfwidth(p)値にアクセスできますp。これは、パフォーマンスに大きな影響を与えることなくGPUでどのように機能し、すべてのピクセルで確実かつ均一に機能しますか
18 opengl 

1
OpenGLのコンテキストで「st」とはどういう意味ですか?
st他のOpenGLフラグメントシェーダーを見たときに、この用語が何度か登場するのを見てきました。しかし、私はそれが何を意味するのか、何のために使われるのかわかりません。以下に例を示します。 uniform vec2 u_resolution; vec2 st = gl_FragCoord.xy/u_resolution; これは、ピクセル座標を640 x 480(たとえば)ではなく0.0-1.0の正規化された座標に変換していることを理解できます。 私ものようなものを見てきましたposition.st。 どういう意味ですか?
18 opengl 

3
OpenGLでフレームバッファオブジェクトにレンダリングされているものをデバッグするにはどうすればよいですか?
画面にレンダリングされている点群があります。各ポイントには、位置と色、IDがあります。 各ポイントのIDをテクスチャにレンダリングするように求められたので、FBOを作成し、色用と深さ用の2つのテクスチャを添付しました。このオフスクリーンレンダリングに必要なVAOとVBOを作成し、各ポイントの位置とIDをアップロードしました。 FBOへのレンダリングが完了したら、カラーテクスチャのピクセルを読み取ってglReadPixels()値を確認しますが、すべてクリアされているように見えます。つまり、持っている値はと同じglClearColor()です。 FBOのカラーテクスチャにレンダリングされているものをデバッグする方法はありますか?あなたが提供するかもしれない任意のヒントは非常に歓迎されています。
17 opengl  debugging 

1
入力ジオメトリなしでジオメトリシェーダーでプリミティブを生成する方法はありますか?
数年前、私はこのGPU GemをOpenGLに実装して、マーチングキューブを使用して3D手続き型地形を生成しようとしました。この記事では、効率を最大限に高めるために、ジオメトリシェーダーにマーチングキューブを実装することを提案しています。つまり、ドメイン内のすべてのボクセルに対してシェーダーを1回実行する必要があり、そのセルでジオメトリ全体が生成されます。 私がつまずいた問題の1つは、シェーダーの外部で実際に何もレンダリングせずに、ジオメトリシェーダーを実行する方法でした。私の解決策(かなりハッキーに思えた)は、各セルにポイントをレンダリングし、ジオメトリシェーダーでそれを破棄し、代わりに三角形を放出することでした。適切な解決策が見つからなかったため、この回避策は最終的なコードに残っていました。 だから、とにかくOpenGLに入力ジオメトリなしでジオメトリシェーダーからレンダリングパスを開始するように指示することはありますか?または、物事を実行するために、常にいくつかのダミーポイントをGPUに送信する必要がありますか。

2
OpenGLでトラックボールを実装する方法は?
変換について多くのことを読んだ後、アプリにトラックボールを実装するときが来ました。原点からマウスがクリックされた場所までのベクトルを作成し、次に原点からマウスがクリックされた場所まで別のベクトルを作成する必要があることを理解しています。 私の質問は、(x、y)ピクセル座標を世界座標に変換する必要がありますか、または画像空間ですべてを行う必要がありますか(画像空間はピクセルで測定されたシーンの2D投影であると考えてください)? 編集 リッチー・サムズの答えはとても良いものです。しかし、私は少し異なるアプローチを取っていると思います。間違っているか何かを誤解している場合は修正してください。 私のアプリケーションでは、私は持ってSimplePerspectiveCamera受け取り、クラスpositionのカメラの、position of the target私たちは、見ているup、ベクトルfovy、aspectRatio、nearとfarの距離を。 それらを使用して、ViewマトリックスとProjectionマトリックスを作成します。今、ズームイン/ズームアウトしたい場合、視野を更新し、投影マトリックスを更新します。パンしたい場合は、カメラの位置を移動して、マウスが生成するデルタを確認します。 最後に、回転には、角度軸変換またはクォータニオンのいずれかを使用できます。このために、マウスが押されたピクセル座標を保存し、マウスが移動したときにピクセル座標も保存します。 座標の各ペアについて、球の公式、すなわちsqrt(1-x ^ 2-y ^ 2)を与えられたZ値を計算し、targetto PointMousePressedからtargetto PointMouseMovedに行くベクトルに計算し、外積を行います。回転軸を取得し、任意の方法を使用して新しいカメラ位置を計算します。 しかし、私の最大の疑問は、(x、y、z)値がピクセル座標で与えられていることtargetであり、使用しているベクトルを計算するとき、これは世界座標のポイントです。この座標系の混合は、私がやろうとしている回転の結果に影響していませんか?
15 opengl  trackball 

1
OpenGLの互換性、命名規則、ARBとEXT
私は、OpenGLの命名規則と拡張機能がどのように機能するかについての一般的な理解を形成したと思いました。 これまでの私の理解は次のとおりです。 接尾辞ない -などglGenBuffers()。この機能はコアプロファイルの一部です。wikiページには、これは、バージョン1.5から始まるコアプロファイルに追加されたことを私に伝えます。 ARB -などglGenBuffersARB()。この関数は、標準化されたGL_ARB_vertex_buffer_object拡張機能の一部です。この拡張機能の仕様はGenBuffersARB()、「新しいプロシージャと関数」セクションで明確に宣言されています。「依存関係」セクションでは、ハードウェアが拡張機能をサポートしている場合、1.4 +コンテキストから潜在的にこれにアクセスできることがわかります。 EXT-一部のベンダーのみがサポートできるベンダー固有の拡張機能です。頂点バッファオブジェクトは、レジストリにEXT拡張を持たないようです。 私の理解が崩れる場所は次のとおりです。 glGenFramebuffers、としてウィキ示すように、3.0のコアに添加しました。 ここで、3.0よりも低いコアプロファイルバージョンのフレームバッファー機能にアクセスしたいと思います。だから私はそれを拡張機能として使いたい。仕様レジストリは、ARBとEXTという 2つの拡張機能があることを教えてくれます。 質問1 -ARB拡張が存在する場合、なぜEXT拡張が存在するのですか?常にベンダー固有のものよりも標準化されたものを選択しませんか? 「新しい手順と関数」セクションのARB仕様を見ると、拡張GenRenderbuffers()機能が関数を定義していることがわかります。今回はARBサフィックスはありません。GLEWには関数プロトタイプがまったくありませんglGenRenderbuffersARB()。奇妙な。 ただし、EXT仕様にはGenRenderbuffersEXT()新しい関数セクションに関数があり、GLEWにもありglGenRenderbuffersEXT()ます。 質問2 -EXTサフィックスがある場合、ARBサフィックスがないのはなぜですか?ARB関数とコア関数の名前が同じであれば、これはARBに対してどのように機能しますか? 質問3-最終的に1.4プロファイルのフレームバッファ機能が必要です。最大のハードウェア互換性カバレッジを得るために、どの拡張機能とどの機能セットを使用する必要がありますか?
14 opengl 

3
OpenGLで透明度をレンダリングするいくつかの方法は何ですか
次のように、アルファブレンディングをオンにして、表面を透明にすることができます。 glDisable(GL_DEPTH_TEST); //or glDepthMask(GL_FALSE)? depth tests break blending glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); しかし、これはオブジェクトが最前面から最前面にレンダリングされる場合にのみ機能します。それ以外の場合、背景の物体は、下の画像の床のように、より近いオブジェクトの前に表示されます。パーティクルとGUI要素のソートは問題ありませんが、三角形メッシュの場合、https://www.opengl.org/wiki/Transparency_Sortingで説明しているように、手間がかかり、時間がかかるようです。 これに対処する一般的な方法は何ですか?これは非常に広範であり、実装の詳細な詳細ではなく、いくつかのアプローチの簡単な説明と、関与する可能性があることを知っています。

1
遠近法の正しい補間を無効にする場合(noperspective)
GLSLでは、頂点属性の遠近法による正しい補間がデフォルト設定です-noperspective修飾子を使用して、特定の頂点属性に対してそれを無効にできます。後処理シェーダー以外では、パースペクティブの正しい補間が無効になっているのを見たことがありません。他の使用例はありますか?また、パフォーマンス面でも違いはありますか?

1
連続したOpenGL Compute Shader呼び出しの同期
特定の順序で実行する必要があり、出力が以前の入力に依存するいくつかの計算シェーダーがあります。理想的には、クライアント側のバッファーをコピーしてGPUですべての作業を行う必要はありません。 私はコンパイルとリンクとして2つのコンピュートシェーダ持って考えてみましょうprogram_oneとしますprogram_two。GL_SHADER_STORAGE_BUFFERによって書き込まれprogram_one、読み取られるデータを含むを持っているとしますprogram_two。次のことができますか? glUseProgram(program_one); glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer); glDispatchCompute(16, 16, 1); glUseProgram(program_two); glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer); glDispatchCompute(16, 16, 1); 最初の計算シェーダーのすべての呼び出しが、2番目の呼び出しの前に完了することが保証されていますか(読み取りと書き込みの間のデータの競合を回避するためbuffer)?そうでない場合、どのようにそれらを同期しますか?

1
「makeContextCurrent」は正確に何をしますか?
私はその機能についてかなり混乱しています。GLFWコンテキストリファレンスは次のように述べています。 この関数は、指定されたウィンドウのOpenGLまたはOpenGL ESコンテキストを呼び出し側スレッドの現在のコンテキストにします。コンテキストは、一度に1つのスレッドでのみ最新にすることができ、各スレッドは一度に1つの現在のコンテキストのみを持つことができます。 しかし、それは私にはあまり役に立ちません。メソッドの ように機能しglBind-ますか?(glBindBuffer、glBindVertexArrayなど)
12 opengl  c++ 

2
GL_STATIC_DRAW対GL_DYNAMIC_DRAW対GL_STREAM_DRAW:それは重要ですか?
OpenGLでバッファオブジェクト関数(glBufferData、glBufferSubData、そしておそらくいくつかの他)は、パラメータ持つusage可能性の高い実装歩留まりより良いパフォーマンスを助けるためのもの使用目的、のヒントとして文書による説明を。 使用法 データストアの予想される使用パターンを指定します。シンボル定数でなければなりませんGL_STREAM_DRAW、GL_STREAM_READ、GL_STREAM_COPY、GL_STATIC_DRAW、GL_STATIC_READ、GL_STATIC_COPY、GL_DYNAMIC_DRAW、GL_DYNAMIC_READ、またはGL_DYNAMIC_COPY。 [...] 使用法は、バッファオブジェクトのデータストアへのアクセス方法に関するGL実装へのヒントです。これにより、GL実装は、バッファーオブジェクトのパフォーマンスに大きな影響を与える可能性のあるよりインテリジェントな決定を行うことができます。ただし、データストアの実際の使用は制限されません。 wikiも同様にあいまいです。 結局のところ、これらはヒントにすぎません。作成後にSTATICバッファーを変更すること、またはSTREAMバッファーを変更しないことは、完全に正当なOpenGLコードです。 [...] これらは、慎重なプロファイリングでのみ回答できる質問です。そして、それでも、答えはその特定のハードウェアベンダーからの特定のドライバーバージョンに対してのみ正確になります。 結局のところ、このパラメーターはどの程度関連性がありますか?ドライバーは実際にそれを考慮に入れていますか?それを考慮に入れている場合、実際のパフォーマンスにどの程度影響を与えますか?共有するデータはありますか? 私は既存のAPIのいずれかとして実装されることを意図した薄いグラフィックAPI抽象化レイヤーを作成しました。このパラメーターを完全に無視して、公開された抽象化からそれを非表示にしたくなります。

2
導関数マップと接線空間法線マップ
一部のエンジンが接線空間法線マップの代わりに微分マップを使用していることを発見しました。 いくつか読んだ後、それは接線空間法線を置き換えるための本当に素晴らしい方法のようですが、それらを使用するいくつかの欠点がありますか?なぜ接線空間法線を使い続けるのですか? メリットとデメリットの両方を比較することは可能ですか?

1
隣接する三角形がラスタライズされたときに重複しないのはなぜですか?
次のnoobの質問についてはお詫び申し上げます。満足のいく答えがどこにも見つからないだけです... 2つの三角形で構成される単純な軸に位置合わせされた四角形をレンダリングするとき、それらの三角形が交わる対角エッジに目に見えるアーチファクトがない理由がわかりません。それらのピクセルのいくつかは両方の三角形にある必要がありますよね?したがって、私のフラグシェーダーが常に部分的に透明な色(50%の黒など)を放出する場合、結果の四角形に濃い対角線が表示されてはいけませんか? 明らかに、これがコード化する必要のある本当の問題ではないのは素晴らしいことですが、なぜそうならないのか理解できません。これが常にうまくいくのはどのGPUマジックですか?
11 opengl  gpu  rasterizer 

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