Game Programming

Report
Loading assets, Materials, Lighting &
Shading, Camera, Game Loop, Input
Handling
Eriq Muhammad Adams J.
[email protected]
Informatics Engineering
University of Brawijaya
Agenda








Loading assets
Materials
Lighting & Shading
Camera
Game Loop
Input Handling
Sky
Demo
Loading Assets
 JME3 comes with a handy asset manager that helps
you keep your assets structured.











assets/Interface/
assets/MatDefs/
assets/Materials/
assets/Models/
assets/Scenes/
assets/Shaders/
assets/Sounds/
assets/Textures/
build.xml
src/...
dist/...
Loading Assets (cont.)
 Loading Textures
Add box image
texture
“BrickWall.jpg”
Loading Assets (cont.)
 Loading Texts and Fonts
Load
default font
Loading Assets (cont.)
 Loading an Ogre XML Model
Load Ogre
Model
Loading Assets (cont.)
 Loading Assets From Custom Paths
Load Local
Zip File
Load Zip
File via
HTTP
Loading Assets (cont.)
 Load models with materials
Ogre XML
(.mesh.xml) and
JME Binary (.j3o)
Model included with
Materials included
.obj model didn’t
 Load models without materials
came with
materials
Loading Assets (cont.)
 Load Ogre Scene
Load ogre
scene
 How to export OgreXML scenes from Blender to JME:
 https://docs.google.com/fileview?id=0B9hhZie2DfENDBlZDU5MzgtNzlkYi00YmQzLTliNTQtNzZhYTJhYj
EzNWNk&hl=en
Materials
 Default Materials Definition (in jme/coredata/Common)
Materials (cont.)
 Simple Unshaded Texture
Create
Unshaded
Material
Materials (cont.)
 Transparent Unshaded Texture
Create
Unshaded
Material
Activate
Transparency
Materials (cont.)
 You have to use lit material to get nice looks. n a lit
material, the standard texture layer is referred to as
Diffuse Map, any material can have it. A lit material can
additionally have lighting effects such as Shininess
used together with the Specular Map layer, and even a
realistically bumpy or cracked surface with help of the
Normal Map layer.
Materials (cont.)
Materials (cont.)
Create
Lighting
Material
Set Diffuse
Map Texture
Set Normal
Map Texture
Set Shininess
Lighting & Shading
 JME 3 has three types of light : point light, ambient
light, directional light, and spot light.
 A PointLight has a location and shines from there in
all directions as far as its radius reaches, like a lamp.
The light intensity decreases with increased distance
from the light source.
Create
Point Light
Lighting and Shading (cont.)
 A DirectionalLight has no position, only a direction. It
is considered “infinitely” far away and sends out
parallel beams of light. It can cast shadows. You
Create
typically use it to simulate sun light.
Directional
Light
Lighting and Shading (cont.)
 An AmbientLight influences the brightness of the
whole scene globally. It has no direction and no
location, and does not cast any shadow.
Create
Ambient Light
 SpotLight is WIP (Work In Progress) …
Lighting and Shading (cont.)
 BasicShadowRenderer, Use the Shadow Renderer to make
textured scene nodes cast and receive shadows.
Switch Off default
Shadow and Add
BasicShadowRenderer
Scene Processor
http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/light/TestShadow.java
Lighting and Shading (cont.)
Then you need set shadows for every scene that need
shadows
Lighting and Shading (cont.)
 PSSM shadow renderer, The PSSM shadow renderer
can cast real-time shadows on curved surfaces. To
activate it, add a jME SceneProcessor named
com.jme3.shadow.PssmShadowRenderer to the
viewPort
Lighting and Shading (cont.)
 You can set the following properties on the pssmRenderer
object:
 setDirection(Vector3f) – the direction of the light
 setLambda(0.65f) – Factor to use to reduce the split size
 setShadowIntensity(0.7f) – shadow darkness (1 black, 0
invisible)
 setShadowZextend() – distance how far away from camera
shadows will still be computed
 Then you need set shadows for every scene that need
shadows

http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/light/TestPssmShadow.java
Camera
 JME 3 have 3 types of built-in camera : Default Camera, FlyBy
Camera, Chase Camera.
 Default Camera, The default com.jme3.renderer.Camera object is cam in
com.jme3.app.Application. Has default settings.
 Width and height are set to the current Application's
settings.getWidth() and settings.getHeight() values.
 Frustum Perspective:






Frame of view angle of 45° along the Y axis
Aspect ratio of width divided by height
Near view plane of 1 wu
Far view plane of 1000 wu
Start location at (0f, 0f, 10f).
Start direction is looking at the origin.
Camera (cont.)
Camera (cont.)
 FlyBy Camera, The flyby camera is an extension of the
default camera in com.jme3.app.SimpleApplication. It
is preconfigured to respond to the WASD keys for
walking forwards and backwards, and for strafing to
the sides. Move the mouse to rotate the camera,
scroll the mouse wheel for zooming in or out. The QZ
keys raise or lower the camera.
Camera (cont.)
Camera (cont.)
 Chase Camera, jME3 also supports a Chase Cam that
can follow a moving target Spatial
(com.jme3.input.ChaseCamera).
Camera (cont.)
 Multiple Camera Views, You can split the screen and
look into the 3D scene from different camera angles
at the same time. In this example, we create four
views (2×2) with the same aspect ratio as the normal
view, but half the size.
Camera (cont.)
 Setup first view
 Setup 2nd – 4th view
Camera (cont.)
 Resizing and positioning viewport.
 See TestMultiViews.java
Game Loop
1.
2.
3.
4.
Initialization (simpleInit())
If exit is requested, then cleanup and destroy
Input handling (listeners)
Update game state
 Application States update
 User update (simpleUpdate() method)
 Entity logical update (Custom Controls)
5.
render
 Application States rendering
 Scene rendering
 User rendering (simpleRender() method)
6.
Repeat (goto 2)
Input Handling
 3 types input handling that JME 3 support : Keyboard,
Mouse, and Joystick.
 Type of Trigger :
Input Handling (cont.)
Input Handling (cont.)
 Add trigger mapping
Multiple Trigger
One Action
One trigger
One Action
Input Handling (cont.)
 Create Listeners, JME 3 has 2 type of listeners :
com.jme3.input.controls.AnalogListener
Use for continuous and gradual actions.
Examples: Walk, run, rotate, accelerate vehicle, strafe, (semi-)automatic
weapon shot
JME gives you access to:
the name of the triggered action.
a gradual value between 0-9 how long the key has been pressed.
com.jme3.input.controls.ActionListener
Use for absolute “pressed or released?”, “on or off?” actions.
Examples: Pause/unpause, a rifle or revolver shot, jump, click to select.
JME gives you access to:
the name of the triggered action.
a boolean whether the key is still pressed or has just been released.
Input Handling (cont.)
 Register Mappings to Listeners, To activate the
mappings, you must register them to the Listener.
Input Handling (cont.)
 Implements Action
Sky
 You can use any Node as sky, even complex sets of
geometries and quads with animated clouds, blinking
stars, city skylines, etc. But, if you want a simple
method use SkyFactory in JME 3.
To Create Sky Box
set sphere boolean
value to false
Demo
 DemoScene.zip

similar documents