Matrix OpenGL ES 2.0矩阵

Matrix OpenGL ES 2.0矩阵,matrix,opengl-es-2.0,Matrix,Opengl Es 2.0,这是我的顶点着色器代码: attribute vec4 position; attribute vec4 inputTextureCoordinate; varying vec2 textureCoordinate; uniform mat4 modelViewProjMatrix; void main() { gl_Position = modelViewProjMatrix * position; textureCoordinate = inputTextureCoordina

这是我的顶点着色器代码:

attribute vec4 position;
attribute vec4 inputTextureCoordinate;

varying vec2 textureCoordinate;

uniform mat4 modelViewProjMatrix;

void main()
{
    gl_Position = modelViewProjMatrix * position;
textureCoordinate = inputTextureCoordinate.xy;
}
我在这个代码中更新了制服:

glUniformMatrix4fv(统一[UNIFORM_MODELVIEWMATRIX],1,0[scaleMatrix getMatrix])

但当我执行此字符串时,上次更新结果(比例)重置:

glUniformMatrix4fv(统一[UNIFORM_MODELVIEWMATRIX],1,0[rotationMatrix getMatrix])


如何使用多个矩阵?

必须将矩阵相乘。在CPU中执行此操作,并将结果作为统一结果传递。

也可以向着色器发送多个矩阵。您必须在着色器中定义一个(或多个)额外的统一mat4,并将其绑定到应用程序中的着色器程序

您可以使用*操作符在着色器上乘以矩阵,因此,如果您希望(比如)在应用“位置”、“视图”和“投影”之前对对象进行额外旋转,则着色器将如下所示:

attribute vec4 position;
attribute vec4 inputTextureCoordinate;

varying vec2 textureCoordinate;

uniform mat4 modelViewProjMatrix;
uniform mat4 rotationMatrix; //your new matrix

void main()
{
  gl_Position = modelViewProjMatrix * rotationMatrix * position;
  textureCoordinate = inputTextureCoordinate.xy;
}
请注意,在这种情况下,如果不想进行任何旋转,则必须向着色器提供一个单位矩阵作为rotationMatrix

您可能已经知道这一点,但只是为了确保:矩阵乘法是从右到左的,因此如果要围绕模型的轴进行旋转,然后将模型移动到某个位置,则需要将旋转矩阵放置在平移矩阵的右侧


如果有人知道发送两个矩阵与在CPU上相乘并发送一个矩阵对性能的影响,我很想听听。

我认为modelViewProjMatrix*旋转矩阵对于对象的每个顶点都是常数,因此如果在CPU上计算,会提高性能