2

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

我可以移动这些点,但只能移动 x 和 y,所以右左,上下。但是每当我更改所有点的 z 坐标时,什么都不会发生。问题是我的透视投影根本不是透视。我可以做任何事情,但是“远离”的点并没有“更小”地绘制……为什么?有什么问题?

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

所以我已经说过,投影(所以实际距离缩放)不起作用。为什么?任何人的想法?

非常感谢!

编辑

好的,这里有更多信息和代码:我使用这个投影矩阵:

投影矩阵

这里还有一些代码:

相机.java

Graphics3D.java

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

矩阵.java

4

2 回答 2

2

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

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

于 2013-11-06T18:23:34.250 回答
0

使用四元数进行投影。那就是救我一次!

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

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

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

于 2013-11-06T18:53:14.190 回答