Browse Source

fixed sheet arrow cap triangle vertex ordering

Alexander Rose 6 years ago
parent
commit
54629e4200
1 changed files with 15 additions and 6 deletions
  1. 15 6
      src/mol-geo/geometry/mesh/builder/sheet.ts

+ 15 - 6
src/mol-geo/geometry/mesh/builder/sheet.ts

@@ -47,12 +47,21 @@ function addCap(offset: number, state: MeshBuilder.State, controlPoints: ArrayLi
     Vec3.sub(p3, Vec3.sub(p3, positionVector, horizontalVector), verticalLeftVector)
     Vec3.add(p4, Vec3.sub(p4, positionVector, horizontalVector), verticalRightVector)
 
-    ChunkedArray.add3(vertices, p1[0], p1[1], p1[2])
-    ChunkedArray.add3(vertices, p2[0], p2[1], p2[2])
-    ChunkedArray.add3(vertices, p3[0], p3[1], p3[2])
-    ChunkedArray.add3(vertices, p4[0], p4[1], p4[2])
+    if (leftHeight < rightHeight) {
+        ChunkedArray.add3(vertices, p4[0], p4[1], p4[2])
+        ChunkedArray.add3(vertices, p3[0], p3[1], p3[2])
+        ChunkedArray.add3(vertices, p2[0], p2[1], p2[2])
+        ChunkedArray.add3(vertices, p1[0], p1[1], p1[2])
+        Vec3.copy(verticalVector, verticalRightVector)
+    } else {
+        ChunkedArray.add3(vertices, p1[0], p1[1], p1[2])
+        ChunkedArray.add3(vertices, p2[0], p2[1], p2[2])
+        ChunkedArray.add3(vertices, p3[0], p3[1], p3[2])
+        ChunkedArray.add3(vertices, p4[0], p4[1], p4[2])
+        Vec3.copy(verticalVector, verticalLeftVector)
+    }
 
-    Vec3.cross(normalVector, horizontalVector, verticalLeftVector)
+    Vec3.cross(normalVector, horizontalVector, verticalVector)
 
     for (let i = 0; i < 4; ++i) {
         ChunkedArray.add3(normals, normalVector[0], normalVector[1], normalVector[2])
@@ -152,8 +161,8 @@ export function addSheet(state: MeshBuilder.State, controlPoints: ArrayLike<numb
         const h = arrowHeight === 0 ? height : arrowHeight
         addCap(0, state, controlPoints, normalVectors, binormalVectors, width, h, h)
     } else if (arrowHeight > 0) {
-        addCap(0, state, controlPoints, normalVectors, binormalVectors, width, -arrowHeight, height)
         addCap(0, state, controlPoints, normalVectors, binormalVectors, width, arrowHeight, -height)
+        addCap(0, state, controlPoints, normalVectors, binormalVectors, width, -arrowHeight, height)
     }
 
     if (endCap && arrowHeight === 0) {