【发布时间】:2015-04-07 03:28:19
【问题描述】:
我正在尝试使用正交投影来进行 GUI 渲染。当我仅使用常规变换矩阵绘制网格时,我得到了我所期望的结果,但是当我使用正交投影时,我什么也得不到。我的透视投影也很好用。我的正交矩阵:
public Matrix4f initOrthographic(float left, float right, float bottom, float top, float near, float far)
{
m[0][0] = 2.0f / (right - left); m[0][1] = 0; m[0][2] = 0; m[0][3] = (left + right) / (left - right);
m[1][0] = 0; m[1][1] = 2.0f / (top - bottom); m[1][2] = 0; m[1][3] = (bottom + top) / (bottom - top);
m[2][0] = 0; m[2][1] = 0; m[2][2] = 2.0f / (near - far); m[2][3] = (far + near) / (far - near);
m[3][0] = 0; m[3][1] = 0; m[3][2] = 0; m[3][3] = 1;
return this;
}
我一辈子都无法找出问题所在。我将此矩阵乘以常规变换,然后将该矩阵乘以着色器中的顶点位置。有任何想法吗?如果需要,我可以发布更多代码/信息。
我想我刚刚发现了问题。我的顶部为 0,底部为 720,当我将这些值翻转为顶部 720 和底部 0 时,它工作得很好。唯一的事情是我希望左上角是 (0, 0)。有什么办法可以做到这一点,还是我被左下角的 (0, 0) 困住了?
【问题讨论】:
-
看起来你的矩阵是行主要的,而列主要的矩阵通常用于 OpenGL。
-
我所有的其他矩阵都是以这种方式完成的,它们工作得很好。抱歉,如果我不完全理解,我真的不知道我在做矩阵方面的工作。
-
您是否考虑过检查您的视口设置?
-
您是否以正确的顺序使用参数调用它?检查你没有传入左、上、右、下
-
我检查了一下,通话顺序正确。