3

私はJavaでシンプルな3Dレンダリングエンジンの作成に取り組んでいます。遠近法の投影を行うためのいくつかの異なる方法をいじって見つけましたが、部分的に作業した唯一の方法は、オブジェクトが移動された画面の中心から離れるほど奇妙なストレッチ効果があり、非常に非現実的に見えました。基本的には、3Dポイントを投影し、「カメラ」の3Dポイントと回転(おそらく?)を引数として、画面上の位置を返すメソッド(単純または複雑である必要があります)が必要です。その点を描画する必要があります。この方法がどれほど長く/短く/単純/複雑であるかは関係ありません。現代の3Dファーストパーソンシューティングゲームやその他のゲームで見られるのと同じ種類の視点を生成したいだけです。これには行列乗算を使用する必要があるかもしれません。私はしません

どんな助けでも大歓迎です:)ありがとう、もう一度-ジェームズ

更新:「ストレッチ効果」の意味を示すために、ここに私がまとめたデモのスクリーンショットをいくつか示します。ここでは、座標(-20、-20、-5)を中心とする立方体(40x40x10)が、私がまったく機能している唯一の投影方法で描画されています(以下のコード)。3つの画面には、最初のスクリーンショットの(0、0、50)にあるカメラが表示され、次にX次元に移動して、他の2つの画面の効果が表示されます。

(0,0,50)のカメラ カメラがX座標で少し動いた カメラがさらに移動しました

私が使用しているプロジェクションコード:

public static Point projectPointC(Vector3 point, Vector3 camera) {
    Vector3 a = point;
    Vector3 c = camera;
    Point b = new Point();

    b.x = (int) Math.round((a.x * c.z - c.x * a.z) / (c.z - a.z));
    b.y = (int) Math.round((a.y * c.z - c.y * a.z) / (c.z - a.z));

    return b;
}
4

1 に答える 1

1

あなたは本当に数学に固執せずにこれを行うことはできません。Webには、行列の乗算、同次座標、透視投影などを説明するリソースがたくさんあります。これは大きなトピックであり、ここで必要な計算を繰り返す意味はありません。

これがあなたの学習のための可能な出発点です:

http://en.wikipedia.org/wiki/Transformation_matrix

現在のアプローチの何が問題になっているのかを言うことはほとんど不可能ですが、オブジェクトが中心から離れるにつれて奇妙に見えるという説明に基づく1つの可能性は、視野が広すぎることです。これにより、一種の魚眼レンズの歪みが発生し、世界観の多くが画面の端に押し込まれます。

于 2011-04-08T22:17:51.287 に答える