6

次のリソースに基づいて、GPUで解像度に依存しない3次ベジェレンダリングを機能させようとしています。

GPUGems3第25章

カービーブルース

プログラム可能なグラフィックスハードウェアを使用した解像度に依存しない曲線レンダリング

しかし、Curvy Blues Webサイトで述べられているように、他の2つのWebサイトのドキュメントにはエラーがあります。Curvy Bluesからコメントを見るように言われましたが、コメントが見つからないようです。どこかの別のフォーラムが私に同じことを教えてくれます、私はそのフォーラムが何であったかを覚えていません。しかし、間違いなく私が見逃しているものがあります。

とにかく、私は何が起こっているのかを再現しようとしましたが、変換された座標の組み合わせの行列式から判別式が計算される部分を理解できません。

したがって、元の座標があり、それらを4x4行列に貼り付け、この行列をM3行列で変換して、C行列を取得します。次に、C行列の座標から3x3行列を作成し、行列式を計算します。これを組み合わせて、根を見つけるのに役立つ2次方程式のa、b、cを作成できます。

問題は、私がそれをまさにそのように行うとき、判別式が正しくないということです。曲がりくねった座標(対称なものですが、正しい曲がりくねったもの)を明確に入力しましたが、それは尖点であると述べています。wxMaximaを使用して自分で計算し、1次と2次を導出してから外積を計算し、2次方程式に単純化すると、同じ座標に配置すると、その方程式の判別式は正しいように見えます。コードに自分の判別式を使用して蛇行しているかどうかを判断させたが、行列式を使用してさらにk、l、mテクスチャ座標を計算すると、結果も正しくありません。したがって、行列式にエラーがあるに違いないと思います。

誰かが私がこれを正しくするのを手伝ってくれる?

4

2 に答える 2

2

本 GPU Gem 3 にはここに誤りがあり、nVidia の Web サイトのページにも誤りがあります。

a3 = b2 * (b1 x b1)

それは実際にa3 = b2 * (b1 x b0)です。

このアルゴリズムには他にも問題があります。計算中に浮動小数点の exp 部分がオーバーフローするため、慎重にコードに正規化操作を追加する必要があります。

于 2015-06-30T02:00:28.933 に答える
2

なんとか解決できたと思います。結果はほぼ完璧です (反転することもありますが、それはおそらく別の問題です)。

これは私が間違っていた場所であり、これを検索するために無駄にしてきた時間を他の人が無駄にしないようにすることができれば幸いです.

私のコードは blinn-phong ドキュメントに基づいています。私は座標b0、b1、b2、b3を持っていました。以前は aw で 2D 座標として表示していましたが、この表示に変更したところ問題が解決しました。それらをz=0の3次元座標として見て、同次4次元座標に変換(w=1)することで解決にたどり着きました。

C 行列を計算することによって: C = M3 * B、これらの新しい座標を取得しました。行列式 d0、d1、d2、d3 を計算するとき、C 行列の列 0 と 1 から x、y 座標を取得し、列 2 から w 係数を取得していました。間違っています! 考えてみると、座標は実際には 3D 座標なので、w ファクターについては、列 3 を取り、列 2 を無視する必要があります。

これにより正しい行列式が得られ、処理している曲線のタイプを分類できる判別式が得られました。

しかし、注意してください、私の検索をさらに長くしたのは、目に見えて蛇紋岩である場合、判別式の結果は常に > 0 (蛇紋岩) になるはずであると仮定したという事実でした。しかし、常にそうであるとは限りません。数学的に完全な spentine (座標は、平均が正確に中央になるように設定されています) を持っている場合、行列式はそれがカスプ (行列式 = 0) であると言います。この結果は間違っていると思っていましたが、そうではありません。だから、これにだまされてはいけません。

于 2013-03-24T13:55:51.590 に答える