2010-12-15 6 views
0

Это мой вершина код шейдера:OpenGL ES 2.0 матрицы

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]);

Как я могу использовать более одной матрицы?

ответ

1

Вы должны умножить матрицы вместе. Сделайте это в CPU и передайте результат в виде униформы.

1

Также возможно отправить несколько матриц в шейдер. Вам нужно будет определить один (или более) дополнительный унифицированный мат4 в шейдере и привязать его к шейдерной программе в вашем приложении.

Вы можете умножить матрицы на шейдер с оператором *, так что если вы хотите, скажем, есть дополнительное вращение объекта делаются перед применением положения, вида и проекции, ваш шейдер будет выглядеть следующим образом:

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 и отправки одной матрицы, мне было бы интересно услышать об этом.

+0

+1 для рекомендаций по производительности Ответ – 2011-04-29 04:26:05