0

私はpyeuclidというライブラリを見つけましたが、3D 数学に関して私が望むことをしているようです。3D ベクター クラスと、回転、平行移動、拡大縮小などの変換が可能な 4X4 マトリックス クラスを継続します。

行列の作成は簡単です。引数を渡すだけで、行列が作成されます。

>>> m = Matrix4()
>>> m.translate(50,50,50)
Matrix4([    1.00     0.00     0.00    50.00
             0.00     1.00     0.00    50.00
             0.00     0.00     1.00    50.00
             0.00     0.00     0.00     1.00])

lbrary には 3D ベクトル クラスが付属しています。このマトリックスを使用して 3D ポイントを変換したい場合は、まずこのようにベクトル クラスを作成する必要があります。

>>> v = Vector3(100,200,300)
>>> v
Vector3(100.00, 200.00, 300.00)
>>> v.x
100
>>> v.y
200
>>> v.z
300

Matrix4() クラスには、座標を変換するメソッドが付属しており、そのように使用されます。

>>> m.transform(v)
Point3(150.00, 250.00, 350.00)

これは素晴らしいことですが、透視投影は適用されません。ライブラリには、Matrix4.new_perspective(fov_y、aspect、near、far) というメソッドが付属しています。そこに問題があります。この関数を適切に使用する方法がわかりません (m.transform(vector3) は使用可能なものを生成しません)。ドキュメントには、ベクトルや他の行列での使用方法が示されていません。 OpenGL は gluPerspective.fov_y を呼び出しますが、opengl を使用したことがないため、役に立ちません。

これはモジュールです(euclid import Vector3 、Matrix4 から)

私が望んでいないのは、いくつかのゲームエンジン/視覚化ライブラリの推奨事項、または画面に何かを描画することに傾倒しているものです.このライブラリを使用して3Dベクトル座標を2D画面座標に変換できるかどうかを知りたいだけです.どのライブラリを使用できますか???

そこに入って、苦しんでいる初心者を助けてください!:-) ご協力ありがとうございました。

4

2 に答える 2

0

このチュートリアルでは、 gluPerspective()の引数について説明します。ライブラリはそれをモデルとして記述されているため、転送する必要があります。

new_perspective()メソッドはコンストラクターのように機能することを期待します。つまり、パースペクティブ変換として設定されたMatrixを返します。次に、ベクトルにその行列を乗算することにより、世界空間の座標を遠近法で投影された座標に変換できるようになります。

于 2009-10-13T09:21:06.613 に答える
0

あなたはすでにこれを知っているかもしれないので、これが関連しているかどうかはわかりませんが、ビューマトリックスも必要です。ビュー マトリックスは、ワールド内のカメラの変換の逆を表します。マトリックス クラスには、ビュー マトリックスを作成するためのヘルパー メソッドもあり、lookAt os と同様に呼ばれることもあります。または、(仮想の)カメラを配置して向きを変えるマトリックスを手動で作成し、それを反転させます。

射影行列を世界座標に適用すると、ビュー行列がアイデンティティであり、カメラが世界の原点にあり、軸を下に向けているという暗黙の仮定を作成します。どちらの軸が投影行列に依存しますが、他のほとんどのシステムと同様に、慣例ではカメラの深度が z に沿って測定されるため、z 軸になります。正または負の方向にある可能性があるため、詳細についてはドキュメントを再度確認してください。

したがって、要約すると、モデル マトリックスをビュー マトリックスで乗算し、次に射影マトリックスで乗算する必要があります。射影行列は、ワールド座標ではなくカメラ座標で機能するように設計されています。

于 2009-10-17T12:06:05.783 に答える