我有这个 obj 文件(也尝试过其他更多的 3d 模型):
Triangle
v 0 0 0
v 0 0.5 0
v 1 0 0
f 1 2 3
我使用以下顶点着色器:
uniform mat4 projection;
attribute vec4 pos;
void main(void)
{
gl_Position = projection* pos;
}
超级简单。如果我只用 uniform_Projection = 单位矩阵运行它,我会看到一个三角形,向上 0.5 和向右 1。似乎是对的。
现在,我想做的是使用相机 ala gluLookAt 以及一些透视投影。这就是我感到困惑的地方。
在世界坐标中,三角形位于上面的顶点位置。因此,让我们选择一只眼睛和一个观察点。眼睛 = (0,0,3),看 = (0,0,0)。基本上我们希望眼睛位于原点。所以我们必须将世界原点移动到眼睛位置(即使它是单位矩阵也可以这样做):
| 1 0 0 0 | | 1 0 0 0 | | 1 0 0 0 |
| 0 1 0 0 | * | 0 1 0 0 | = | 0 1 0 0 |
| 0 0 1 -3| | 0 0 1 0 | | 0 0 1 -3|
| 0 0 0 1 | | 0 0 0 1 | | 0 0 0 1 |
砰,三角形消失了。我所做的只是沿着原始相机的方向移动世界。eye = (0,0,3) 仍然消失.. 超级困惑:SI 已关闭任何形式的剔除等。有人可以向我解释这是如何工作的吗?
因为后来我的想法是这样的:
v = normalize(lookat-eye)
r = normalize(crossProduct(v, up));
u = crossProduct(r, v);
viewMatrix = |r1 r2 r3 -eye1|
|u1 u2 u3 -eye1|
|v1 v2 v3 -eye1|
|0 0 0 1 |
作为一个投影矩阵,我在想(从我的讲座中):
projMatrix = |1 0 0 0|
|0 1 0 0|
|0 0 1 0|
|0 0 -1/d 1|
或者这个链接: gluPerspective 在 OpenGL 3.1 中被删除了,有什么替代品吗? 不能说我现在完全理解其中的任何一个。
对我来说,我似乎不了解坐标系如何工作的一些关键部分。