問題タブ [tesselation]
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 - Go-GL でのテッセレーション
Golang OpenGL バインディングを使用して単純な三角形をテッセレートしようとしています
このライブラリは、テッセレーション シェーダーのサポートを主張していませんが、ソース コードを調べたところ、正しいバインディングを追加することはそれほど難しくないように思えました。だから私はそれを分岐して、正しい定数をgl_defs.goに追加しようとしました。
バインディングはまだうまくコンパイルされ、私のプログラムもそうです。実際に新しいバインディングを使用しようとすると、奇妙なことが起こります。実際にテッセレーション シェーダーを含めようとすると、プログラムはきれいに円を描く三角形から黒い画面に変わります。
私は OpenGL Superbible (第 6 版) に従っており、このプロジェクトにそのシェーダーを使用しているため、壊れたシェーダーを使用しているとは思いません (とにかく、エラー ログを吐き出しません)。ただし、シェーダー自体に問題がある場合は、こちらsetupProgram()
の関数で見つけることができます。
openGL バージョンを印刷すると4.4.0 NVIDIA 331.38
.
だから私の質問:
テッセレーションに go バインディングを追加してもうまくいかない理由はありますか? バインディングは非常に簡単に見えます。新しいバインディングを間違って追加していませんか?
うまくいくはずなのに、なぜうまくいかないのですか? ここで何が間違っていますか?
shader - ハル シェーダーの用語
私はシェーダープログラミングにかなり慣れていません.xna/directx9でいくつかの作業をしましたが、今はc ++/directx 11に移行したいと思います.この記事からテッセレーション用のハル/ドメインシェーダーについて読み始めましたhttp://msdn .microsoft.com/en-us/library/windows/desktop/ff476340(v=vs.85).aspx#Hull_Shader_Stageですが、一部の用語に慣れていないため、苦労しています。些細な質問かもしれませんが、パッチとは何か説明していただけますか? そしてコントロールポイント?パッチ定数フェーズとコントロール ポイント フェーズとは何ですか?
opengl - gl_PrimitiveID は Tessellation Control および Evaluation シェーダーでどのように解釈されますか?
OpenGL 仕様。言います:
変数
gl_PrimitiveID
には、入力頂点を生成した描画コマンドによって処理されたプリミティブの数が入ります。描画コマンドによって生成された最初のプリミティブには 0 の番号が付けられ、プリミティブ ID カウンターは、個々のポイント、ライン、またはトライアングル プリミティブが処理されるたびにインクリメントされます。プリミティブ再起動インデックスを使用してプリミティブ トポロジを再起動しても、プリミティブ ID カウンターには影響しません。
残念ながら、私にはそれがよくわかりません。
GL_PATCHES
頂点数 = 32で描画呼び出しを行う場合、Tesselation Control シェーダーで32個の頂点すべてがgl_PrimitiveID
= 0になりますか?
テッセレーション コントロール シェーダは引き続きパッチを出力し、パッチは単一のプリミティブです。
このパッチが Tessellation Evaluation シェーダーで三角形としてテッセレーションされる場合、n番目の頂点ごとにgl_PrimitiveID
= n / 3になると仮定するのは正しいですか?
そうでない場合は、それらの値がどうなるかを説明してください。
c++ - テッセレーション - データの保存
非三角形のポリゴンを三角形のポリゴンに転送するためにテッセレーションを使用しています。データを変数に保存し、データの保存中にテッセレーション コードを 1 回実行しようとしています。コードは、保存されたデータを描画関数で描画するために使用します。
スター ポリゴンを描画しようとしています。問題は、いくつかの三角形が表示されるが、スターが表示されないことです。データを保存すると、図面がうまくいかないのはなぜですか?
初期化コードは次のとおりです。
データコードの保存と描画モードの保存:
そして最後に drow 関数:
私が言ったように、私は星を見るべきです:
しかし、私が見ることができるのはいくつかの三角形です:
コードの何が問題になっていますか? テッセレーション コードを 1 回だけ実行するためのデータを保存できないのはなぜですか?
opengl - OpenGL 4: ステッチされたテッセレーション パッチが適合しない
問題は解決しました。修正については以下を参照してください
長方形のパッチ、テッセレーション、およびカスタムの詳細レベルを使用して、TDM の「シースケープ」( https://www.shadertoy.com/view/Ms2SD1を参照) を実装しようとしています。残念ながら、私はgl_TessLevelOuter
権利を得ることができません。パッチの間にいくつかの小さな穴があります。
エラーを強調するためにスカイボックスを赤くしました。
私はglDrawArraysInstanced
64² 10*10 パッチを描画し、頂点シェーダーのカメラ位置の周りにそれらを再配置するために使用します。
次に、テッセレーション コントロール シェーダーで詳細レベルを計算します。
エラーは TCS シェーダーのどこかにあると思いますが、テッセレーション レベルを計算する正しい方法が見つかりません。
修正
c++ - glDrawArraysInstanced は OpenGL で複数の描画呼び出しを行っていませんか?
長方形の 2 つのパッチを描画しようとしています (テッセレーション用)。それらを 0,0 から 1,1 に、その他を 1,0 から 2,1 に描画したいと考えています。
GL_PATCHES を使用してクワッドをグラフィックス パイプラインに送信しています
同次座標の私の頂点データは
そしてC++コードで
しかし、画面上に 0,0 から 1,1 までの長方形パッチが 1 つしか表示されません。2番目の長方形を描画しない理由がわかりません
私のテッセレーション評価シェーダーは
この頂点を vec4 に変換して gl_Position に渡します
opengl - OpenGL テッセレーション シェーダーで行が見つからない
私はテッセレーション シェーダーを学習しており、OpenGL wikiから次のリンクをたどりました。
http://voxels.blogspot.de/2011/09/tesselation-shader-tutorial-with-source.html
クアッド テッセレーションの例を Mac OS X に移植しましたが、外側のレベルの線の半分しかレンダリングされません。テッセレーション評価シェーダーを変更ccw
すると、残りの半分がレンダリングされますが、両方が同時にレンダリングされるわけではありません。cw
予想される(簡略化):
実際 (反時計回り):
実際 (cw):
ソースコードは次のとおりです (コンパイルできない場合はお知らせください)。
Macports (glfw @20150106) の GLFW 3.1 を使用しています。