Вращающиеся вершины, созданные геометрическим шейдером

Я пытаюсь сгенерировать куб из 6 точек (каждая точка представляет сторону, затем 2 дополнительных значения, чтобы сказать, если его повернуть на грань по оси x или y, ось z не нужна, потому что по умолчанию она такая) , Проблема возникает, когда я пытаюсь умножить значение gl_Position на матрицу вращения mat4, чтобы стороны куба вращались правильно. Он даже не глючит, он просто не отображает грани вообще (это происходит, когда у меня нет матриц, умножающих значения).

Вот мой геометрический шейдер:

layout(points) in;
layout(triangle_strip, max_vertices = 4) out;

in vec3 gFacePos[];

out vec2 texCoord;

mat4 xtrans = mat4( //rotate on the x axis
1.0, 0.0, 0.0, 0.0,
0.0, 0.0, -1.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 0.0, 1.0
);

mat4 ytrans = mat4( //rotate on y
0.0, 0.0, 1.0, 0.0,
0.0, 1.0, 0.0, 0.0,
-1.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 1.0
);

mat4 rtrans = (gFacePos[0].x * xtrans) + (gFacePos[0].y * ytrans); //figure out what the current point wants to rotate on

void main() { //this whole thing makes a square at the requested point
gl_Position = gl_in[0].gl_Position + vec4(-0.5, 0.5, 0.0, 0.0);
gl_Position *= rtrans; //these break it
texCoord = vec2(0.0, 0.0);
EmitVertex();
gl_Position = gl_in[0].gl_Position + vec4(0.5, 0.5, 0.0, 0.0);
gl_Position *= rtrans;
texCoord = vec2(1.0, 0.0);
EmitVertex();
gl_Position = gl_in[0].gl_Position + vec4(-0.5, -0.5, 0.0, 0.0);
gl_Position *= rtrans;
texCoord = vec2(0.0, 1.0);
EmitVertex();
gl_Position = gl_in[0].gl_Position + vec4(0.5, -0.5, 0.0, 0.0);
gl_Position *= rtrans;
texCoord = vec2(1.0, 1.0);
EmitVertex();
EndPrimitive();
}

Фрагмент и вершина довольно стандартны (вершина имеет некоторые базовые элементы камеры).

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]