Parent

RubyGL::ShaderGenerator

Public Class Methods

color_shader() click to toggle source
# File lib/rubygl/shader.rb, line 136
def self.color_shader()
    Shader.new('''
        #version 130
        in vec3 position;
        uniform mat4 modelview;
        uniform mat4 perspective;
        
        void main() {
            gl_Position = perspective * modelView * vec4(position, 1);
        }
    ''','''
        #version 130
        out vec4 fColor;
        uniform vec4 color;
        
        void main() {
            fColor = color;
        }
    ''')
end
faceted_shader() click to toggle source
# File lib/rubygl/shader.rb, line 104
def self.faceted_shader()
    Shader.new('''
        #version 130
        in vec3 position;
        out vec3 vPosition;
        uniform mat4 modelview;
        uniform mat4 perspective;
        
        void main() {
            vec4 hPosition = modelview * vec4(position, 1);
            vPosition = hPosition.xyz;
            
            gl_Position = perspective * hPosition;
        }
    ''','''
        #version 130
        in vec3 vPosition;
        out vec4 fColor;
        uniform vec4 color;
        uniform vec3 light;
        
        void main() {
            vec3 dx = dFdy(vPosition);
            vec3 dy = dFdx(vPosition);
            vec3 triangle_norm = normalize(cross(dx, dy));
            float factor = clamp(dot(triangle_norm, light), 0, 1);
            
            fColor = vec4(color.xyz * factor, color.w);
        }
    ''')
end
phong_shader() click to toggle source
# File lib/rubygl/shader.rb, line 157
def self.phong_shader()
    Shader.new('''
        #version 130
        in vec3 position;
        in vec3 normal;
        out vec3 vPosition;
        out vec3 vNormal;
        uniform mat4 modelview;
        uniform mat4 perspective;
        
        void main() {
            vec4 hPosition = modelview * vec4(position, 1);
            vPosition = hPosition.xyz;
            vNormal = (modelview * vec4(normal, 1)).xyz;
            
            gl_Position = perspective * hPosition;
        }
    ''','''
        #version 130
        in vec3 vPosition;
        in vec3 vNormal;
        out vec4 fColor;
        uniform vec4 color;
        uniform vec3 light;
        
        float PhongIntensity(vec3 pos, vec3 norm) {
            vec3 N = normalize(norm);
            vec3 L = normalize(light - pos);
            vec3 E = normalize(pos);
            vec3 R = reflect(L, N);
            
            float diffuse = abs(dot(N, L));
            float specular = abs(dot(R, E));
            
            return clamp(pow(specular, 10) + diffuse, 0, 1);
        }
        
        void main() {
            float intensity = PhongIntensity(vPosition, vNormal);
            
            fColor = vec4(intensity * color.xyz, color.w);
        }
    ''')
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.