Также возможно отправить более одной матрицы в шейдер.Вам нужно будет определить один (или более) дополнительный равномерный 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;
}
Обратите внимание, что в этом случае вы должны указать идентификаторМатрица в качестве вращенияМатрица для вашего шейдера, если вы не хотите делать вращение.
Вы, вероятно, уже знаете это, но просто для уверенности: умножения матриц идут справа налево, поэтому, если вы хотитевращение вокруг оси модели, а затем переместите модель куда-нибудь, вам нужно поместить матрицу вращения справа от матрицы перевода.
Если кто-нибудь знает, как это влияет на производительность при отправке двух матриц противУмножив на CPU и отправив одну матрицу, мне было бы интересно узнать об этом.