diff --git a/libraries/gpu/src/gpu/Transform.slh b/libraries/gpu/src/gpu/Transform.slh index 9666a4f258..3b0feb5ba1 100644 --- a/libraries/gpu/src/gpu/Transform.slh +++ b/libraries/gpu/src/gpu/Transform.slh @@ -12,7 +12,7 @@ struct TransformObject { mat4 _model; - mat4 _modelInverseTranspose; + mat4 _modelInverse; mat4 _modelView; mat4 _modelViewInverseTranspose; }; @@ -24,10 +24,13 @@ struct TransformCamera { }; vec4 transform(TransformCamera camera, TransformObject object, vec4 pos) { + return camera._projection * (object._modelView * pos); } - +vec3 transformDir(TransformCamera camera, TransformObject object, vec3 dir) { + return (object._modelViewInverseTranspose * vec4(dir, 0.0)).xyz; +} <@if GLPROFILE == PC_GL@> uniform transformObjectBuffer { diff --git a/libraries/render-utils/src/model.slv b/libraries/render-utils/src/model.slv index 7f97e429d9..42fec40e55 100755 --- a/libraries/render-utils/src/model.slv +++ b/libraries/render-utils/src/model.slv @@ -36,8 +36,6 @@ void main(void) { void main(void) { - // transform and store the normal for interpolation - normal = normalize(gl_ModelViewMatrix * vec4(gl_Normal, 0.0)); // pass along the diffuse color gl_FrontColor = gl_Color; @@ -49,10 +47,12 @@ void main(void) { //gl_Position = ftransform(); //gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; //gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex; - //TransformCamera cam = getTransformCamera(); - /* TransformObject obj = getTransformObject(); - // gl_Position = transform(cam, obj, gl_Vertex); - */ - vec4 vPos = gl_ModelViewMatrix * gl_Vertex; - gl_Position = camera._projection * vPos; + TransformCamera cam = getTransformCamera(); + TransformObject obj = getTransformObject(); + + gl_Position = transform(cam, obj, gl_Vertex); + + // transform and store the normal for interpolation + normal = vec4(normalize(transformDir(cam, obj, gl_Normal)), 0.0); + }