【发布时间】:2012-02-25 23:01:28
【问题描述】:
我正在实现一个渲染器来处理每个翻译-/视图-/模型-/投影-矩阵(我不使用 glRotate/glTranslate 等)。
我已经在正 z 轴上放置了几个蓝色对象,在正 x 轴上放置了一些红色对象(所以我应该能够看到我左边的红色对象和前面使用我的身份旋转的蓝色对象相机)。是右手方向吧?
问题是我必须绕 y 轴转动 180 度才能看到我的对象。它显示为身份旋转正在查看 -z。
我通过取相机矩阵 [Rot Tr] 的逆来构造我的视图矩阵,然后我将它按列放入数组中并将其传递给我的着色器。
对于对象(世界矩阵),我只是将矩阵 [Rot Tr] 按列传递给着色器。我应该否定翻译吗?
投影矩阵现在是在顶点着色器中构建的,因为我正在努力。正如你在下面看到的那样,我正在做
position = proj*view*model*gl_Vertex;
目前我使用 gl_Vertex(我在加载单位矩阵作为我的场景对象后使用 glutSolidCube)。
uniform mat4 view;
uniform mat4 model;
varying vec4 pos;
void main()
{
pos = gl_Vertex;
float aspect = 1.0;
float fovy = 1.5;
float f = 1.0 / tan(fovy * 0.5);
float near = 1.0;
float far = 100.0;
float tt = 1.0 / (near - far);
mat4 proj = mat4(f/aspect, 0.0, 0.0, 0.0,
0.0, f, 0.0, 0.0,
0.0, 0.0, (near+far)*tt, -1.0,
0.0, 0.0, 2.0*near*far*tt, 0.0);
gl_Position = proj * view * model * pos;
}
在我的片段着色器中,我设置了 color = pos 以便我可以看到轴的颜色并且颜色看起来是正确的。我认为对象已正确放置在场景中,但使用恒等矩阵作为旋转,我仍在寻找相反的方向。
我可能错过了什么?我是否以正确的方式传递了正确的矩阵?
【问题讨论】:
标签: opengl view model matrix axis