2015-07-15 1 views
0

Моя относительно простая геометрия шейдеровВекторная алгебра работает странно в геометрии шейдеров

#version 330 core 
layout (lines) in; 
layout (triangle_strip, max_vertices = 3) out; 

void main() {  
gl_Position = gl_in[0].gl_Position; 
EmitVertex(); 

gl_Position = gl_in[1].gl_Position; 
EmitVertex(); 

gl_Position = 3 * (vec4 (0, 1, 0, 1) + vec4 (0, 0, 0, 1) + vec4 (1, 1, 0, 1)); 
EmitVertex(); 

EndPrimitive(); 
} 

по какой-то причине, вычисляет третью вершину с помощью векторной интерполяции вместо векторного сложения, умножения на скаляр не работает.

ответ

0

Не уверен, что вы просите, но ваша математика кажется выключенной. Обратите внимание, что

3 * (vec4(0, 1, 0, 1) + vec4(0, 0, 0, 1) + vec4(1, 1, 0, 1)) 
== 3 * (vec4(1, 2, 0, 3)) 
== vec4(3, 6, 0, 9) 
== vec4(1/3, 2/3, 0, 1) 

Вы, вероятно, хотите это:

vec4(3 * (vec3(0, 1, 0) + vec3(0, 0, 0) + vec3 (1, 1, 0)), 1) 
== vec4(3 * vec3(1, 2, 0), 1) 
== vec4(3, 6, 0, 1) 
Смежные вопросы