java - 3D 投影不起作用

标签 java matrix 3d transformation

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

我可以移动这些点,但只能移动 x 和 y 左右,所以从左到右,从上到下。 但每当我改变所有点的 z 坐标时,什么也没有发生。 问题是我的透视投影根本不是透视。我可以做任何事情,但是“远”的点不会被画“更小”......为什么?有什么问题吗?

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

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

非常感谢!

编辑

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

projectionmatrix

这里还有一些代码:

Camera.java

Graphics3D.java

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

Matrix.java

最佳答案

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

参见

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

关于java - 3D 投影不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19696023/

相关文章:

java - Android Studio - 只有一个 fragment/没有标题的设置 Activity

java - 使用 MimeMultipart(附件文件 + 文本)和 JBoss 6.3 发送 MimeMessage

python - 如何使用带有约束和动态函数的 Scipy minimize

Matlab:将矩阵的行乘以向量元素

java - Unity3D 四元数 libGDX 等效项

java - 元素 "mvc"的前缀 "mvc:resources"未绑定(bind)

r - 如何从 R 中的 kmeans 获取簇距离空间?

javascript - Three.js动画混合器无法播放?

3d - Hadoop 和 3d 图像渲染

java - 如何获取用户界面:param value in Javabean