我正嘗試在iPhone上將我的OpenGL ES 1.1的知識更新到2.0。 iPhone的默認OpenGL ES應用程序模板繪製一個正方形,並使其上下翻轉並正常工作。他們的實現對着色器本身的Y值變化進行了數學計算,這幾乎沒有用處。所以,我已經改變了vertext着色器:在iPhone上使用着色器翻譯正方形
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);
這應該是工作,但不幸的是,我所得到的是一個簡單的翻譯完全不同。
我已經重新啓動模板了幾次,但我不能找出我在做什麼錯在這裏...旋轉似乎是按預期工作,我相信...
任何幫助,將不勝感激。
是的,如果你在OpenGL的正常配置模型視圖矩陣餵養,我相信你需要把它放在你的頂點着色器的乘法中。至少,這就是我所有着色器的工作方式,就像這個示例應用程序中的那些:http://www.sunsetlakesoftware.com/sites/default/files/ShaderExamples.zip – 2011-03-15 14:40:56
謝謝,就是這樣!我現在需要弄清楚這裏的確切數學問題,以及爲什麼有些東西使用列而其他東西不使用。我假設乘法(即使在矩陣上)是可交換的。 – 2011-03-15 15:00:08
線性代數文本將覆蓋這些規則,但您也可以獲得3D數學入門書,它將爲您提煉出線性代數的相關部分。如果一個文本使用'行順序',你會像v'= vM那樣轉換矩陣,'列順序'是v'= Mv。 – LazyBitStream 2011-03-15 17:47:47