Initial implementation for adding a LightProbe to a scene in the SDK
This commit is contained in:
parent
c76182d375
commit
84e2aba9da
@ -28,6 +28,8 @@ import com.jme3.app.Application;
|
|||||||
import com.jme3.app.StatsView;
|
import com.jme3.app.StatsView;
|
||||||
import com.jme3.asset.AssetManager;
|
import com.jme3.asset.AssetManager;
|
||||||
import com.jme3.bullet.BulletAppState;
|
import com.jme3.bullet.BulletAppState;
|
||||||
|
import com.jme3.environment.EnvironmentCamera;
|
||||||
|
import com.jme3.environment.util.LightsDebugState;
|
||||||
import com.jme3.font.BitmapFont;
|
import com.jme3.font.BitmapFont;
|
||||||
import com.jme3.font.BitmapText;
|
import com.jme3.font.BitmapText;
|
||||||
import com.jme3.gde.core.Installer;
|
import com.jme3.gde.core.Installer;
|
||||||
@ -244,6 +246,11 @@ public class SceneApplication extends Application implements LookupProvider {
|
|||||||
viewPort.attachScene(toolsNode);
|
viewPort.attachScene(toolsNode);
|
||||||
guiViewPort.attachScene(guiNode);
|
guiViewPort.attachScene(guiNode);
|
||||||
cam.setLocation(new Vector3f(0, 0, 10));
|
cam.setLocation(new Vector3f(0, 0, 10));
|
||||||
|
getStateManager().attach(new EnvironmentCamera());
|
||||||
|
|
||||||
|
LightsDebugState lightDebugState = new LightsDebugState();
|
||||||
|
getStateManager().attach(lightDebugState);
|
||||||
|
|
||||||
|
|
||||||
wireProcessor = new WireProcessor(assetManager);
|
wireProcessor = new WireProcessor(assetManager);
|
||||||
|
|
||||||
|
@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2009-2010 jMonkeyEngine
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.jme3.gde.core.sceneexplorer.nodes;
|
||||||
|
|
||||||
|
import com.jme3.light.LightProbe;
|
||||||
|
import com.jme3.math.Vector3f;
|
||||||
|
import com.jme3.scene.Spatial;
|
||||||
|
import org.openide.nodes.Sheet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author normenhansen
|
||||||
|
*/
|
||||||
|
@org.openide.util.lookup.ServiceProvider(service=SceneExplorerNode.class)
|
||||||
|
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||||
|
public class JmeLightProbe extends JmeLight{
|
||||||
|
protected LightProbe lightProbe;
|
||||||
|
|
||||||
|
public JmeLightProbe() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public JmeLightProbe(Spatial spatial, LightProbe lightProbe) {
|
||||||
|
super(spatial, lightProbe);
|
||||||
|
this.lightProbe = lightProbe;
|
||||||
|
lookupContents.add(lightProbe);
|
||||||
|
setName("LightProbe");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Sheet createSheet() {
|
||||||
|
//TODO: multithreading..
|
||||||
|
Sheet sheet = super.createSheet();
|
||||||
|
Sheet.Set set = Sheet.createPropertiesSet();
|
||||||
|
set.setDisplayName("LightProbe");
|
||||||
|
set.setName(LightProbe.class.getName());
|
||||||
|
LightProbe obj = lightProbe;
|
||||||
|
if (obj == null) {
|
||||||
|
return sheet;
|
||||||
|
}
|
||||||
|
|
||||||
|
set.put(makeProperty(obj, Vector3f.class, "getPosition", "setPosition", "Position"));
|
||||||
|
//set.put(makeProperty(obj.getBounds(), Float.class, "getRadius", "setRadius", "Radius"));
|
||||||
|
sheet.put(set);
|
||||||
|
return sheet;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class getExplorerObjectClass() {
|
||||||
|
return LightProbe.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class getExplorerNodeClass() {
|
||||||
|
return JmeLightProbe.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -38,6 +38,7 @@ import com.jme3.light.AmbientLight;
|
|||||||
import com.jme3.light.DirectionalLight;
|
import com.jme3.light.DirectionalLight;
|
||||||
import com.jme3.light.Light;
|
import com.jme3.light.Light;
|
||||||
import com.jme3.light.LightList;
|
import com.jme3.light.LightList;
|
||||||
|
import com.jme3.light.LightProbe;
|
||||||
import com.jme3.light.PointLight;
|
import com.jme3.light.PointLight;
|
||||||
import com.jme3.light.SpotLight;
|
import com.jme3.light.SpotLight;
|
||||||
import com.jme3.scene.Geometry;
|
import com.jme3.scene.Geometry;
|
||||||
@ -180,6 +181,9 @@ public class JmeSpatialChildren extends Children.Keys<Object> {
|
|||||||
if (pair.getLight() instanceof AmbientLight) {
|
if (pair.getLight() instanceof AmbientLight) {
|
||||||
return new Node[]{new JmeAmbientLight(pair.getSpatial(), (AmbientLight) pair.getLight()).setReadOnly(readOnly)};
|
return new Node[]{new JmeAmbientLight(pair.getSpatial(), (AmbientLight) pair.getLight()).setReadOnly(readOnly)};
|
||||||
}
|
}
|
||||||
|
if (pair.getLight() instanceof LightProbe) {
|
||||||
|
return new Node[]{new JmeLightProbe(pair.getSpatial(), (LightProbe) pair.getLight()).setReadOnly(readOnly)};
|
||||||
|
}
|
||||||
return new Node[]{new JmeLight(pair.getSpatial(), pair.getLight()).setReadOnly(readOnly)};
|
return new Node[]{new JmeLight(pair.getSpatial(), pair.getLight()).setReadOnly(readOnly)};
|
||||||
} else if (key instanceof MeshGeometryPair) {
|
} else if (key instanceof MeshGeometryPair) {
|
||||||
MeshGeometryPair pair = (MeshGeometryPair) key;
|
MeshGeometryPair pair = (MeshGeometryPair) key;
|
||||||
|
@ -31,13 +31,19 @@
|
|||||||
*/
|
*/
|
||||||
package com.jme3.gde.core.sceneexplorer.nodes.actions;
|
package com.jme3.gde.core.sceneexplorer.nodes.actions;
|
||||||
|
|
||||||
|
import com.jme3.bounding.BoundingSphere;
|
||||||
|
import com.jme3.environment.EnvironmentCamera;
|
||||||
|
import com.jme3.environment.LightProbeFactory;
|
||||||
|
import com.jme3.environment.generation.JobProgressAdapter;
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
|
import com.jme3.gde.core.scene.controller.SceneToolController;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.JmeSpatial;
|
import com.jme3.gde.core.sceneexplorer.nodes.JmeSpatial;
|
||||||
import com.jme3.gde.core.undoredo.AbstractUndoableSceneEdit;
|
import com.jme3.gde.core.undoredo.AbstractUndoableSceneEdit;
|
||||||
import com.jme3.gde.core.undoredo.SceneUndoRedoManager;
|
import com.jme3.gde.core.undoredo.SceneUndoRedoManager;
|
||||||
import com.jme3.light.AmbientLight;
|
import com.jme3.light.AmbientLight;
|
||||||
import com.jme3.light.DirectionalLight;
|
import com.jme3.light.DirectionalLight;
|
||||||
import com.jme3.light.Light;
|
import com.jme3.light.Light;
|
||||||
|
import com.jme3.light.LightProbe;
|
||||||
import com.jme3.light.PointLight;
|
import com.jme3.light.PointLight;
|
||||||
import com.jme3.light.SpotLight;
|
import com.jme3.light.SpotLight;
|
||||||
import com.jme3.math.ColorRGBA;
|
import com.jme3.math.ColorRGBA;
|
||||||
@ -79,6 +85,7 @@ public class NewLightPopup extends AbstractAction implements Presenter.Popup {
|
|||||||
result.add(new JMenuItem(new AddDirectionalAction()));
|
result.add(new JMenuItem(new AddDirectionalAction()));
|
||||||
result.add(new JMenuItem(new AddPointAction()));
|
result.add(new JMenuItem(new AddPointAction()));
|
||||||
result.add(new JMenuItem(new AddSpotAction()));
|
result.add(new JMenuItem(new AddSpotAction()));
|
||||||
|
result.add(new JMenuItem(new AddProbeAction()));
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -168,6 +175,44 @@ public class NewLightPopup extends AbstractAction implements Presenter.Popup {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class AddProbeAction extends AbstractAction {
|
||||||
|
|
||||||
|
public AddProbeAction() {
|
||||||
|
putValue(NAME, "Light Probe");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
SceneApplication.getApplication().enqueue(new Callable<Void>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void call() throws Exception {
|
||||||
|
|
||||||
|
EnvironmentCamera envCam = SceneApplication.getApplication().getStateManager().getState(EnvironmentCamera.class);
|
||||||
|
SceneToolController toolController = SceneApplication.getApplication().getStateManager().getState(SceneToolController.class);
|
||||||
|
if(toolController != null){
|
||||||
|
envCam.setPosition(toolController.getCursorLocation());
|
||||||
|
} else {
|
||||||
|
envCam.setPosition(new Vector3f(0, 0, 0));
|
||||||
|
}
|
||||||
|
LightProbe lightProbe = LightProbeFactory.makeProbe(envCam, node, new JobProgressAdapter<LightProbe>() {
|
||||||
|
@Override
|
||||||
|
public void done(LightProbe t) {
|
||||||
|
System.err.println("Done computing env maps");
|
||||||
|
((BoundingSphere)t.getBounds()).setRadius(200);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
node.addLight(lightProbe);
|
||||||
|
addLightUndo(node, lightProbe);
|
||||||
|
setModified();
|
||||||
|
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void addLightUndo(final Spatial undoParent, final Light undoLight) {
|
private void addLightUndo(final Spatial undoParent, final Light undoLight) {
|
||||||
//add undo
|
//add undo
|
||||||
if (undoParent != null && undoLight != null) {
|
if (undoParent != null && undoLight != null) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user