私はJavaでシンプルな3Dレンダリングエンジンの作成に取り組んでいます。遠近法の投影を行うためのいくつかの異なる方法をいじって見つけましたが、部分的に作業した唯一の方法は、オブジェクトが移動された画面の中心から離れるほど奇妙なストレッチ効果があり、非常に非現実的に見えました。基本的には、3Dポイントを投影し、「カメラ」の3Dポイントと回転(おそらく?)を引数として、画面上の位置を返すメソッド(単純または複雑である必要があります)が必要です。その点を描画する必要があります。この方法がどれほど長く/短く/単純/複雑であるかは関係ありません。現代の3Dファーストパーソンシューティングゲームやその他のゲームで見られるのと同じ種類の視点を生成したいだけです。これには行列乗算を使用する必要があるかもしれません。私はしません
どんな助けでも大歓迎です:)ありがとう、もう一度-ジェームズ
更新:「ストレッチ効果」の意味を示すために、ここに私がまとめたデモのスクリーンショットをいくつか示します。ここでは、座標(-20、-20、-5)を中心とする立方体(40x40x10)が、私がまったく機能している唯一の投影方法で描画されています(以下のコード)。3つの画面には、最初のスクリーンショットの(0、0、50)にあるカメラが表示され、次にX次元に移動して、他の2つの画面の効果が表示されます。
私が使用しているプロジェクションコード:
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;
}