123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import Node from '../core/Node.js';
- import {
- nodeObject, transformedNormalView, positionViewDirection,
- transformDirection, negate, reflect, vec3, cameraViewMatrix
- } from '../shadernode/ShaderNodeBaseElements.js';
- class ReflectNode extends Node {
- static VECTOR = 'vector';
- static CUBE = 'cube';
- constructor( scope = ReflectNode.CUBE ) {
- super( 'vec3' );
- this.scope = scope;
- }
- getHash( /*builder*/ ) {
- return `reflect-${this.scope}`;
- }
- generate( builder ) {
- const scope = this.scope;
- if ( scope === ReflectNode.VECTOR ) {
- const reflectView = reflect( negate( positionViewDirection ), transformedNormalView );
- const reflectVec = transformDirection( reflectView, cameraViewMatrix );
- return reflectVec.build( builder );
- } else if ( scope === ReflectNode.CUBE ) {
- const reflectVec = nodeObject( new ReflectNode( ReflectNode.VECTOR ) );
- const cubeUV = vec3( negate( reflectVec.x ), reflectVec.yz );
- return cubeUV.build( builder );
- }
- }
- serialize( data ) {
- super.serialize( data );
- data.scope = this.scope;
- }
- deserialize( data ) {
- super.deserialize( data );
- this.scope = data.scope;
- }
- }
- export default ReflectNode;
|