[英]How to implement simple 2D translation on OpenGL ES 2.0 using OpenTK for android
我正在嘗試將翻譯添加到使用OpenGL ES 2.0 for Android繪制三角形的簡單示例中。 我創建的翻譯矩陣在所有方向上的平移均為0,應為單位矩陣。 當我從頂點着色器中刪除乘法時,三角形呈現良好。 但是,當我嘗試添加一些轉換(甚至身份)時,什么也沒有呈現。 我認為這與將矩陣數據發送到着色器有關。 GL.UniformMatrix 4僅將float作為屬性,我無法將Matrix4轉換為float數組。 最后,我拼命為單位矩陣創建了float數組,並使用GL.UniformMAtrix4傳遞了它,但是什么也沒有渲染。
有經驗的人可以幫助我嗎?
Matrix4 uvMat = Matrix4.CreateTranslation(0.0f,0.0f,0.0f);
// Vertex and fragment shaders
string vertexShaderSrc = "attribute vec4 vPosition; \n" +
"uniform mat4 uvMat; \n" +
"void main() \n" +
"{ \n" +
" gl_Position = uvMat*vPosition; \n" +
"} \n";
string fragmentShaderSrc = "precision mediump float;\n" +
"void main() \n" +
"{ \n" +
" gl_FragColor = vec4 (1.0, 0.0, 0.0, 1.0); \n" +
"} \n";
int vertexShader = LoadShader (All.VertexShader, vertexShaderSrc );
int fragmentShader = LoadShader (All.FragmentShader, fragmentShaderSrc );
program = GL.CreateProgram();
if (program == 0)
throw new InvalidOperationException ("Unable to create program");
GL.AttachShader (program, vertexShader);
GL.AttachShader (program, fragmentShader);
GL.BindAttribLocation (program, 0, "vPosition");
GL.LinkProgram (program);
float[] matTrans = new float[] {1,0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1};
int uniMatLoc = GL.GetUniformLocation (program, "uvMat");
Console.WriteLine (uniMatLoc.ToString());
GL.UniformMatrix4 (uniMatLoc, 16, false, matTrans);
UniformMatrix4
的第二個參數是矩陣的數量,而不是矩陣中元素的數量。 因此,呼叫應為:
GL.UniformMatrix4(uniMatLoc, 1, false, matTrans);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.