• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Getting Started with 3D Game Development on Nokia Series 40 Asha Phones
 

Getting Started with 3D Game Development on Nokia Series 40 Asha Phones

on

  • 3,442 views

Learn how to make real 3D games for Nokia Series 40 Asha phones using modern implementations of Mobile Java APIs. Presenter Michael Samarin of Futurice will start by introducing the details of the 3D ...

Learn how to make real 3D games for Nokia Series 40 Asha phones using modern implementations of Mobile Java APIs. Presenter Michael Samarin of Futurice will start by introducing the details of the 3D game-making process: planning and building game levels; lighting and degree of realism; modelling tools vs. manual character creation; animations and behaviour of game objects; and balancing memory management against texture detail. You will learn game interface strategies including touch, touch-and-type, and keyboard only. Michael will share tips to optimize the performance of your games across different screen sizes and models of Series 40 phones. He’ll conclude with an overview of Mobile Java 3D performance on the latest range of Nokia Series 40 Asha phones.

Statistics

Views

Total Views
3,442
Views on SlideShare
3,440
Embed Views
2

Actions

Likes
3
Downloads
111
Comments
1

1 Embed 2

http://www.slashdocs.com 2

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Getting Started with 3D Game Development on Nokia Series 40 Asha Phones Getting Started with 3D Game Development on Nokia Series 40 Asha Phones Presentation Transcript

    • Series 40 Developer TrainingGetting Started with 3D GameDevelopment on Nokia Series 40 AshaPhonesMichael Samarin, Ph.DDirector,Developer Training and EvangelismFuturice Oy
    • Resurrect Walking Bring Interest to Through 3DAttention to Mobile Java Brief ExamplesReal 3D APIs 3D JSR-184 with on JSR-184 (M3G) NetBeans Nokia (M3G) Tour and Nokia Series 40 For Game SDK 1.1 for (Asha) Making Java
    • Series 40› 675 Million Devices› 3.9 Million Daily Downloads› Price range 35 – 140 Euro› Gaming Studios to compete with: EA, Gameloft, Rovio, India Games
    • http://youtu.be/AnD0nfAwNUY
    • Nokia X3-02 Nokia Asha 303 3D: 30 to 40 FPS
    • http://youtu.be/4wsGh-AOSzE
    • › Object-Oriented 3D › Scene Graph based › Optional MIDP JSREnter JSR-184 › Very compact API › Very fast development M3G › Optimized for small memory and budget CPU › Excellent implementation on Series 40
    • M3G TourAPIs and Tools
    • Lightweight API, only 30 classesAnimationController IndexBuffer RayIntersectionAnimationTrack KeyframeSequence SkinnedMeshAppearance Light Sprite3DBackground Loader Texture2DCamera Material TransformCompositingMode Mesh TransformableFog MorphingMesh TriangleStripArrayGraphics3D Node VertexArrayGroup Object3D VertexBufferImage2D PolygonMode World
    • › Immediate mode › Similar to OpenGL ideology › Retained modeModes › Scene Graph based › Entire Scene Graph can be restored from file › Well defined M3G format › Can be freely mixed
    • Scene Graph Background Mesh Group Morphing MeshWorld Skinned Mesh Sprite 3D Group Sprite 3D User Object Group Camera Light
    • › World › Background › Morphing and Skinned Mesh Most › Animated Geometry Objects Interesting › MeshScene Graph Elements › 3D Geometry of Visible Object › Sprite 3D › 2D image in 3D space
    • public class SimpleWorld extends MIDlet { Canvas3D canvas3D; public void startApp() { canvas3D = new Canvas3D(); Display.getDisplay(this).setCurrent(canvas3D); } public void pauseApp() { } public void destroyApp(boolean unconditional) { }}
    • public class Canvas3D extends Canvas implements Runnable { public Canvas3D(){ } public void paint(Graphics g) { } public void run() { }}
    • public class Canvas3D extends Canvas implements Runnable { private Thread thread; public Canvas3D(){ private long startTime; } private Graphics3D graphics3D; public void paint(Graphics g) { private World world; } private Camera camera; public void run() { private boolean running = false; }}
    • setFullScreenMode(true); thread = newThread(this);public class Canvas3D extends Canvas startTime= System.currentTimeMillis() implements Runnable { graphics3D= Graphics3D.getInstance(); public Canvas3D(){ world = new World(); } camera = new Camera(); public void paint(Graphics g) { floataspect = (float) getWidth()/ (float) getHeight(); } camera.setPerspective(30.0f,aspect, 1.0f, 1000.0f); public void run() { world.addChild(camera); } world.setActiveCamera(camera);} running = true; thread.start();
    • public class Canvas3D extends Canvas implements Runnable { graphics3D.bindTarget(g); public Canvas3D(){ world.animate( } (int)(System.currentTimeMillis() - public void paint(Graphics g) { startTime)); } graphics3D.render(world); public void run() { graphics3D.releaseTarget(); }}
    • public class Canvas3D extends Canvas implements Runnable { public Canvas3D(){ while (running){ } repaint(); public void paint(Graphics g) { Thread.sleep(20); } } public void run() { }}
    • ClausHöfele http://www.ibm.com/developerworks/wireless/library/wi-mobile1/ http://www.ibm.com/developerworks/wireless/library/wi-mobile2/
    • private static final byte[] VERTEX_POSITIONS = { -1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1};private static int[] TRIANGLE_INDICES = { 0, 1, 2, 3, 7, 1, 5, 4, 7, 6, 2, 4, 0, 1};
    • // Create vertex data.VertexBuffer cubeVertexData = new VertexBuffer();cubeVertexData.setDefaultColor(0x000000FF);VertexArray vertexPositions = new VertexArray(VERTEX_POSITIONS.length / 3, 3, 1);vertexPositions.set(0, VERTEX_POSITIONS.length / 3,VERTEX_POSITIONS);cubeVertexData.setPositions(vertexPositions, 1.0f, null);// Create the triangles that define the cube; the indices point to// vertices in VERTEX_POSITIONS.TriangleStripArray cubeTriangles = new TriangleStripArray( TRIANGLE_INDICES, new int[]{TRIANGLE_INDICES.length});
    • Material material = new Material();material.setVertexColorTrackingEnable(true);Appearance appearance = newAppearance();appearance.setMaterial(material);// Create a Mesh that represents the cube.Mesh cubeMesh = new Mesh(cubeVertexData, cubeTriangles, appearance);cubeMesh.setOrientation(20.0f, 1.0f, 2.0f, 3.0f);cubeMesh.setUserID(1);world.addChild(cubeMesh);
    • Light light = new Light();light.setMode(Light.SPOT);light.setSpotAngle(80);light.setSpotExponent(0);light.setTranslation(0.0f, 0.0f, 3.0f);world.addChild(light);
    • Live Demo
    • http://youtu.be/JAP0y9moeao
    • http://youtu.be/i51juyXAW-4
    • › Serialized entire Scene GraphM3G File › Animations, Textures, etc. Format › Compressed › Well defined structure
    • setFullScreenMode(true);public class Canvas3D extends Canvas thread = newThread(this); implements Runnable { startTime= System.currentTimeMillis() public Canvas3D(){ graphics3D= Graphics3D.getInstance(); } Object3D[]objects = Loader.load("/cube.m3g"); public void paint(Graphics g) { world = (World)objects[0]; } Camera camera = world.getActiveCamera(); floataspect = (float) getWidth()/ (float) getHeight(); public void run() { camera.setPerspective(60.0f,aspect, 1.0f, 1000.0f); } running = true;} thread.start();
    • Blender 2.49
    • › Blender Plugin for 2.49 › Created by Nelson Games:M3G Export › http://www.nelson-games.de
    • Live Demo
    • M3GToolkit › http://www.java4ever.com/
    • “Bebe” › Blender Scene Model › Created by David Sanguinett
    • Live Demo
    • http://youtu.be/V6Zy1NFFGrk
    • http://www.developer.nokia.com/Resources/Library/Java
    • Live Demo
    • › Java Heap size (1 – 4 MB) › JAR file size ( 1 – 2 MB) › CPU speed › Screen Size 240x 320, 320x240, 128x160Consider › Input Type: T9, Qwerty, Touch-And-Type › Use Nokia Device Matrix › Remote Device Access
    • Textures by: http://www.filterforge.com, http://www.squidoo.com
    • http://youtu.be/O36PQOGMqMM
    • Nokia C2-02
    • http://youtu.be/aolNL0jQ940
    • http://youtu.be/3a-LqHrVbko
    • http://youtu.be/Z8B07rp0N_I
    • Thank you! @MichaelSamarinhttp://www.futurice.com