OpenGLでNurbsSurfaceを作成したいと思います。私は40×48のコントロールポイントサイズのグリッドを使用します。また、頂点の順序を決定するためにインデックスを作成します。私は三角形の私の表面を作成した。このようにNurbsSurfaceの理解
。 誤解を避けるためです。私は持っています float[] vertices=x1,y1,z1,x2,y2,z2,x3,y3,z3.......
と float[] indices= 1,6,2,7,3,8....
今私は三角形を描きたくありません。私はサーフェスポイントを補間したいと思います。私はnurbsやB-Splinesについて考えました。
手がかりは: Nurbsアルゴリズムを決定するために、パッチごとにパッチを補間する必要があります。私の理解では、1つのパッチは、たとえば、ポイント1,6,2,7または2,7,3,8として定義されています(画像を開いてください)。
まず、頂点シェーダを使用するために頂点とインデックスを作成しました。 しかし、実際にはそれを古い方法で描くだけで十分でしょう。この場合、以下のようにIは、頂点及びインデックスを決定するであろう:
float[] vertices= v1,v2,v3... with v=x,y,z
とOpenGLで
float[] indices= 1,6,2,7,3,8....
は、使用する準備ができたNurbs機能があります。 glNewNurbsRenderer。だから私はパッチを簡単にレンダリングすることができます。 残念ながら、私はその時点でパッチを一緒に縫い合わせる方法に失敗します。私は説明を見つけたTeapot example(多分私はこれに執着するようになった)私は私のケースに解決策を転送することはできません。手伝ってくれますか?
オーケーで行くことをお勧め近代的なパイプラインと一緒に行きたいいけない場合
は、私が思うに、私は頂点とコントロールポイントを混同と信じています。三角形をグラフィックスパイプラインに送信した後、どのようにしてglNurbssurfaceを使用する必要がありますか? nurbsコマンドに従って、すべてのコントロールポイントを浮動小数点として与えますか?私はジオメトリシェーダのコードhttp://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.95.9155&rep=rep1&type=pdfを見つけただけでなく、これも使用できますか?私が理解したように、グラフィックスパイプライン内で、ジオメトリシェーダは頂点シェーダの直後にあります – TimDor
オプション1で述べたように、gluNurbSurface機能を使用できます。また、コントロールポイントから頂点の位置を計算する方法も示しています。頂点位置を取得したら、VBOで塗りつぶして、GL_TRIANGLEを使って通常の描画を行います。 –
はい、ジオメトリシェーダを使用することもできます。しかし、ジオメトリシェーダは、入力アセンブリステージがジオメトリシェーダの前後で実行されなければならないため、パフォーマンスにとって非常に悪いことに注意してください。ジオメトリシェーダは実際にテッセレーションシェーダの後に来ますが、それらを使用していない場合はジオメトリシェーダは頂点シェーダの後にあります。 –