AmbientLight problem

Hello! I’m using the code of the HelloCollision tutorial to figure out some things. My problem is that if i change the scene to something i made , my scene shows up all in black,but with the town.zip scene it gives me a low light ,but visible (with colors etc), scene. I got commented out the directional light to test it. My code :

[java]package main;

import com.jme3.app.SimpleApplication;

import com.jme3.asset.plugins.ZipLocator;

import com.jme3.bullet.BulletAppState;

import com.jme3.bullet.collision.shapes.CapsuleCollisionShape;

import com.jme3.bullet.collision.shapes.CollisionShape;

import com.jme3.bullet.control.CharacterControl;

import com.jme3.bullet.control.RigidBodyControl;

import com.jme3.bullet.util.CollisionShapeFactory;

import com.jme3.input.KeyInput;

import com.jme3.input.controls.ActionListener;

import com.jme3.input.controls.KeyTrigger;

import com.jme3.light.AmbientLight;

import com.jme3.light.DirectionalLight;

import com.jme3.math.ColorRGBA;

import com.jme3.math.Vector3f;

import com.jme3.scene.Node;

import com.jme3.scene.Spatial;

/**

  • Example 9 - How to make walls and floors solid.
  • This version uses Physics and a custom Action Listener.
  • @author normen, with edits by Zathras

    /

    public class Collision extends SimpleApplication

    implements ActionListener{

    private Spatial sceneModel;

    private BulletAppState bulletAppState;

    private RigidBodyControl landscape;

    private CharacterControl player;

    private Vector3f walkDirection = new Vector3f();

    private boolean left = false, right = false, up = false, down = false;

    public static void main(String[] args) {

    Collision app = new Collision();

    app.start();

    }

    public void simpleInitApp() {

    /
    * Set up Physics /

    bulletAppState = new BulletAppState();

    stateManager.attach(bulletAppState);

    // We re-use the flyby camera control for rotation, while positioning is handled by physics

    viewPort.setBackgroundColor(new ColorRGBA(0.7f,0.8f,1f,1f));

    flyCam.setMoveSpeed(500);

    setUpKeys();

    setUpLight();

    // We load the scene from the zip file and adjust its size.

    // assetManager.registerLocator("town.zip", ZipLocator.class.getName());

    sceneModel = assetManager.loadModel("Models/scene/scene.obj");

    // sceneModel = assetManager.loadModel("main.scene");

    sceneModel.setLocalScale(0.5f);

    sceneModel.move(-20,0,0);

    // We set up collision detection for the scene by creating a

    // compound collision shape and a static physics node with mass zero.

    CollisionShape sceneShape =

    CollisionShapeFactory.createMeshShape((Node) sceneModel);

    landscape = new RigidBodyControl(sceneShape, 0);

    sceneModel.addControl(landscape);

    // We set up collision detection for the player by creating

    // a capsule collision shape and a physics character node.

    // The physics character node offers extra settings for

    // size, stepheight, jumping, falling, and gravity.

    // We also put the player in its starting position.

    CapsuleCollisionShape capsuleShape = new CapsuleCollisionShape(1.5f, 6f, 1);

    player = new CharacterControl(capsuleShape, 0.05f);

    player.setJumpSpeed(20);

    player.setFallSpeed(30);

    player.setGravity(30);

    player.setPhysicsLocation(new Vector3f(0, 10, 0));

    // We attach the scene and the player to the rootnode and the physics space,

    // to make them appear in the game world.

    rootNode.attachChild(sceneModel);

    bulletAppState.getPhysicsSpace().add(landscape);

    bulletAppState.getPhysicsSpace().add(player);

    }

    private void setUpLight() {

    // We add light so we see the scene

    AmbientLight al = new AmbientLight();

    al.setColor(ColorRGBA.White.mult(1.3f));

    rootNode.addLight(al);

    // DirectionalLight dl = new DirectionalLight();

    // dl.setColor(ColorRGBA.White);

    // dl.setDirection(new Vector3f(2.8f, -2.8f, -2.8f).normalizeLocal());

    // rootNode.addLight(dl);

    }

    /
    * We over-write some navigational key mappings here, so we can
  • add physics-controlled walking and jumping: /

    private void setUpKeys() {

    inputManager.addMapping("Lefts", new KeyTrigger(KeyInput.KEY_A));

    inputManager.addMapping("Rights", new KeyTrigger(KeyInput.KEY_D));

    inputManager.addMapping("Ups", new KeyTrigger(KeyInput.KEY_W));

    inputManager.addMapping("Downs", new KeyTrigger(KeyInput.KEY_S));

    inputManager.addMapping("Jumps", new KeyTrigger(KeyInput.KEY_SPACE));

    inputManager.addListener(this, "Lefts");

    inputManager.addListener(this, "Rights");

    inputManager.addListener(this, "Ups");

    inputManager.addListener(this, "Downs");

    inputManager.addListener(this, "Jumps");

    }

    /
    * These are our custom actions triggered by key presses.
  • We do not walk yet, we just keep track of the direction the user pressed. */

    public void onAction(String binding, boolean value, float tpf) {

    if (binding.equals("Lefts")) {

    left = value;

    } else if (binding.equals("Rights")) {

    right = value;

    } else if (binding.equals("Ups")) {

    up = value;

    } else if (binding.equals("Downs")) {

    down = value;

    } else if (binding.equals("Jumps")) {

    player.jump();

    }

    }

    /**
  • This is the main event loop–walking happens here.
  • We check in which direction the player is walking by interpreting
  • the camera direction forward (camDir) and to the side (camLeft).
  • The setWalkDirection() command is what lets a physics-controlled player walk.
  • We also make sure here that the camera moves with player.

    */

    @Override

    public void simpleUpdate(float tpf) {

    System.out.println(player.getPhysicsLocation());

    Vector3f camDir = cam.getDirection().clone().multLocal(0.6f);

    Vector3f camLeft = cam.getLeft().clone().multLocal(0.4f);

    walkDirection.set(0, 0, 0);

    if (left) { walkDirection.addLocal(camLeft); }

    if (right) { walkDirection.addLocal(camLeft.negate()); }

    if (up) { walkDirection.addLocal(camDir); }

    if (down) { walkDirection.addLocal(camDir.negate()); }

    player.setWalkDirection(walkDirection);

    cam.setLocation(player.getPhysicsLocation());

    }

    }[/java]

