You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
760 B
41 lines
760 B
6 months ago
|
import Node, { addNodeClass } from '../core/Node.js';
|
||
|
import { nodeImmutable, float } from '../shadernode/ShaderNode.js';
|
||
|
import { BackSide, WebGLCoordinateSystem } from 'three';
|
||
|
|
||
|
class FrontFacingNode extends Node {
|
||
|
|
||
|
constructor() {
|
||
|
|
||
|
super( 'bool' );
|
||
|
|
||
|
this.isFrontFacingNode = true;
|
||
|
|
||
|
}
|
||
|
|
||
|
generate( builder ) {
|
||
|
|
||
|
const { renderer, material } = builder;
|
||
|
|
||
|
if ( renderer.coordinateSystem === WebGLCoordinateSystem ) {
|
||
|
|
||
|
if ( material.side === BackSide ) {
|
||
|
|
||
|
return 'false';
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return builder.getFrontFacing();
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
export default FrontFacingNode;
|
||
|
|
||
|
export const frontFacing = nodeImmutable( FrontFacingNode );
|
||
|
export const faceDirection = float( frontFacing ).mul( 2.0 ).sub( 1.0 );
|
||
|
|
||
|
addNodeClass( 'FrontFacingNode', FrontFacingNode );
|