在iPhone上使用着色器翻译方块

时间:2011-03-14 19:57:54

标签: iphone opengl-es-2.0

我正在尝试在iPhone上更新我对OpenGL ES 1.1的知识(2.0)。 iPhone的默认OpenGL ES应用程序模板绘制一个正方形并使其上下翻译并正常工作。它们的实现对着色器本身的Y值变化进行了数学运算,这几乎没用。所以,我已经将vertext着色器更改为:

uniform mat4 mvpMatrix;

attribute vec4 position;
attribute vec4 color;
varying vec4 colorVarying;


void main()
{
    gl_Position = position * mvpMatrix;
    colorVarying = color;
}

这似乎是正确和普遍的(从我在研究中看到的)。显然,我对代码进行了必要的更改,比如绑定统一,为了帮助完成数学,我得到了esUtil.h代码的源代码。在绘图方法上,我的代码如下所示:

transY += 0.075f;   

ESMatrix mvp, model, view;
esMatrixLoadIdentity(&view);
esPerspective(&view, 60.0, 320.0/480.0, 1.0, -1.0);

esMatrixLoadIdentity(&model);
esTranslate(&model, sinf(transY), 0.0f, 0.0f);

esMatrixLoadIdentity(&mvp);
esMatrixMultiply(&mvp, &model, &view);
glUniformMatrix4fv(uniforms[UNIFORM_MVPMATRIX], 1, GL_FALSE, (GLfloat *)&mvp);

这应该有效,但不幸的是,我所获得的与简单翻译完全不同。

Screenshot

我重新启动了模板几次,但我无法弄清楚我在这里做错了什么......旋转似乎按预期工作,我相信......

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

我认为你想要颠倒你的位置变换的顺序,因为你的矩阵库可能以列主要顺序工作。

gl_Position = position * mvpMatrix;

=>

gl_Position = mvpMatrix * position;

答案 1 :(得分:1)

在不知不觉中你已经改变了相机位置。在opengles中,相机(全局)和对象(本地)变换恰好相反。