2

我正在尝试在 iPhone 上更新我对 OpenGL ES 1.1 到 2.0 的(少量)知识。iPhone 的默认 OpenGL ES 应用程序模板会绘制一个正方形,并使其上下平移并正常工作。他们的实现对着色器本身的 Y 值变化进行了数学运算,这几乎没有用。因此,我将顶点着色器更改为:

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);

这应该可行,但不幸的是,我得到的与简单的翻译完全不同。

截屏

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

任何帮助,将不胜感激。

4

2 回答 2

3

我认为您想反转位置变换的顺序,因为您的矩阵库可能以列优先顺序工作。

gl_Position = position * mvpMatrix;

=>

gl_Position = mvpMatrix * position;
于 2011-03-14T23:04:08.083 回答
1

在不知不觉中您已经更改了相机位置。在 opengles 中,相机(全局)和对象(局部)变换只是逆向的。

于 2012-09-01T10:54:48.557 回答