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.asset.AssetManager;
|
||||
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.BitmapText;
|
||||
import com.jme3.gde.core.Installer;
|
||||
@ -244,6 +246,11 @@ public class SceneApplication extends Application implements LookupProvider {
|
||||
viewPort.attachScene(toolsNode);
|
||||
guiViewPort.attachScene(guiNode);
|
||||
cam.setLocation(new Vector3f(0, 0, 10));
|
||||
getStateManager().attach(new EnvironmentCamera());
|
||||
|
||||
LightsDebugState lightDebugState = new LightsDebugState();
|
||||
getStateManager().attach(lightDebugState);
|
||||
|
||||
|
||||
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.Light;
|
||||
import com.jme3.light.LightList;
|
||||
import com.jme3.light.LightProbe;
|
||||
import com.jme3.light.PointLight;
|
||||
import com.jme3.light.SpotLight;
|
||||
import com.jme3.scene.Geometry;
|
||||
@ -180,6 +181,9 @@ public class JmeSpatialChildren extends Children.Keys<Object> {
|
||||
if (pair.getLight() instanceof AmbientLight) {
|
||||
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)};
|
||||
} else if (key instanceof MeshGeometryPair) {
|
||||
MeshGeometryPair pair = (MeshGeometryPair) key;
|
||||
|
@ -31,13 +31,19 @@
|
||||
*/
|
||||
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.controller.SceneToolController;
|
||||
import com.jme3.gde.core.sceneexplorer.nodes.JmeSpatial;
|
||||
import com.jme3.gde.core.undoredo.AbstractUndoableSceneEdit;
|
||||
import com.jme3.gde.core.undoredo.SceneUndoRedoManager;
|
||||
import com.jme3.light.AmbientLight;
|
||||
import com.jme3.light.DirectionalLight;
|
||||
import com.jme3.light.Light;
|
||||
import com.jme3.light.LightProbe;
|
||||
import com.jme3.light.PointLight;
|
||||
import com.jme3.light.SpotLight;
|
||||
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 AddPointAction()));
|
||||
result.add(new JMenuItem(new AddSpotAction()));
|
||||
result.add(new JMenuItem(new AddProbeAction()));
|
||||
|
||||
return result;
|
||||
}
|
||||
@ -147,7 +154,7 @@ public class NewLightPopup extends AbstractAction implements Presenter.Popup {
|
||||
}
|
||||
}
|
||||
|
||||
private class AddSpotAction extends AbstractAction {
|
||||
private class AddSpotAction extends AbstractAction {
|
||||
|
||||
public AddSpotAction() {
|
||||
putValue(NAME, "Spot Light");
|
||||
@ -167,6 +174,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) {
|
||||
//add undo
|
||||
|
Loading…
x
Reference in New Issue
Block a user