瀏覽代碼

Bind camera position according to the scene setup

Popov72 5 年之前
父節點
當前提交
9b6e1baeb3
共有 2 個文件被更改,包括 5 次插入4 次删除
  1. 2 1
      src/Materials/Node/Blocks/Input/inputBlock.ts
  2. 3 3
      src/Materials/materialHelper.ts

+ 2 - 1
src/Materials/Node/Blocks/Input/inputBlock.ts

@@ -13,6 +13,7 @@ import { _TypeStore } from '../../../../Misc/typeStore';
 import { Color3, Color4 } from '../../../../Maths/math';
 import { AnimatedInputBlockTypes } from './animatedInputBlockTypes';
 import { Observable } from '../../../../Misc/observable';
+import { MaterialHelper } from '../../../../Materials/materialHelper';
 
 /**
  * Block used to expose an input value
@@ -507,7 +508,7 @@ export class InputBlock extends NodeMaterialBlock {
                     effect.setMatrix(variableName, scene.getTransformMatrix());
                     break;
                 case NodeMaterialSystemValues.CameraPosition:
-                    effect.setVector3(variableName, scene.activeCamera!.globalPosition);
+                    MaterialHelper.BindEyePosition(effect, scene, variableName);
                     break;
                 case NodeMaterialSystemValues.FogColor:
                     effect.setColor3(variableName, scene.fogColor);

+ 3 - 3
src/Materials/materialHelper.ts

@@ -32,9 +32,9 @@ export class MaterialHelper {
      * @param effect The effect to be bound
      * @param scene The scene the eyes position is used from
      */
-    public static BindEyePosition(effect: Effect, scene: Scene): void {
+    public static BindEyePosition(effect: Effect, scene: Scene, variableName = "vEyePosition"): void {
         if (scene._forcedViewPosition) {
-            effect.setVector3("vEyePosition", scene._forcedViewPosition);
+            effect.setVector3(variableName, scene._forcedViewPosition);
             return;
         }
         var globalPosition = scene.activeCamera!.globalPosition;
@@ -42,7 +42,7 @@ export class MaterialHelper {
             // Use WebVRFreecamera's device position as global position is not it's actual position in babylon space
             globalPosition = (scene.activeCamera! as WebVRFreeCamera).devicePosition;
         }
-        effect.setVector3("vEyePosition", scene._mirroredCameraPosition ? scene._mirroredCameraPosition : globalPosition);
+        effect.setVector3(variableName, scene._mirroredCameraPosition ? scene._mirroredCameraPosition : globalPosition);
     }
 
     /**