wolfhece.blender.quads

Author: HECE - University of Liege, Pierre Archambeau Date: 2024

Copyright (c) 2024 University of Liege. All rights reserved.

This script and its content are protected by copyright law. Unauthorized copying or distribution of this file, via any medium, is strictly prohibited.

Module Contents

wolfhece.blender.quads.vertex_shader_source = Multiline-String[source]
Show Value
"""
#version 460 core

layout(location = 0) in vec3 position;
layout(location = 1) in vec3 normal;
layout(location = 2) in vec3 color;

out vec3 FragPos;
out vec3 Normal;
out vec3 Color;

uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

void main()
{
    FragPos = vec3(model * vec4(position, 1.0));
    Normal = mat3(transpose(inverse(model))) * normal;
    Color = color;
    gl_Position = projection * view * vec4(FragPos, 1.0);
}
"""
wolfhece.blender.quads.vertex_shader_source = Multiline-String[source]
Show Value
"""
#version 460 core

layout(location = 0) in vec3 position;
layout(location = 1) in vec3 normal;
layout(location = 2) in vec3 color;

out vec3 FragPos;
out vec3 Normal;
out vec3 Color;

uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

uniform float pointSize;

void main()
{
    FragPos = vec3(model * vec4(position, 1.0));
    Normal = mat3(transpose(inverse(model))) * normal;
    Color = color;
    gl_Position = projection * view * vec4(FragPos, 1.0);
}
"""
wolfhece.blender.quads.geometry_shader_source = Multiline-String[source]
Show Value
"""
#version 460 core

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

in vec3 FragPos[];
in vec3 Normal[];
in vec3 Color[];

out vec3 FragPosWorld;
out vec3 NormalWorld;
out vec3 FragColor;

uniform float pointSize;

void main()
{
    float halfSize = pointSize * 0.5;

    for (int i = 0; i < 4; ++i)
    {
        FragPosWorld = FragPos[0];
        NormalWorld = Normal[0];
        FragColor = Color[0];

        gl_Position = gl_in[0].gl_Position + vec4(
            (i == 0 || i == 1) ? -halfSize : halfSize,
            (i == 0 || i == 2) ? -halfSize : halfSize,
            0.0, 0.0);

        EmitVertex();
    }

    EndPrimitive();
}

"""
wolfhece.blender.quads.fragment_shader_source = Multiline-String[source]
Show Value
"""
#version 460 core

in vec3 FragPosWorld;
in vec3 NormalWorld;
in vec3 FragColor;

out vec4 FragColorOutput;

uniform float metallic;
uniform float roughness;

void main()
{
    vec3 viewDir = normalize(-FragPosWorld);
    vec3 normal = normalize(NormalWorld);

    vec3 lightDir = normalize(vec3(1.0, 1.0, 1.0));
    vec3 halfwayDir = normalize(lightDir + viewDir);

    float NdotL = max(dot(normal, lightDir), 0.0);
    float NdotH = max(dot(normal, halfwayDir), 0.0);
    float VdotH = max(dot(viewDir, halfwayDir), 0.0);

    float roughnessSquared = roughness * roughness;
    float denom = (roughnessSquared * NdotH * NdotH + VdotH * VdotH);

    float D = (roughnessSquared) / (denom * denom * 3.14159265 * 3.14159265);

    // Calcul de la réflectance spéculaire F0
    vec3 F0 = (1.0 - metallic) * vec3(0.04) + metallic * FragColor;

    // Correction de la composante spéculaire
    vec3 kS = F0;
    vec3 kD = 1.0 - kS;
    vec3 F = kS + (1.0 - kS) * pow(1.0 - VdotH, 5.0);

    vec3 specular = F * D;

    vec3 diffuse = FragColor / 3.14159265;

    FragColorOutput = vec4(diffuse + specular, 1.0);
}
"""
class wolfhece.blender.quads.MyGLCanvas(parent, point_size, points, normals, colors, metallic, roughness)[source]

Bases: wx.glcanvas.GLCanvas

Inheritance diagram of wolfhece.blender.quads.MyGLCanvas
InitShaderProgram()[source]
SetupBuffers()[source]
OnPaint(event)[source]
OnSize(event)[source]
OnMouse(event)[source]
GetViewMatrix()[source]
GetRotationMatrix()[source]
class wolfhece.blender.quads.MyFrame(parent, title, point_size, points, normals, colors, metallic, roughness)[source]

Bases: wx.Frame

Inheritance diagram of wolfhece.blender.quads.MyFrame
wolfhece.blender.quads.app[source]