2017-01-16 7 views
2

Скажу, понятие, чтобы создать карту, состоящую из кубов с неоновой эстетикой, такие как: ExampleКак сделать эффект ретро/неона/свечения, используя шейдеры?

В настоящее время у меня есть этот вершинный шейдер:

// Uniforms 
uniform mat4 u_projection; 
uniform mat4 u_view; 
uniform mat4 u_model; 

// Vertex atributes 
in vec3 a_position; 
in vec3 a_normal; 
in vec2 a_texture; 

vec3 u_light_direction = vec3(1.0, 2.0, 3.0); 

// Vertex shader outputs 
out vec2 v_texture; 
out float v_intensity; 

void main() 
{ 
    vec3 normal = normalize((u_model * vec4(a_normal, 0.0)).xyz); 
    vec3 light_dir = normalize(u_light_direction); 
    v_intensity = max(0.0, dot(normal, light_dir)); 
    v_texture = a_texture; 
    gl_Position = u_projection * u_view * u_model * vec4(a_position, 1.0); 
} 

И этот пиксельный шейдер:

in float v_intensity; 
in vec2 v_texture; 

uniform sampler2D u_texture; 

out vec4 fragColor; 

void main() 
{ 
    fragColor = texture(u_texture, v_texture) * vec4(v_intensity, v_intensity, v_intensity, 1.0); 
} 

Как я могу использовать это для создания неонового эффекта, например, в примере для 3D-кубов? Кубы - это просто модели с сеткой/материалом. Единственное изменение - установить цвет материала черным, а контуры - ярко-розовым или синим (возможно, с сиянием).

Любая помощь приветствуется. :)

ответ

2

Обычно вы реализуете это как эффект последующей обработки. Сначала визуализируйте с яркими насыщенными цветами в текстуру, затем примените эффект цветения при рисовании этой текстуры на экране.

+0

Имеет смысл. Я мог бы создать черную текстуру с яркими очертаниями и отобразить ее, а также добавить эффект цветения с помощью шейдера. Думаю, это было бы более простым решением, чем все это в шейдере. Я попробую это сейчас, но любые другие предложения или примеры были бы хороши. – NightShift

+1

Существует хорошая статья о цветении в реальном времени в GPU Gems: http://http.developer.nvidia.com/GPUGems/gpugems_ch21.html. Код устарел, но теория может быть полезна. – BDL

+0

Сохраните скорость заполнения и визуализируйте линии LINES или треугольники, представляющие линии. –