Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество
Главная
    Статьи
        Освещение
            Direction and Ambient Light

Direction and Ambient Light

Опубликованно: 21.08.2015, 18:54
Последняя редакция, AdiDOS: 05.05.2016 8:13

В этой статье хочу привести пример создания источника света  в jme3 есть разные методы создания освещения но я выбрал сразу 2 метода по двум причина , первая причина это  темы не сильно обширные для двух статей, а вторая друг без друга эти источники света не сильно хорошо выглядят.

Немного кода.

package test;

import com.jme3.app.SimpleApplication;
import com.jme3.light.AmbientLight;
import com.jme3.light.DirectionalLight;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.Spatial;
import com.jme3.scene.debug.Arrow;
import com.jme3.scene.shape.Box;
import com.jme3.scene.shape.Sphere;
import com.jme3.texture.Texture;
import com.jme3.texture.Texture.WrapMode;
import com.jme3.util.SkyFactory;

public class TestLighting extends SimpleApplication{

 public static void main(String[] args) {
   new TestLighting().start();

 }

 @Override
 public void simpleInitApp() {
   flyCam.setMoveSpeed(10);
   flyCam.setDragToRotate(true);
   createScene();
   createDirectionLight();
   createAmbientLight();
   createSkyBox();
   createArrow();

 }
 //Создание сцены
 private void createScene() {
   Material matGrass = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
   Texture grass = assetManager.loadTexture("Textures/Terrain/splat/grass.jpg");
   grass.setWrap(WrapMode.Repeat);
   matGrass.setTexture("DiffuseMap", grass);

   Box box1 = new Box(20, 1, 20);
   Geometry geomBox1 = new Geometry("box1", box1); 

   geomBox1.setMaterial(matGrass);
   rootNode.attachChild(geomBox1);

   Material matPond = assetManager.loadMaterial("Textures/Terrain/Pond/Pond.j3m");
   matPond.getTextureParam("DiffuseMap").getTextureValue().setWrap(WrapMode.Repeat);
   matPond.getTextureParam("NormalMap").getTextureValue().setWrap(WrapMode.Repeat);
   matPond.setBoolean("UseMaterialColors", true);
   matPond.setColor("Diffuse", ColorRGBA.White.clone());
   matPond.setColor("Ambient", ColorRGBA.White.clone());
   matPond.setFloat("Shininess", 0);

   Box box2 = new Box(5, 5, 5);
   Geometry geomBox2 = new Geometry("box2", box2);
   geomBox2.setLocalTranslation(5, 5, 5);

   geomBox2.setMaterial(matPond);
   rootNode.attachChild(geomBox2);

   Material matSphere = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
   matSphere.setBoolean("UseMaterialColors", true);
   matSphere.setColor("Diffuse",ColorRGBA.Green);
   matSphere.setColor("Specular",ColorRGBA.Green);
   matSphere.setFloat("Shininess", 64f); 

   Sphere Sphere = new Sphere(32, 32, 3);
   Geometry sphereGeom = new Geometry("Sphere", Sphere);
   sphereGeom.setLocalTranslation(-5, 5, -5);

   sphereGeom.setMaterial(matSphere);
   rootNode.attachChild(sphereGeom);
 }

 //Направленный свет
 private void createDirectionLight(){
   DirectionalLight sun = new DirectionalLight();
   sun.setColor(ColorRGBA.White);
   sun.setDirection(new Vector3f(-100f,-100f,-100f).normalizeLocal());
   rootNode.addLight(sun);
 }
 //Окружающий свет
 private void createAmbientLight(){
   AmbientLight al = new AmbientLight();
   al.setColor(ColorRGBA.White.mult(0.2f));
   rootNode.addLight(al);
 }
 //Небо
 private void createSkyBox(){
   Spatial sky = SkyFactory.createSky(assetManager, "Scenes/Beach/FullskiesSunset0068.dds", false);
   sky.setLocalScale(350);
   rootNode.attachChild(sky);
 }

 //Создание стрелки
 private void createArrow(){
   Arrow arrow = new Arrow(new Vector3f(-10,-10,-10));
   arrow.setLineWidth(4);

   Geometry geom = new Geometry("coordinate axis", arrow);
   Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
   mat.getAdditionalRenderState().setWireframe(true);
   mat.setColor("Color", ColorRGBA.Red);
   geom.setMaterial(mat);
   geom.setLocalTranslation(25, 25, 25);

   rootNode.attachChild(geom);
 }

}

DirectionalLight(Направленный свет) — Этот источник света рассеянный его лучше использовать в качестве иллюстрации солнца у него есть 2 параметра настройки это.

 setColor(ColorRGBA.White); 

Установка цвета освещения в нашем случае это белый.

sun.setDirection(new Vector3f(-100f,-100f,-100f).normalizeLocal());

Установка направления источника света .

AmbientLight(Окружающий свет) — этот источник света используется практически везде он равномерно освещает все объекты  и он имеет 1 параметр это.

 setColor(ColorRGBA.White.mult(0.2f)); 

Установка цвета освещения в нашем случае это белый где входящий параметр функции mult(0.2f) определяет яркость освещения.

Ну теперь немного скриншотов.

Использование (AmbientLight) окружающий свет.

1

Использование (DirectionLight) направленный свет.

2

Использование (AmbientLight and DirectionLight) окружающий и направленный источник света.

3

И того

Как вы видите в совокупности эти источники света предают модели реалистичности отображения , AmbientLight  он равномерно распределяет яркость по всей плоскости модели , но а DirectionLight как я говорил можно использовать в виде солнца но и не только ,  красная стрелка указывает на направление света.

Спасибо за внимание !!!

Добавить комментарий

jMonkeyEngine.ru © 2017. Все права сохранены.