我正在尝试在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);
这应该有效,但不幸的是,我所获得的与简单翻译完全不同。
我重新启动了模板几次,但我无法弄清楚我在这里做错了什么......旋转似乎按预期工作,我相信......
任何帮助都将不胜感激。
答案 0 :(得分:3)
我认为你想要颠倒你的位置变换的顺序,因为你的矩阵库可能以列主要顺序工作。
gl_Position = position * mvpMatrix;
=>
gl_Position = mvpMatrix * position;
答案 1 :(得分:1)
在不知不觉中你已经改变了相机位置。在opengles中,相机(全局)和对象(本地)变换恰好相反。