Я пытаюсь сделать спрайты всегда лицом к камере, и я понял, что можно убрать вращение из матрицы вида модели, например так:
({ ссылка })
Оригинал:
| xx xy xz xw |
| yx yy yz yw |
| zx zy zz zw |
| wx wy wz ww |
Вращение удалено:
| 1 0 0 xw |
| 0 1 0 yw |
| 0 0 1 zw |
| wx wy wz ww |
Мой вершинный шейдер:
#version 450 core
layout (location = 0) in vec3 mesh;
layout (location = 1) in vec2 texCoord;
layout (location = 2) in vec3 worldPos;
layout (location = 3) in mat4 model;
uniform mat4 proj, view;
out Data
{
vec2 texCoord;
} outData;
void main()
{
outData.texCoord = texCoord;
// Remove rotation so that it always faces the camera
mat4 mv = view * model;
mv[0][0] = 1;
mv[0][1] = 0;
mv[0][2] = 0;
mv[1][0] = 0;
mv[1][1] = 1;
mv[1][2] = 0;
mv[2][0] = 0;
mv[2][1] = 0;
mv[2][2] = 1;
gl_Position = proj * mv * vec4(mesh + worldPos, 1);
}
Вращение действительно выполняется удалить, но все спрайты все еще неточно зависят от ориентации камеры. Если я не перемещаю камеру, спрайты находятся в своих правильных положениях, но если я перемещаю их, они «улетают».
Что я делаю не так?
РЕДАКТИРОВАТЬ: если я поверну камеру на 90 градусов влево, они будут в правильном положении.