OpenGL ES 2.0 матрицы - PullRequest
       21

OpenGL ES 2.0 матрицы

0 голосов
/ 15 декабря 2010

Это мой код вершинного шейдера:

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, [revolutionMatrix getMatrix]);

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

Ответы [ 2 ]

1 голос
/ 22 декабря 2010

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

1 голос
/ 15 декабря 2010

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

...