我正在用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