3D投影不起作用

时间:2013-10-30 23:53:57

标签: java matrix 3d transformation

我试图用纯java编程3D游戏,没有任何像开放gl这样的库(因为我想了解它背后的所有数学和技术)。 所以,第一次测试工作得很好,我可以四处移动并旋转立方体和类似的东西,我有一个投影矩阵来代表世界的相机。 但是这个投影无法正常工作。

我可以移动点,但只有x和y左右,所以右上角,上下。 但每当我改变所有点的z坐标时,都没有任何反应。 事情是我的观点投影根本不是透视。我可以做任何事情,但“遥远”的点不是“更小”......为什么?问题是什么?

我正在处理我已经说过的矩阵,并使用以下原理:每个网格都有一个行列表,每行都有点,一个点有变量x,y,z,1。所以,每当我想要转换所有这些点我只需将所需的变换矩阵(4x4)与每个点矩阵(4x1)相乘,然后将投影矩阵与每个点矩阵相乘,得到每个点的新点矩阵(4x1)并再次绘制它们。

所以我已经说过,投影(实际距离变焦)不起作用。为什么?有人有想法吗?

非常感谢!

修改

好的,继承人是一些更多的信息和代码: 我正在使用这个投影矩阵:

projectionmatrix

这里还有一些代码:

Camera.java

Graphics3D.java

BlockWorld.java这是主要的程序,问题见第48行

Matrix.java

2 个答案:

答案 0 :(得分:2)

您需要使用透视投影矩阵而不仅仅是投影矩阵来转换点以增加深度

http://www.scratchapixel.com/lessons/3d-advanced-lessons/perspective-and-orthographic-projection-matrix/perspective-projection-matrix/

答案 1 :(得分:0)

使用四元数进行投影。 多数民众赞成保存我一次!

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

我使用Commons Math:Apache Commons数学库来计算数学,下载源代码以检查它是如何工作的。

我在这里有一个示例https://stackoverflow.com/a/16109249/980442