我正在用Java創建一個簡單的3D渲染引擎。我搞砸了,發現了做透視投影的幾種不同方式,但是我唯一做的部分工作是奇怪的拉伸效果,它遠離屏幕中心移動,看起來很不現實。基本上,我想要一個需要投影3D點的方法(無論簡單還是複雜),以及'camera'的3D點和旋轉(可能?)作爲參數,並返回屏幕上的位置這一點應該吸取。我不在乎這種方法有多長/短/簡單/複雜。我只是希望它能夠產生您在現代3D第一人稱射擊遊戲或任何其他遊戲中看到的相同視角,並且我知道我可能不得不爲此使用矩陣乘法。我真的不想使用OpenGL或任何其他庫,因爲如果可能的話,我很想將其作爲學習練習並自行推出。Java中的透視3D投影
任何幫助,將不勝感激了很多:) 感謝,再次 - 詹姆斯
更新:爲了說明我的意思被「拉伸效應」這裏有一個演示我的一些屏幕截圖我把它放在一起。在這裏,一個以座標(-20,-20,-5)爲中心的立方體(40x40x10)是用我唯一可以使用的投影方法繪製的(代碼如下)。三個屏幕在第一張屏幕截圖中顯示相機(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;
}
謝謝,我知道我可能不得不使用各種複雜的數學。我認爲你說的正確的是,伸展問題可能是由視野問題引起的。我嘗試了一種基於維基百科3D透視投影的文章(涉及矩陣乘法和三角函數(sin和cos))的一種不同的(並且更加複雜的)方法。我還更新了幾個屏幕截圖和代碼,如果這給你任何想法。再次感謝。 – jt78 2011-04-10 16:04:56