| attribute vec3 vertexPosition; |
| attribute vec3 vertexNormal; |
| attribute vec3 vertexPositionTarget; |
| attribute vec3 vertexNormalTarget; |
| |
| varying vec3 worldPosition; |
| varying vec3 worldNormal; |
| |
| uniform mat4 modelMatrix; |
| uniform mat3 modelNormalMatrix; |
| uniform mat4 modelViewProjection; |
| uniform float interpolator; |
| |
| void main() |
| { |
| vec3 morphPos; |
| vec3 morphNormal; |
| if (interpolator > 0.0) { |
| // normalized |
| morphPos = mix(vertexPosition, vertexPositionTarget, interpolator); |
| morphNormal = normalize(mix(vertexNormal, vertexNormalTarget, interpolator)); |
| } else { |
| // relative |
| morphPos = vertexPosition + vertexPositionTarget * abs(interpolator); |
| morphNormal = normalize(vertexNormal + vertexNormalTarget * abs(interpolator)); |
| } |
| |
| worldNormal = normalize( modelNormalMatrix * morphNormal ); |
| worldPosition = vec3( modelMatrix * vec4( morphPos, 1.0 ) ); |
| |
| gl_Position = modelViewProjection * vec4( morphPos, 1.0 ); |
| } |