2

OpenGL または GLUT を使用して、モデル ビュー マトリックスから関連するテクスチャ マトリックスに点を投影する方法はありますか? そうでない場合、これを実現する一般的に使用されるライブラリはありますか? 3D 空間でのレイ キャストに従って、オブジェクトのテクスチャを変更したいと考えています。

最も単純なケースは次のとおりです。

  1. クワッドと交差するレイがキャストされ、単一のテクスチャでマッピングされます。
  2. 交点は、x 軸と y 軸の [0.0,1.0] の間にクランプされたテクスチャ空間の値に変換されます。
  3. 結果のテクスチャ ポイントの丸められた値を中心とする 3x3 のピクセル パッチは、アルファ値 0 に設定されます (または、目的の効果に便利な別の RGBA 値)。

ここで説明するために、球を使用したより複雑なバージョンの質問を示します。ピンクのボックスは、置き換えられたピクセルを示しています。

OpenGL でマッピングするテクスチャ ポイントを指定しただけで、ピクセルが球体にどのように投影されるかは実際にはわかりません。基本的に、その射影の逆にする必要がありますが、特に球体や任意の凸包などのより複雑な形状では、その計算を行う方法がよくわかりません。光線が交差している形状を構成する平面多角形を何らかの方法で見つけることができると思います。そこから、四角形または三角形の逆投影は自明です。

いくつかの方程式、記事、および/またはサンプルコードがあればいいでしょう。 光線を外部空間に投影する

4

2 に答える 2

1

やろうとしていることを達成する方法がいくつかあります。

  1. モデル ビューと射影変換行列の乗算を自分で実行して (または、古いスタイルの OpenGL を使用している場合は を呼び出して)、ワールド座標点を正規化されたデバイス座標gluProject(NDC) に射影し、透視分割ステップを実行します。ゼロの深さ座標を使用する場合、これは画像平面で光線が交差することに対応します。結果の座標を 2 で割り、.5 だけシフトすることによって、 NDC ( xおよびyの範囲 [-1,1] にある) からテクスチャ空間にマッピングする必要がある他の唯一の修正。

  2. レイ トレーシングをすべてスキップし、テクスチャをフレーム バッファ アタッチメントとしてフレーム バッファ オブジェクトにバインドしてから、必要に応じて交差点付近の色を変更する大きなポイント (またはスプライト) をレンダリングします。同じモデル ビューと射影行列を使用でき、(おそらく) ビューポートを更新してテクスチャ解像度に一致させるだけで済みます。

于 2013-06-23T18:50:48.983 に答える
0

そこで、少し複雑な解決策を見つけましたが、うまくいきます。

複雑なジオメトリの場合、交差した四角形または三角形を特定し、これを平面として使用する必要があります。クワッドは(明らかに)平面でなければなりません。

寸法が 1x1x0 の単位マトリックスに平面を描画し、モデル ジオメトリと同一のポイントにテクスチャをマップします。

  1. 平面を変換し、各変換行列の逆行列をスタックに保存します
  2. 平面が交差する点を見つける
  3. 単位行列に戻るまで、逆行列スタックを使用してこの点を変換します (深さはありません(
  4. この点にピクセル数を掛けて丸めることにより、この点を 1x1 空間からピクセル空間に変換します。または、ここで 2D 結合ロジックを開始します。
于 2013-06-23T21:41:57.997 に答える