作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在制作我的自定义 frustum
和 perspective
实现,部分原因是我将来可能需要在没有库的情况下自己做,并且我想在考试前提高计算机图形技能。
我正在看一本书,我正在将他们用 C++ 编写的示例转换为我用 Java/LWJGL 编写的示例,但是一个例子让我印象深刻,它是一个立方体的投影。
我的立方体与他们的立方体相比投影得更远(大约两倍?),这很奇怪。
这是我按列优先顺序的实现:
public static Matrix4f frustum(final float left, final float right, final float bottom, final float top, final float near, final float far) {
return new Matrix4f(new float[] {
2 * near / (right - left), 0.0f, 0.0f, 0.0f, //X column
0.0f, 2 * near / (top - bottom), 0.0f, 0.0f, //Y column
(right + left) / (right - left), (top + bottom) / (top - bottom), (near + far) / (near - far), -1.0f, //Z column
0.0f, 0.0f, 2 * near * far / (near - far), 0.0f //Z column
});
}
public static Matrix4f perspective(final float fovy, final float aspect, final float near, final float far) {
float y2 = near * (float)Math.tan(Math.toRadians(fovy));
float y1 = -y2;
float x1 = y1 * aspect;
float x2 = y2 * aspect;
return frustum(x1, x2, y1, y2, near, far);
}
我在某处看到他们使用与我相似的 y2
,但将其除以 2,但是我不想在不完全理解错误原因的情况下进行脏修复。
有人可以验证我使用的是不是perspective
矩阵,并指出我的对象看起来更远的其他原因是什么?
我的其他矩阵数学运算正确,我只是将立方体翻译成 (0f, 0f, -4f)
并验证这也是正确的。
错误实现的perspective
矩阵会导致我的对象离得更远吗?
最佳答案
关于java - 用于 fovy 和 aspect 透视的 OpenGL 投影矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21185076/
我正在制作我的自定义 frustum 和 perspective 实现,部分原因是我将来可能需要在没有库的情况下自己做,并且我想在考试前提高计算机图形技能。 我正在看一本书,我正在将他们用 C++ 编
我是一名优秀的程序员,十分优秀!