此顶点着色器代码适用于除 Galaxy Note 2 之外的所有设备。
gl_Position = uMVPMatrix * vPosition;
如果我将矩阵乘法反转为:
gl_Position = vPosition * uMVPMatrix;
我实际上可以让事情出现。
不幸的是,反过来要求我完全重写我的转换库。
有没有人对可能导致此问题的原因有任何见解,这是设备的opengl驱动程序错误吗?
着色器代码
private final String vertexShaderCode =
// This matrix member variable provides a hook to manipulate
// the coordinates of the objects that use this vertex shader
"uniform mat4 uMVPMatrix;" +
"attribute vec4 vPosition;" +
"attribute vec2 a_TexCoordinate;" +
"varying vec2 v_TexCoordinate;" +
"void main() {" +
// the matrix must be included as a modifier of gl_Position
"v_TexCoordinate = a_TexCoordinate;" +
"gl_Position = uMVPMatrix * vPosition;" +
"}";
private final String fragmentShaderCode =
"precision mediump float;" +
"uniform sampler2D u_Texture;" +
"varying vec2 v_TexCoordinate;" +
"void main() {" +
" gl_FragColor = texture2D(u_Texture, v_TexCoordinate);" +
//" gl_FragColor = vec4(v_TexCoordinate, 0, 1);" +
"}";
答案 0 :(得分:0)
这不仅仅是一个星系2平台。
这是一个数学问题。因为glsl / hlsl都使用列主要顺序,
这是乘以MATRIX x VECTOR
的正确方法或
您可以使用
中的选项转置矩阵glUniformMatrix4fv(h_Uniforms [UNIFORMS_PROJECTION],1, GL_FALSE或GL_TRUE ,g_proxtrans.s);
显然,如果不尝试使用选项(GL_TRUE是使用转置),每个帧都可以调用此函数。