Browse Source

TSL: Introduce `modelWorldMatrixInverse` (#28433)

sunag 1 year ago
parent
commit
79e7f8796d
2 changed files with 4 additions and 1 deletions
  1. 1 1
      examples/jsm/nodes/Nodes.js
  2. 3 0
      examples/jsm/nodes/accessors/ModelNode.js

+ 1 - 1
examples/jsm/nodes/Nodes.js

@@ -90,7 +90,7 @@ export { default as MaterialReferenceNode, materialReference } from './accessors
 export { default as RendererReferenceNode, rendererReference } from './accessors/RendererReferenceNode.js';
 export { default as MorphNode, morphReference } from './accessors/MorphNode.js';
 export { default as TextureBicubicNode, textureBicubic } from './accessors/TextureBicubicNode.js';
-export { default as ModelNode, modelDirection, modelViewMatrix, modelNormalMatrix, modelWorldMatrix, modelPosition, modelViewPosition, modelScale } from './accessors/ModelNode.js';
+export { default as ModelNode, modelDirection, modelViewMatrix, modelNormalMatrix, modelWorldMatrix, modelPosition, modelViewPosition, modelScale, modelWorldMatrixInverse } from './accessors/ModelNode.js';
 export { default as ModelViewProjectionNode, modelViewProjection } from './accessors/ModelViewProjectionNode.js';
 export * from './accessors/NormalNode.js';
 export { default as Object3DNode, objectDirection, objectViewMatrix, objectNormalMatrix, objectWorldMatrix, objectPosition, objectScale, objectViewPosition } from './accessors/Object3DNode.js';

+ 3 - 0
examples/jsm/nodes/accessors/ModelNode.js

@@ -1,6 +1,8 @@
 import Object3DNode from './Object3DNode.js';
 import { addNodeClass } from '../core/Node.js';
 import { nodeImmutable } from '../shadernode/ShaderNode.js';
+import { uniform } from '../core/UniformNode.js';
+import { Matrix4 } from 'three';
 
 class ModelNode extends Object3DNode {
 
@@ -29,5 +31,6 @@ export const modelWorldMatrix = nodeImmutable( ModelNode, ModelNode.WORLD_MATRIX
 export const modelPosition = nodeImmutable( ModelNode, ModelNode.POSITION );
 export const modelScale = nodeImmutable( ModelNode, ModelNode.SCALE );
 export const modelViewPosition = nodeImmutable( ModelNode, ModelNode.VIEW_POSITION );
+export const modelWorldMatrixInverse = uniform( new Matrix4() ).onObjectUpdate( ( { object }, self ) => self.value.copy( object.matrixWorld ).invert() );
 
 addNodeClass( 'ModelNode', ModelNode );