Can you post the .mtl file?

It might be that it specifies the ambient color to be black.

Also are you using alpha4 or a nightly build?

I’m new to the jmonkey so can you tell me where exactly is that .mtl file? i use a nightly build,just downloaded the binaries.

When you export .obj from blender, a file will end up in the same location called the same but ends with mtl instead of obj.

So in your folder:

Models/scene/

There is two files:

scene.obj

scene.mtl <–This is the one hes asking for.

scene.mtl:



#


Alias OBJ Material File


# Exported from SketchUp, (c) 2000-2006 Google, Inc.



newmtl FrontColor

Ka 0.000000 0.000000 0.000000

Kd 1.000000 1.000000 1.000000

Ks 0.330000 0.330000 0.330000



newmtl Vegetation_Blur7

Ka 0.000000 0.000000 0.000000

Kd 0.325490 0.447059 0.070588

Ks 0.330000 0.330000 0.330000

map_Kd scene/Vegetation_Blur7.jpg



newmtl BackColor

Ka 0.000000 0.000000 0.000000

Kd 0.670588 0.690196 0.800000

Ks 0.330000 0.330000 0.330000



newmtl _Stone_Sandstone_Ashlar_Light_1

Ka 0.000000 0.000000 0.000000

Kd 0.807843 0.698039 0.501961

Ks 0.330000 0.330000 0.330000

map_Kd scene/_Stone_Sandstone_Ashlar_Light_1.jpg



newmtl ForegroundColor

Ka 0.000000 0.000000 0.000000

Kd 0.000000 0.000000 0.000000

Ks 0.330000 0.330000 0.330000

You have specified the ambient color of all those objects to be black.



See this line in the mtl:

[java]Ka 0.000000 0.000000 0.000000[/java]



I recommend you read up on the sketchup documentation or your OBJ exporter documentation on how to specify an ambient color other than black.

Oh thank you very much! I’ll look about it!