From ac46317dc6d3a9caa46147a8cc50949c8338dcc6 Mon Sep 17 00:00:00 2001
From: Alexander Rose <alex.rose@rcsb.org>
Date: Fri, 4 Oct 2019 11:53:38 -0700
Subject: [PATCH] fix lighting for orthographic projection close to camera

---
 src/mol-canvas3d/camera.ts                         | 3 +++
 src/mol-gl/shader/chunks/apply-light-color.glsl.ts | 2 +-
 src/mol-gl/shader/spheres.frag.ts                  | 4 ++--
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/mol-canvas3d/camera.ts b/src/mol-canvas3d/camera.ts
index 4b8aa2d7f..e5d765620 100644
--- a/src/mol-canvas3d/camera.ts
+++ b/src/mol-canvas3d/camera.ts
@@ -269,6 +269,9 @@ function updateClip(camera: Camera) {
         // set at least to 5 to avoid slow sphere impostor rendering
         near = Math.max(5, near)
         far = Math.max(5, far)
+    } else {
+        near = Math.max(0, near)
+        far = Math.max(0, far)
     }
 
     camera.near = near;
diff --git a/src/mol-gl/shader/chunks/apply-light-color.glsl.ts b/src/mol-gl/shader/chunks/apply-light-color.glsl.ts
index 0f24aca8e..54b00713f 100644
--- a/src/mol-gl/shader/chunks/apply-light-color.glsl.ts
+++ b/src/mol-gl/shader/chunks/apply-light-color.glsl.ts
@@ -36,7 +36,7 @@ geometry.normal = normal;
 geometry.viewDir = normalize(vViewPosition);
 
 IncidentLight directLight;
-directLight.direction = geometry.viewDir;
+directLight.direction = vec3(0.0, 0.0, -1.0);
 directLight.color = vec3(uLightIntensity);
 
 RE_Direct_Physical(directLight, geometry, physicalMaterial, reflectedLight);
diff --git a/src/mol-gl/shader/spheres.frag.ts b/src/mol-gl/shader/spheres.frag.ts
index 2a584f7ef..0d09dd6f0 100644
--- a/src/mol-gl/shader/spheres.frag.ts
+++ b/src/mol-gl/shader/spheres.frag.ts
@@ -124,8 +124,8 @@ void main(void){
     #elif defined(dColorType_depth)
         gl_FragColor = material;
     #else
-        vec3 normal = cameraNormal;
-        vec3 vViewPosition = -cameraPos;
+        vec3 normal = -cameraNormal;
+        vec3 vViewPosition = cameraPos;
         #include apply_light_color
 
         if (interior) {
-- 
GitLab