| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import { NodeMaterialBlock } from '../nodeMaterialBlock';
- import { NodeMaterialBlockConnectionPointTypes } from '../Enums/nodeMaterialBlockConnectionPointTypes';
- import { NodeMaterialBuildState } from '../nodeMaterialBuildState';
- import { NodeMaterialConnectionPoint } from '../nodeMaterialBlockConnectionPoint';
- import { NodeMaterialBlockTargets } from '../Enums/nodeMaterialBlockTargets';
- import { _TypeStore } from '../../../Misc/typeStore';
- import { NodeMaterial } from '../nodeMaterial';
- import { NodeMaterialSystemValues } from '../Enums/nodeMaterialSystemValues';
- import { InputBlock } from './Input/inputBlock';
- /**
- * Block used to get the view direction
- */
- export class ViewDirectionBlock extends NodeMaterialBlock {
- /**
- * Creates a new ViewDirectionBlock
- * @param name defines the block name
- */
- public constructor(name: string) {
- super(name, NodeMaterialBlockTargets.Neutral);
- this.registerInput("worldPosition", NodeMaterialBlockConnectionPointTypes.Vector4);
- this.registerInput("cameraPosition", NodeMaterialBlockConnectionPointTypes.Vector3);
- this.registerOutput("output", NodeMaterialBlockConnectionPointTypes.Vector3);
- }
- /**
- * Gets the current class name
- * @returns the class name
- */
- public getClassName() {
- return "ViewDirectionBlock";
- }
- /**
- * Gets the world position component
- */
- public get worldPosition(): NodeMaterialConnectionPoint {
- return this._inputs[0];
- }
- /**
- * Gets the camera position component
- */
- public get cameraPosition(): NodeMaterialConnectionPoint {
- return this._inputs[1];
- }
- /**
- * Gets the output component
- */
- public get output(): NodeMaterialConnectionPoint {
- return this._outputs[0];
- }
- public autoConfigure(material: NodeMaterial) {
- if (!this.cameraPosition.isConnected) {
- let cameraPositionInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.CameraPosition);
- if (!cameraPositionInput) {
- cameraPositionInput = new InputBlock("cameraPosition");
- cameraPositionInput.setAsSystemValue(NodeMaterialSystemValues.CameraPosition);
- }
- cameraPositionInput.output.connectTo(this.cameraPosition);
- }
- }
- protected _buildBlock(state: NodeMaterialBuildState) {
- super._buildBlock(state);
- let output = this._outputs[0];
- state.compilationString += this._declareOutput(output, state) + ` = normalize(${this.cameraPosition.associatedVariableName} - ${this.worldPosition.associatedVariableName}.xyz);\r\n`;
- return this;
- }
- }
- _TypeStore.RegisteredTypes["BABYLON.ViewDirectionBlock"] = ViewDirectionBlock;
|