2

open gl のようなライブラリを使用せずに、純粋な Java で 3D ゲームをプログラミングしようとしています (その背後にあるすべての数学と技術を理解したいため)。したがって、最初のテストは非常にうまく機能し、立方体などを移動したり回転したりできます。また、世界のカメラを表す射影行列があります。しかし、この投影は正しく機能しません。

ポイントを移動できますが、x と y についてのみなので、右、左、上、下です。しかし、すべてのポイントの z 座標を変更しても、何も起こりません。問題は、私の透視図法はまったく透視図法ではないということです。私は何でもできますが、「遠く」にあるポイントは「小さく」描かれません...なぜですか? どうしたの?

私はすでに述べた行列を操作し、次の原則を使用します。すべてのメッシュには線のリストがあり、各線には点があり、点には変数 x、y、z、1 があります。したがって、すべてを変換したいときはいつでもこれらのポイントは、必要な変換マトリックス (4x4) を各ポイント マトリックス (4x1) で乗算し、次に射影マトリックスを各ポイント マトリックスで乗算して、各ポイントの新しいポイント マトリックス (4x1) を取得し、それらを再度描画します。

だから私はすでに言った、投影、(実際の距離ズーム)は機能していません。なぜ?誰でもアイデアはありますか?

どうもありがとうございました!

編集

わかりました、ここにいくつかの詳細情報とコードがあります:私はこの射影行列を使用しています:

射影行列

そして、ここにいくつかのコードがあります:

カメラ.java

Graphics3D.java

BlockWorld.javaこれがメイン プログラムです。問題は 48 行目を参照してください。

マトリックス.java

4

2 に答える 2

0

クォータニオンを使用して投影を行います。それは私を一度救う!

http://en.wikipedia.org/wiki/四元数

Commons Math: The Apache Commons Mathematics Library を使用して数学を作成し、ソース コードをダウンロードして動作を確認します。

ここにサンプルがあります https://stackoverflow.com/a/16109249/980442

于 2013-11-06T18:53:14.190 に答える