2

直交投影の観点からテクスチャ化された四角形をレンダリングしており、UV と四角形の 4 つのポイント (左上、右上、左下、右下) の頂点位置を変更して「深さ」をシミュレートしたいと考えています。

左上隅と右下隅の y 位置を同じにすると、線形の「ゆがみ」が得られず、上部の三角形 (クワッドを構成する) を覆うテクスチャが歪んでいるように見えることがわかりました。下の三角形のテクスチャは正常に見えますが、押しつぶされます。

四角形の 4 つのポイントのいずれかである UV を変更できます (ただし、2D 空間でのみ、いずれにせよ正射投影であるため、3D 空間はあまり重要ではありません)。基本的に、私は正投影で2次元クワッドの遠近法をシミュレートしようとしていますが、何かアイデアはありますか? 数学的にも可能/実行可能ですか?

理想的には、関数を介して x/y 回転と仮想 z '位置' (z 深さをシミュレートする) を設定し、位置/UV を内部的に計算して 3D 効果を作成することができる状況です。 . クワッドの各コーナーに一連の 2D 変換を適用して深さをシミュレートできる場合、これはすべて数学的であるように思われますが、それを実現する方法がわかりません。三角法か何かが必要だと思います。数学を処理しようとしていますが、あまり進歩していません。

これが私が意味することです:

代替テキスト

左上はちょうどカード、中央は X 度の y 回転を持つカード、一番右は異なる角度の x と y 回転を持つカードです。

4

1 に答える 1

4

コーナーの 2D 座標を計算するには、3D で座標を選択し、3D 透視方程式を適用するだけです。

オリジナルカードコーナー (x,y,z)

(行列乗算による)回転を適用すると、(x'、y'、z')が得られます

透視投影を適用します (カメラの原点、方向、および視野を選択します)。最も単純なケースでは、次のようになります。

  • x'' = x' / z
  • y'' = y' / z

より大きな問題は、ピクセル座標からテクスチャ座標を取得するために使用されるテクスチャリングです。

正しい方法は、次の形式のホモグラフィック変換を使用することです。

  • U(x,y) = ( ax + cy + e ) / (gx + hy + 1)
  • V(x,y) = (bx + dy + f) / (gx + hy + 1)

これは、平面に適用された透視方程式の結果です。

a,b,c,d,e,f,g,h は次のように計算されます ( with U,V in [0..1] ) :

  • U(上'',左'') = (0,0)
  • U(上''、右'') = (0,1)
  • U(下'',左'') = (1,0)
  • U(下'',右'') = (1,1)

しかし、あなたの 2D レンダリング フレームワークはおそらく代わりに双一次補間を使用します:

  • U( x , y ) = a + b * x + c * y + d * ( x * y )
  • V( x , y ) = e + f * x + g * y + h * ( x * y )

その場合、見栄えの悪い結果が得られます。

レンダラーがクワッドを 2 つの三角形に分割すると、さらに悪化します。

したがって、次の 2 つのオプションしか表示されません。

  • 3D レンダラーを使用する
  • リアルタイム アニメーションではなく少数の画像のみが必要な場合は、テクスチャリングを自分で計算してください。
于 2010-04-07T11:37:29.873 に答える