ソースを参照

shader: fixed broken flat-shaded & flip-sided

Alexander Rose 5 年 前
コミット
f28b13bf87

+ 0 - 2
src/mol-gl/shader-code.ts

@@ -37,7 +37,6 @@ import assign_color_varying from './shader/chunks/assign-color-varying.glsl'
 import assign_group from './shader/chunks/assign-group.glsl'
 import assign_marker_varying from './shader/chunks/assign-marker-varying.glsl'
 import assign_material_color from './shader/chunks/assign-material-color.glsl'
-import assign_normal from './shader/chunks/assign-normal.glsl'
 import assign_position from './shader/chunks/assign-position.glsl'
 import assign_size from './shader/chunks/assign-size.glsl'
 import check_picking_alpha from './shader/chunks/check-picking-alpha.glsl'
@@ -63,7 +62,6 @@ const ShaderChunks: { [k: string]: string } = {
     assign_group,
     assign_marker_varying,
     assign_material_color,
-    assign_normal,
     assign_position,
     assign_size,
     check_picking_alpha,

+ 0 - 12
src/mol-gl/shader/chunks/assign-normal.glsl.ts

@@ -1,12 +0,0 @@
-export default `
-#if defined(dFlatShaded) && defined(enabledStandardDerivatives)
-    vec3 fdx = dFdx(vViewPosition);
-    vec3 fdy = dFdy(vViewPosition);
-    vec3 normal = -normalize(cross(fdx, fdy));
-#else
-    vec3 normal = -normalize(vNormal);
-    #ifdef dDoubleSided
-        normal = normal * (float(frontFacing) * 2.0 - 1.0);
-    #endif
-#endif
-`

+ 13 - 2
src/mol-gl/shader/mesh.frag.ts

@@ -25,7 +25,11 @@ void main() {
         bool frontFacing = dot(vNormal, vViewPosition) < 0.0;
     #endif
 
-    interior = !frontFacing; // TODO take dFlipSided into account
+    #if defined(dFlipSided)
+        interior = frontFacing;
+    #else
+        interior = !frontFacing;
+    #endif
 
     #include assign_material_color
 
@@ -38,7 +42,14 @@ void main() {
         #ifdef dIgnoreLight
             gl_FragColor = material;
         #else
-            #include assign_normal
+            #if defined(dFlatShaded) && defined(enabledStandardDerivatives)
+                vec3 normal = -faceNormal;
+            #else
+                vec3 normal = -normalize(vNormal);
+                #ifdef dDoubleSided
+                    normal = normal * (float(frontFacing) * 2.0 - 1.0);
+                #endif
+            #endif
             #include apply_light_color
         #endif