2011-07-20 16 views
4

私は正確に私の質問をします.2Dオブジェクトを2Dワールド(X、Y)で動かしています。私はZ軸上で動きを偽造したいと思います。だから私は、その範囲(幅、高さ)と位置を少しだけ遊ぶことが最善だと信じています。 しかし、サイズ(w、h)のオブジェクトの新しい範囲を決定し、1メートル先からカメラ(Z軸)を移動する式は何ですか?そのような関数のパラメータは何でしょうか?Z軸上を移動する2Dスプライトを偽装する方法は?

ご協力いただきありがとうございます。

+0

スプライトを大きくまたは小さくしますか? 2D等角図を使用している場合は、動きを曲線にする必要があります。 –

答えて

6

は、2D投影(K*X/(Z+K),K*Y/(Z+K))+Z移動カメラから離れによってK単位平面の上方にカメラからオブジェクトの真(X,Y,Z)座標と表示を格納することによって、投影を使用します。

高さを変更するには、幅が(DX,DY)のスプライトの実際のサイズと同じパターンに従います。(K*DX/(Z+K),K*DY/(Z+K))は見た目の(描画された)サイズです。

これを正しく行うには、このFlipCodeの記事に従ってください。

+0

リンクありがとう! – Silouane

2

主なパラメータは、カメラまでの距離とアパチャーの角度です。

new_size = size/distanceで新しいサイズを簡単に判断できます。 距離がないオブジェクトは無限のサイズになります。 アパーチャ角度の効果を得るには、別の係数を含めることをお勧めします。f new_size = f * size/distance ここで、fは単位サイズの距離です。 ユニットサイズの距離は、画像が元のサイズで描画される距離です。 もちろん、これもゼロであってはなりません。この距離だけ、開口角度を暗黙に定義します。

私がサイズについて話すとき、私は幅と高さを意味するので、数式は両方に適用されます。

私の説明に従うことを願っています。

+0

はい、私はあなたの答えをありがとう、何を意味するのか理解しています。 「ユニットサイズの距離」は何らかの方法で計算できると思いますか?カメラの特性(fov、比率)と同様です。 – Silouane

+0

これをさらに改善するには、new_size = f * size /(f + distance)を実行します。距離0でのサイズは1になり、距離fでのサイズは元のものの半分になります。 – tehvan

+0

これは距離をオフセットし、カメラの後ろの "ゼロ点"を移動します。 – Nobody

0

幅と高さは、視聴者からの距離に反比例します。 2倍の距離にあると、サイズは半分になります。したがって、ビューアからの「自然な」距離がAで、新しい位置がA + Zの場合、元の幅と高さにA /(A + Z)を掛けることになります。これは小さな負のZ値に対しても機能します(オブジェクトはビューアに近く、より大きく表示されます)。

関連する問題