Pārlūkot izejas kodu

add Mat3.directionTransform

Alexander Rose 5 gadi atpakaļ
vecāks
revīzija
a54b36b057

+ 1 - 2
src/mol-geo/geometry/mesh/mesh-builder.ts

@@ -8,7 +8,6 @@ import { ValueCell } from '../../../mol-util/value-cell'
 import { Vec3, Mat4, Mat3 } from '../../../mol-math/linear-algebra';
 import { ChunkedArray } from '../../../mol-data/util';
 import { Mesh } from './mesh';
-import { getNormalMatrix } from '../../util';
 import { Primitive } from '../../primitive/primitive';
 import { Cage } from '../../../mol-geo/primitive/cage';
 import { addSphere } from './builder/sphere';
@@ -85,7 +84,7 @@ export namespace MeshBuilder {
         const { vertices: va, normals: na, indices: ia } = primitive
         const { vertices, normals, indices, groups, currentGroup } = state
         const offset = vertices.elementCount
-        const n = getNormalMatrix(tmpMat3, t)
+        const n = Mat3.directionTransform(tmpMat3, t)
         for (let i = 0, il = va.length; i < il; i += 3) {
             // position
             Vec3.transformMat4(tmpV, Vec3.fromArray(tmpV, va, i), t)

+ 1 - 2
src/mol-geo/primitive/primitive.ts

@@ -5,7 +5,6 @@
  */
 
 import { Vec3, Mat4, Mat3 } from '../../mol-math/linear-algebra';
-import { getNormalMatrix } from '../util';
 import { NumberArray } from '../../mol-util/type-helpers';
 
 export interface Primitive {
@@ -74,7 +73,7 @@ const tmpMat3 = Mat3.zero()
 /** Transform primitive in-place */
 export function transformPrimitive(primitive: Primitive, t: Mat4) {
     const { vertices, normals } = primitive
-    const n = getNormalMatrix(tmpMat3, t)
+    const n = Mat3.directionTransform(tmpMat3, t)
     for (let i = 0, il = vertices.length; i < il; i += 3) {
         // position
         Vec3.transformMat4(tmpV, Vec3.fromArray(tmpV, vertices, i), t)

+ 1 - 8
src/mol-geo/util.ts

@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
+ * Copyright (c) 2018-2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
  *
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
  */
@@ -20,13 +20,6 @@ export function normalizeVec3Array<T extends NumberArray> (a: T) {
     }
 }
 
-export function getNormalMatrix(out: Mat3, t: Mat4) {
-    Mat3.fromMat4(out, t)
-    Mat3.invert(out, out)
-    Mat3.transpose(out, out)
-    return out
-}
-
 const tmpV3 = Vec3.zero()
 
 export function transformPositionArray (t: Mat4, array: NumberArray, offset: number, count: number) {

+ 10 - 0
src/mol-math/linear-algebra/3d/mat3.ts

@@ -441,6 +441,16 @@ namespace Mat3 {
         return out
     }
 
+    /**
+     * Get matrix to transform directions, e.g. normals
+     */
+    export function directionTransform(out: Mat3, t: Mat4) {
+        Mat3.fromMat4(out, t)
+        Mat3.invert(out, out)
+        Mat3.transpose(out, out)
+        return out
+    }
+
     export const Identity: ReadonlyMat3 = identity()
 }