puts "========" puts "Test custom uniform variables: -vec2, -vec3, -vec4, -mat3, -mat4" puts "========" pload MODELING VISUALIZATION # draw a box box b 1 2 3 vclear vclose ALL vinit View1 vsetdispmode 1 vaxo vdisplay b vfit vrotate 0.2 0.0 0.0 set aGlslVer "#version 110" if { [vdriver -default] == "TKOpenGles" } { set aGlslVer "#version 300 es" } # vertex shader applying a mat4 uniform transform and passing a vec4 color to fragment set aShaderVert " uniform mat4 uModelTrsf; uniform mat3 uNormTrsf; uniform vec4 uColor; uniform vec3 uLightDir; uniform vec2 uScale; THE_SHADER_OUT vec4 vColor; THE_SHADER_OUT vec3 vNormal; void main() { vec4 aPos = uModelTrsf * occVertex; aPos.xy *= uScale; vNormal = normalize(uNormTrsf * occNormal.xyz); vColor = uColor; gl_Position = occProjectionMatrix * occWorldViewMatrix * aPos; }" # fragment shader using the passed color and simple diffuse lighting set aShaderFrag " uniform vec3 uLightDir; THE_SHADER_IN vec4 vColor; THE_SHADER_IN vec3 vNormal; void main() { float aNdotL = max(dot(normalize(vNormal), normalize(uLightDir)), 0.2); occSetFragColor(vec4(vColor.rgb * aNdotL, vColor.a)); }" # identity mat4 (row-major: 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1) # identity mat3 (row-major: 1 0 0 0 1 0 0 0 1) vshaderprog b -vert $aShaderVert -frag $aShaderFrag -header "$aGlslVer" \ -mat4 uModelTrsf 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 \ -mat3 uNormTrsf 1 0 0 0 1 0 0 0 1 \ -vec4 uColor 0.2 0.6 1.0 1.0 \ -vec3 uLightDir 0.0 0.0 1.0 \ -vec2 uScale 1.0 1.0 vdump $::imagedir/${::casename}_identity.png # apply a non-identity mat4 (translation by 0.5 in X) vshaderprog b -vert $aShaderVert -frag $aShaderFrag -header "$aGlslVer" \ -mat4 uModelTrsf 1 0 0 0.5 0 1 0 0 0 0 1 0 0 0 0 1 \ -mat3 uNormTrsf 1 0 0 0 1 0 0 0 1 \ -vec4 uColor 1.0 0.4 0.2 1.0 \ -vec3 uLightDir 1.0 1.0 1.0 \ -vec2 uScale 0.8 0.8 vdump $::imagedir/${::casename}_translated.png