Я пытаюсь добавить перевод к простому примеру рисования треугольника с помощью OpenGL ES 2.0 для Android. Я создал матрицу перевода с нулевым переводом во всех направлениях, которая должна быть матрицей идентичности. Когда я удаляю умножение из вершинного шейдера, треугольник отображается нормально. Однако, когда я пытаюсь добавить некоторое преобразование (даже идентичность), ничего не отображается. Я думаю, что это что-то об отправке матричных данных в шейдер. GL.UniformMatrix 4 принимает только float в качестве атрибутов, и я не могу преобразовать Matrix4 в массив 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);