Я застрял в геометрических шейдерах в OpenGL - программировании на C++. Я хочу создать простой куб, повторяя 6 раз, рисуя одну повернутую стену. Вот мой вершинный шейдер (Everyting имеет #Version 330 ядра в преамбуле):C++, OpenGL - шейдер геометрии
uniform mat4 MVP;
uniform mat4 ROT;
layout(location=0) in vec3 vertPos;
void main(){
vec4 pos=(MVP*ROT*vec4(vertPos,1));
pos.x/=1.5;
pos.y/=1.5;
gl_Position=pos;
}
Теперь геометрический шейдер:
layout (triangles) in;
layout (triangle_strip, max_vertices = 6) out;
out vec4 pos;
void main(void)
{
pos=vec4(1,1,1,1);
for (int i = 0; i < 3; i++)
{
vec4 offset=vec4(i/2.,0,0,0);
gl_Position = gl_in[i].gl_Position+offset;
EmitVertex();
}
EndPrimitive();
}
А теперь пиксельный шейдер:
uniform mat4 MVP;
in vec4 pos;
out vec3 color;
void main(){
vec3 light=(MVP*vec4(0,0,0,1)).xyz;
vec3 dd=pos.xyz-light;
float cosTheta=length(dd)*length(dd);
color=vec3(1,0,0);
}
Ну, есть некоторый барахло, я хотел также поместить затенение в мой куб, но у меня проблема с отправкой координат. Основная проблема - здесь я получаю свой масштабный квадрат (по MVP-матрице), я могу даже повернуть его с помощью базового интерфейса (матрица ROT), но когда я раскомментирую свою линию «+ смещение», я получаю некоторый беспорядок. Что делать, чтобы очистить 6-кратное повторение?
ничего личного, но ПОЖАЛУЙСТА, НЕЗАВИСИМО ОТ ВАШЕГО КОДА – MightyPork
Lol, даже мои друзья так говорят. У меня есть специальный скрипт, чтобы УДАЛИТЬ все отступы в моем коде, мне нравится его. –
На самом деле? Это все * но * чисто! – MightyPork