Я сейчас начинаю использовать WebGl, и я вижу этот пример
WebGL Как это работает
Это тот же самый пример (для трасляции) в HTML-части:
gl_Position = traslation * vPosition;
, где traslation - это матрица
Теперь (просто для примера) я хочу, чтобы мой треугольник вращался и перемещался.
Я уже сделал вращение и работал тоже, но когда я объединяю две вещи не вращаются.
В моей поворотной версии у меня есть:
<script id="vertex-shader" type="x-shader/x-vertex">
attribute vec4 vPosition;
uniform float theta;
void main()
{
float s = sin( theta );
float c = cos( theta );
gl_Position.x = -s * vPosition.y + c * vPosition.x;
gl_Position.y = s * vPosition.x + c * vPosition.y;
gl_Position.z = 0.0;
gl_Position.w = 1.0;
}
</script>
Итак, я вижу, что обозначения отличаются. Потому что для поворота нужны x, y, z ax, вместо этого для traslation нет. Я просто пробую свою часть в ротации:
gl_Position.x = -s * vPosition.y + c * vPosition.x;
gl_Position.y = s * vPosition.x + c * vPosition.y;
gl_Position.z = 0.0;
gl_Position.w = 1.0;
gl_Position = traslation * vPosition;
Можно ли использовать эту запись?
в примере, который я связал, использовал этот способ, который я плохо понимаю
gl_Position = vec4((u_matrix * vec3(a_position, 1)).xy, 0, 1);
Зачем использовать vec4? Я думаю, что матрица для трансформации - лучший выбор.
Кто-нибудь может мне помочь?