0

私は3D透視投影式を使用しています:

sx = wx*scale/wz
sy = wy*scale/wz

それは物事をうまく投影しますが、たとえば、立方体は直角柱のように見え、実際に引き伸ばされます.

次のようになります。

ここに画像の説明を入力

私はそれについて調査を行い、stackoverflow の他のページを見ましたが、なぜそれが拡張されているのかよくわかりません。

また、z 値を 2 または 4 で割る、または任意の値を使用してより立方体に見えるようにするなど、他の代替手段も試しましたが、より複雑なオブジェクトの場合、実際にはうまくいきません。

どんな助けでも大歓迎です。

ありがとう。

4

2 に答える 2

2

あなたの投影は極端な広角ビューのように見えます。これは「正しい」パースペクティブプロジェクションです。数式は正しいものですが、重要なのはscale変数/定数です。

の値scaleは一般的に

screen_width_in_pixels * focal_length

ここfocal_lengthで、は画面からの視聴者の目からの距離と画面の幅の比率です。もちろん、誰かがモニターの前にどれだけ近づくかを制御することはできないので、あなたは推測します。通常、1.0〜1.5が適切な範囲です。

その値をより広角でないものに変更すると、副作用として、「カメラ」がオブジェクトに「ズームイン」し、おそらく画面がいっぱいになります。そのため、オブジェクトをカメラから遠ざけることで補正する必要があります。

(もちろん)この主題に関する素晴らしい長いウィキペディアの記事があります

于 2012-04-28T04:58:15.340 に答える
0

html5のキャンバスにボックスをレンダリングしようとしたときに同じ「問題」が発生しました。引き伸ばされたボックスが「通常」に見えるようにしたのは、カメラの位置のzカメラフォーミュラ値を私が使用した-50ではなく-250に設定することでした。次に、x、y座標の計算に使用する式に応じて、視聴者のz位置(ez)を調整できます。

ビューア

または、記録面から入射瞳までの距離(rz)を使用して、オブジェクトにズームします。

式

半年前に質問されたことは知っていますが、答えが見つからなかったので、自分の経験を共有することにしました。うまくいけば、それは誰かを助けます。

于 2012-12-28T09:41:50.043 に答える