Selaa lähdekoodia

more shadows for the inspector

David Catuhe 6 vuotta sitten
vanhempi
commit
29df998b11

+ 20 - 0
inspector/src/components/actionTabs/tabs/propertyGrids/lights/commonShadowLightPropertyGridComponent.tsx

@@ -10,6 +10,7 @@ import { GlobalState } from '../../../../globalState';
 import { OptionsLineComponent } from '../../../lines/optionsLineComponent';
 import { ShadowGenerator } from 'babylonjs/Lights/Shadows/shadowGenerator';
 import { SliderLineComponent } from '../../../lines/sliderLineComponent';
+import { ButtonLineComponent } from '../../../lines/buttonLineComponent';
 
 interface ICommonShadowLightPropertyGridComponentProps {
     globalState: GlobalState,
@@ -23,6 +24,19 @@ export class CommonShadowLightPropertyGridComponent extends React.Component<ICom
         super(props);
     }
 
+    createShadowGenerator() {
+        const light = this.props.light;
+        const scene = light.getScene();
+        let generator = new ShadowGenerator(512, light);
+
+        scene.meshes.forEach(m => {
+            generator.addShadowCaster(m);
+            m.receiveShadows = true;
+        });
+
+        this.forceUpdate();
+    }
+
     render() {
         const light = this.props.light;
         const generator = light.getShadowGenerator() as ShadowGenerator || null;
@@ -54,6 +68,12 @@ export class CommonShadowLightPropertyGridComponent extends React.Component<ICom
                     <FloatLineComponent lockObject={this.props.lockObject} label="Shadows far plane" target={light} propertyName="shadowMaxZ" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
                 </LineContainerComponent>
                 {
+                    generator == null &&
+                    <LineContainerComponent globalState={this.props.globalState} title="SHADOW GENERATOR">
+                        <ButtonLineComponent label="Normalize scene" onClick={() => this.createShadowGenerator()} />
+                    </LineContainerComponent>
+                }
+                {
                     generator !== null &&
                     <LineContainerComponent globalState={this.props.globalState} title="SHADOW GENERATOR">
                         <FloatLineComponent lockObject={this.props.lockObject} label="Bias" target={generator} propertyName="bias" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />

+ 1 - 0
inspector/src/components/actionTabs/tabs/propertyGrids/meshes/meshPropertyGridComponent.tsx

@@ -105,6 +105,7 @@ export class MeshPropertyGridComponent extends React.Component<IMeshPropertyGrid
         var normalLines = LinesBuilder.CreateLineSystem("normalLines", { lines: lines }, scene);
         normalLines.color = color;
         normalLines.parent = mesh;
+        normalLines.reservedDataStore = { hidden: true };
 
         if (!mesh.reservedDataStore) {
             mesh.reservedDataStore = {};

+ 13 - 0
inspector/src/components/actionTabs/tabs/propertyGrids/scenePropertyGridComponent.tsx

@@ -23,6 +23,7 @@ import { SliderLineComponent } from "../../lines/sliderLineComponent";
 import { OptionsLineComponent } from "../../lines/optionsLineComponent";
 import { LockObject } from "./lockObject";
 import { GlobalState } from '../../../globalState';
+import { ButtonLineComponent } from '../../lines/buttonLineComponent';
 
 interface IScenePropertyGridComponentProps {
     globalState: GlobalState;
@@ -103,6 +104,15 @@ export class ScenePropertyGridComponent extends React.Component<IScenePropertyGr
         physicsEngine.setTimeStep(newValue);
     }
 
+    normalizeScene() {
+        const scene = this.props.scene;
+
+        scene.meshes.forEach((mesh) => {
+            mesh.normalizeToUnitCube(true);
+            mesh.computeWorldMatrix(true);
+        });
+    }
+
     render() {
         const scene = this.props.scene;
 
@@ -171,6 +181,9 @@ export class ScenePropertyGridComponent extends React.Component<IScenePropertyGr
                 <LineContainerComponent globalState={this.props.globalState} title="COLLISIONS" closed={true}>
                     <Vector3LineComponent label="Gravity" target={scene} propertyName="gravity" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
                 </LineContainerComponent>
+                <LineContainerComponent globalState={this.props.globalState} title="SHADOWS" closed={true}>
+                    <ButtonLineComponent label="Normalize scene" onClick={() => this.normalizeScene()} />
+                </LineContainerComponent>
             </div>
         );
     }