This repository has been archived on 2025-06-21. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
raylib-python-cffi/examples/models/resources/shaders/pbr.vs
Richard Smith a703659c9d initial
2019-05-21 10:56:31 +01:00

49 lines
No EOL
1.5 KiB
GLSL

/*******************************************************************************************
*
* rPBR [shader] - Physically based rendering vertex shader
*
* Copyright (c) 2017 Victor Fisac
*
**********************************************************************************************/
#version 330
# Input vertex attributes
in vec3 vertexPosition
in vec2 vertexTexCoord
in vec3 vertexNormal
in vec4 vertexTangent
# Input uniform values
uniform mat4 mvp
uniform mat4 matModel
# Output vertex attributes (to fragment shader)
out vec3 fragPosition
out vec2 fragTexCoord
out vec3 fragNormal
out vec3 fragTangent
out vec3 fragBinormal
void main()
[
# Calculate binormal from vertex normal and tangent
vec3 vertexBinormal = cross(vertexNormal, vec3(vertexTangent))
# Calculate fragment normal based on normal transformations
mat3 normalMatrix = transpose(inverse(mat3(matModel)))
# Calculate fragment position based on model transformations
fragPosition = vec3(matModel*vec4(vertexPosition, 1.0))
# Send vertex attributes to fragment shader
fragTexCoord = vertexTexCoord
fragNormal = normalize(normalMatrix*vertexNormal)
fragTangent = normalize(normalMatrix*vec3(vertexTangent))
fragTangent = normalize(fragTangent - dot(fragTangent, fragNormal)*fragNormal)
fragBinormal = normalize(normalMatrix*vertexBinormal)
fragBinormal = cross(fragNormal, fragTangent)
# Calculate final vertex position
gl_Position = mvp*vec4(vertexPosition, 1.0)
]