SlideShare a Scribd company logo
Series 40 Developer Training
Getting Started with 3D Game
Development on Nokia Series 40 Asha
Phones

Michael Samarin, Ph.D
Director,
Developer Training and Evangelism
Futurice Oy
Resurrect
                                         Walking
    Bring      Interest to
                                       Through 3D
Attention to   Mobile Java
                               Brief    Examples
Real 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 JSR
Enter JSR-184   › Very compact API
                › Very fast development
        M3G     › Optimized for small memory
                  and budget CPU
                › Excellent implementation on
                  Series 40
M3G Tour
APIs and Tools
Lightweight API, only 30 classes
AnimationController   IndexBuffer        RayIntersection
AnimationTrack        KeyframeSequence   SkinnedMesh
Appearance            Light              Sprite3D
Background            Loader             Texture2D
Camera                Material           Transform
CompositingMode       Mesh               Transformable
Fog                   MorphingMesh       TriangleStripArray
Graphics3D            Node               VertexArray
Group                 Object3D           VertexBuffer
Image2D               PolygonMode        World
› Immediate mode
           › Similar to OpenGL ideology

        › Retained mode

Modes      › 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 Mesh


World                   Skinned Mesh
                                       Sprite 3D
                           Group
                                       Sprite 3D   User Object
          Group           Camera


                           Light
› World
                  › Background
               › Morphing and Skinned Mesh
       Most       › Animated Geometry Objects
 Interesting   › Mesh
Scene 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() {

     }

}
Claus
Hö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
             Graph
M3G 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, 128x160
Consider   › 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!




  @MichaelSamarin
http://www.futurice.com

More Related Content

What's hot

libGDX: Simple Frame Animation
libGDX: Simple Frame AnimationlibGDX: Simple Frame Animation
libGDX: Simple Frame AnimationJussi Pohjolainen
 
HoloLens Programming Tutorial: AirTap & Spatial Mapping
HoloLens Programming Tutorial: AirTap & Spatial MappingHoloLens Programming Tutorial: AirTap & Spatial Mapping
HoloLens Programming Tutorial: AirTap & Spatial MappingTakashi Yoshinaga
 
Geometry Shader-based Bump Mapping Setup
Geometry Shader-based Bump Mapping SetupGeometry Shader-based Bump Mapping Setup
Geometry Shader-based Bump Mapping SetupMark Kilgard
 
CUDA by Example : Constant Memory and Events : Notes
CUDA by Example : Constant Memory and Events : NotesCUDA by Example : Constant Memory and Events : Notes
CUDA by Example : Constant Memory and Events : NotesSubhajit Sahu
 
Implementing a Simple Game using libGDX
Implementing a Simple Game using libGDXImplementing a Simple Game using libGDX
Implementing a Simple Game using libGDXJussi Pohjolainen
 
OpenGL L07-Skybox and Terrian
OpenGL L07-Skybox and TerrianOpenGL L07-Skybox and Terrian
OpenGL L07-Skybox and TerrianMohammad Shaker
 
"Используем MetricKit в бою" / Марина Звягина (Vivid Money)
"Используем MetricKit в бою" / Марина Звягина (Vivid Money)"Используем MetricKit в бою" / Марина Звягина (Vivid Money)
"Используем MetricKit в бою" / Марина Звягина (Vivid Money)Egor Petrov
 
Gdc2011 direct x 11 rendering in battlefield 3
Gdc2011 direct x 11 rendering in battlefield 3Gdc2011 direct x 11 rendering in battlefield 3
Gdc2011 direct x 11 rendering in battlefield 3drandom
 
Gdc09 Minigames
Gdc09 MinigamesGdc09 Minigames
Gdc09 MinigamesSusan Gold
 
Shadow Volumes on Programmable Graphics Hardware
Shadow Volumes on Programmable Graphics HardwareShadow Volumes on Programmable Graphics Hardware
Shadow Volumes on Programmable Graphics Hardwarestefan_b
 
Custom SRP and graphics workflows - Unite Copenhagen 2019
Custom SRP and graphics workflows - Unite Copenhagen 2019Custom SRP and graphics workflows - Unite Copenhagen 2019
Custom SRP and graphics workflows - Unite Copenhagen 2019Unity Technologies
 
[C++ GUI Programming with Qt4] chap8
[C++ GUI Programming with Qt4] chap8[C++ GUI Programming with Qt4] chap8
[C++ GUI Programming with Qt4] chap8Picker Weng
 

What's hot (15)

libGDX: Simple Frame Animation
libGDX: Simple Frame AnimationlibGDX: Simple Frame Animation
libGDX: Simple Frame Animation
 
HoloLens Programming Tutorial: AirTap & Spatial Mapping
HoloLens Programming Tutorial: AirTap & Spatial MappingHoloLens Programming Tutorial: AirTap & Spatial Mapping
HoloLens Programming Tutorial: AirTap & Spatial Mapping
 
Geometry Shader-based Bump Mapping Setup
Geometry Shader-based Bump Mapping SetupGeometry Shader-based Bump Mapping Setup
Geometry Shader-based Bump Mapping Setup
 
libGDX: Tiled Maps
libGDX: Tiled MapslibGDX: Tiled Maps
libGDX: Tiled Maps
 
CUDA by Example : Constant Memory and Events : Notes
CUDA by Example : Constant Memory and Events : NotesCUDA by Example : Constant Memory and Events : Notes
CUDA by Example : Constant Memory and Events : Notes
 
Implementing a Simple Game using libGDX
Implementing a Simple Game using libGDXImplementing a Simple Game using libGDX
Implementing a Simple Game using libGDX
 
OpenGL L07-Skybox and Terrian
OpenGL L07-Skybox and TerrianOpenGL L07-Skybox and Terrian
OpenGL L07-Skybox and Terrian
 
"Используем MetricKit в бою" / Марина Звягина (Vivid Money)
"Используем MetricKit в бою" / Марина Звягина (Vivid Money)"Используем MetricKit в бою" / Марина Звягина (Vivid Money)
"Используем MetricKit в бою" / Марина Звягина (Vivid Money)
 
Gdc2011 direct x 11 rendering in battlefield 3
Gdc2011 direct x 11 rendering in battlefield 3Gdc2011 direct x 11 rendering in battlefield 3
Gdc2011 direct x 11 rendering in battlefield 3
 
Gdc09 Minigames
Gdc09 MinigamesGdc09 Minigames
Gdc09 Minigames
 
Cross Platform Qt
Cross Platform QtCross Platform Qt
Cross Platform Qt
 
Shadow Volumes on Programmable Graphics Hardware
Shadow Volumes on Programmable Graphics HardwareShadow Volumes on Programmable Graphics Hardware
Shadow Volumes on Programmable Graphics Hardware
 
Custom SRP and graphics workflows - Unite Copenhagen 2019
Custom SRP and graphics workflows - Unite Copenhagen 2019Custom SRP and graphics workflows - Unite Copenhagen 2019
Custom SRP and graphics workflows - Unite Copenhagen 2019
 
[C++ GUI Programming with Qt4] chap8
[C++ GUI Programming with Qt4] chap8[C++ GUI Programming with Qt4] chap8
[C++ GUI Programming with Qt4] chap8
 
GLSL
GLSLGLSL
GLSL
 

Viewers also liked

The complete srs documentation of our developed game.
The complete srs documentation of our developed game. The complete srs documentation of our developed game.
The complete srs documentation of our developed game. Isfand yar Khan
 
Android Application And Unity3D Game Documentation
Android Application And Unity3D Game DocumentationAndroid Application And Unity3D Game Documentation
Android Application And Unity3D Game DocumentationSneh Raval
 
Game Development Step by Step
Game Development Step by StepGame Development Step by Step
Game Development Step by StepBayu Sembada
 
An Introduction To Game development
An Introduction To Game developmentAn Introduction To Game development
An Introduction To Game developmentAhmed
 
Final project report of a game
Final project report of a gameFinal project report of a game
Final project report of a gameNadia Nahar
 

Viewers also liked (6)

The complete srs documentation of our developed game.
The complete srs documentation of our developed game. The complete srs documentation of our developed game.
The complete srs documentation of our developed game.
 
Android Application And Unity3D Game Documentation
Android Application And Unity3D Game DocumentationAndroid Application And Unity3D Game Documentation
Android Application And Unity3D Game Documentation
 
Game Development Step by Step
Game Development Step by StepGame Development Step by Step
Game Development Step by Step
 
Introduction to Game Development
Introduction to Game DevelopmentIntroduction to Game Development
Introduction to Game Development
 
An Introduction To Game development
An Introduction To Game developmentAn Introduction To Game development
An Introduction To Game development
 
Final project report of a game
Final project report of a gameFinal project report of a game
Final project report of a game
 

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

2011.05.27 ACC 기술세미나 : Adobe Flash Builder 4.5를 환경에서 Molehill 3D를 이용한 개발 소개
2011.05.27 ACC 기술세미나 : Adobe Flash Builder 4.5를 환경에서 Molehill 3D를 이용한 개발 소개2011.05.27 ACC 기술세미나 : Adobe Flash Builder 4.5를 환경에서 Molehill 3D를 이용한 개발 소개
2011.05.27 ACC 기술세미나 : Adobe Flash Builder 4.5를 환경에서 Molehill 3D를 이용한 개발 소개Yongho Ji
 
WPF L03-3D Rendering and 3D Animation
WPF L03-3D Rendering and 3D AnimationWPF L03-3D Rendering and 3D Animation
WPF L03-3D Rendering and 3D AnimationMohammad Shaker
 
Unconventional webapps with gwt:elemental & html5
Unconventional webapps with gwt:elemental & html5Unconventional webapps with gwt:elemental & html5
Unconventional webapps with gwt:elemental & html5firenze-gtug
 
Java ME - 08 - Mobile 3D Graphics
Java ME - 08 - Mobile 3D GraphicsJava ME - 08 - Mobile 3D Graphics
Java ME - 08 - Mobile 3D GraphicsAndreas Jakl
 
Trident International Graphics Workshop 2014 1/5
Trident International Graphics Workshop 2014 1/5Trident International Graphics Workshop 2014 1/5
Trident International Graphics Workshop 2014 1/5Takao Wada
 
Mochi London 2011
Mochi London 2011Mochi London 2011
Mochi London 2011Mike Jones
 
Game development with Cocos2d
Game development with Cocos2dGame development with Cocos2d
Game development with Cocos2dVinsol
 
Useful Tools for Making Video Games - XNA (2008)
Useful Tools for Making Video Games - XNA (2008)Useful Tools for Making Video Games - XNA (2008)
Useful Tools for Making Video Games - XNA (2008)Korhan Bircan
 
Augmented Reality With FlarToolkit and Papervision3D
Augmented Reality With FlarToolkit and Papervision3DAugmented Reality With FlarToolkit and Papervision3D
Augmented Reality With FlarToolkit and Papervision3DRoman Protsyk
 
Game development with_lib_gdx
Game development with_lib_gdxGame development with_lib_gdx
Game development with_lib_gdxGabriel Grill
 
HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?Ankara JUG
 
426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer ToolsMark Billinghurst
 
14multithreaded Graphics
14multithreaded Graphics14multithreaded Graphics
14multithreaded GraphicsAdil Jafri
 
Game Development for Nokia Asha Devices with Java ME #2
Game Development for Nokia Asha Devices with Java ME #2Game Development for Nokia Asha Devices with Java ME #2
Game Development for Nokia Asha Devices with Java ME #2Marlon Luz
 
How to Create Custom Shaders in Flutter?
How to Create Custom Shaders in Flutter?How to Create Custom Shaders in Flutter?
How to Create Custom Shaders in Flutter?Flutter Agency
 

Similar to Getting Started with 3D Game Development on Nokia Series 40 Asha Phones (20)

2011.05.27 ACC 기술세미나 : Adobe Flash Builder 4.5를 환경에서 Molehill 3D를 이용한 개발 소개
2011.05.27 ACC 기술세미나 : Adobe Flash Builder 4.5를 환경에서 Molehill 3D를 이용한 개발 소개2011.05.27 ACC 기술세미나 : Adobe Flash Builder 4.5를 환경에서 Molehill 3D를 이용한 개발 소개
2011.05.27 ACC 기술세미나 : Adobe Flash Builder 4.5를 환경에서 Molehill 3D를 이용한 개발 소개
 
WPF L03-3D Rendering and 3D Animation
WPF L03-3D Rendering and 3D AnimationWPF L03-3D Rendering and 3D Animation
WPF L03-3D Rendering and 3D Animation
 
Unconventional webapps with gwt:elemental & html5
Unconventional webapps with gwt:elemental & html5Unconventional webapps with gwt:elemental & html5
Unconventional webapps with gwt:elemental & html5
 
WebGL 3D player
WebGL 3D playerWebGL 3D player
WebGL 3D player
 
Java ME - 08 - Mobile 3D Graphics
Java ME - 08 - Mobile 3D GraphicsJava ME - 08 - Mobile 3D Graphics
Java ME - 08 - Mobile 3D Graphics
 
Trident International Graphics Workshop 2014 1/5
Trident International Graphics Workshop 2014 1/5Trident International Graphics Workshop 2014 1/5
Trident International Graphics Workshop 2014 1/5
 
Mochi London 2011
Mochi London 2011Mochi London 2011
Mochi London 2011
 
3D everywhere
3D everywhere3D everywhere
3D everywhere
 
Game development with Cocos2d
Game development with Cocos2dGame development with Cocos2d
Game development with Cocos2d
 
Useful Tools for Making Video Games - XNA (2008)
Useful Tools for Making Video Games - XNA (2008)Useful Tools for Making Video Games - XNA (2008)
Useful Tools for Making Video Games - XNA (2008)
 
Augmented Reality With FlarToolkit and Papervision3D
Augmented Reality With FlarToolkit and Papervision3DAugmented Reality With FlarToolkit and Papervision3D
Augmented Reality With FlarToolkit and Papervision3D
 
Three.js basics
Three.js basicsThree.js basics
Three.js basics
 
Game development with_lib_gdx
Game development with_lib_gdxGame development with_lib_gdx
Game development with_lib_gdx
 
HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?
 
426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools
 
Cocos2d 소개 - Korea Linux Forum 2014
Cocos2d 소개 - Korea Linux Forum 2014Cocos2d 소개 - Korea Linux Forum 2014
Cocos2d 소개 - Korea Linux Forum 2014
 
MIDP: Game API
MIDP: Game APIMIDP: Game API
MIDP: Game API
 
14multithreaded Graphics
14multithreaded Graphics14multithreaded Graphics
14multithreaded Graphics
 
Game Development for Nokia Asha Devices with Java ME #2
Game Development for Nokia Asha Devices with Java ME #2Game Development for Nokia Asha Devices with Java ME #2
Game Development for Nokia Asha Devices with Java ME #2
 
How to Create Custom Shaders in Flutter?
How to Create Custom Shaders in Flutter?How to Create Custom Shaders in Flutter?
How to Create Custom Shaders in Flutter?
 

More from Microsoft Mobile Developer

Intro to Nokia X software platform 2.0 and tools
Intro to Nokia X software platform 2.0 and toolsIntro to Nokia X software platform 2.0 and tools
Intro to Nokia X software platform 2.0 and toolsMicrosoft Mobile Developer
 
Location based services for Nokia X and Nokia Asha using Geo2tag
Location based services for Nokia X and Nokia Asha using Geo2tagLocation based services for Nokia X and Nokia Asha using Geo2tag
Location based services for Nokia X and Nokia Asha using Geo2tagMicrosoft Mobile Developer
 
Lumia App Labs: Lessons learned from 50 windows phone 8 design consultations
Lumia App Labs: Lessons learned from 50 windows phone 8 design consultationsLumia App Labs: Lessons learned from 50 windows phone 8 design consultations
Lumia App Labs: Lessons learned from 50 windows phone 8 design consultationsMicrosoft Mobile Developer
 
Windows Phone 8 speech: parliamo con la nostra app
Windows Phone 8 speech: parliamo con la nostra appWindows Phone 8 speech: parliamo con la nostra app
Windows Phone 8 speech: parliamo con la nostra appMicrosoft Mobile Developer
 
La pubblicazione di un'applicazione sullo store
La pubblicazione di un'applicazione sullo storeLa pubblicazione di un'applicazione sullo store
La pubblicazione di un'applicazione sullo storeMicrosoft Mobile Developer
 
Il pattern mvvm come strutturare al meglio il vostro progetto
Il pattern mvvm come strutturare al meglio il vostro progettoIl pattern mvvm come strutturare al meglio il vostro progetto
Il pattern mvvm come strutturare al meglio il vostro progettoMicrosoft Mobile Developer
 

More from Microsoft Mobile Developer (20)

Intro to Nokia X software platform 2.0 and tools
Intro to Nokia X software platform 2.0 and toolsIntro to Nokia X software platform 2.0 and tools
Intro to Nokia X software platform 2.0 and tools
 
Lumia App Labs: Lumia SensorCore SDK beta
Lumia App Labs: Lumia SensorCore SDK betaLumia App Labs: Lumia SensorCore SDK beta
Lumia App Labs: Lumia SensorCore SDK beta
 
Nokia Asha from idea to app - Imaging
Nokia Asha from idea to app - ImagingNokia Asha from idea to app - Imaging
Nokia Asha from idea to app - Imaging
 
Healthcare apps for Nokia X and Nokia Asha
Healthcare apps for Nokia X and Nokia AshaHealthcare apps for Nokia X and Nokia Asha
Healthcare apps for Nokia X and Nokia Asha
 
Push notifications on Nokia X
Push notifications on Nokia XPush notifications on Nokia X
Push notifications on Nokia X
 
DIY Nokia Asha app usability studies
DIY Nokia Asha app usability studiesDIY Nokia Asha app usability studies
DIY Nokia Asha app usability studies
 
Lessons learned from Nokia X UI reviews
Lessons learned from Nokia X UI reviewsLessons learned from Nokia X UI reviews
Lessons learned from Nokia X UI reviews
 
Location based services for Nokia X and Nokia Asha using Geo2tag
Location based services for Nokia X and Nokia Asha using Geo2tagLocation based services for Nokia X and Nokia Asha using Geo2tag
Location based services for Nokia X and Nokia Asha using Geo2tag
 
HERE Maps for the Nokia X platform
HERE Maps for the Nokia X platformHERE Maps for the Nokia X platform
HERE Maps for the Nokia X platform
 
Nokia In-App Payment - UX considerations
Nokia In-App Payment - UX considerationsNokia In-App Payment - UX considerations
Nokia In-App Payment - UX considerations
 
Introduction to Nokia Asha SDK 1.2 (beta)
Introduction to Nokia Asha SDK 1.2 (beta)Introduction to Nokia Asha SDK 1.2 (beta)
Introduction to Nokia Asha SDK 1.2 (beta)
 
UX considerations when porting to Nokia X
UX considerations when porting to Nokia XUX considerations when porting to Nokia X
UX considerations when porting to Nokia X
 
Kids' games and educational app design
Kids' games and educational app designKids' games and educational app design
Kids' games and educational app design
 
Nokia X: opportunities for developers
Nokia X: opportunities for developersNokia X: opportunities for developers
Nokia X: opportunities for developers
 
Lumia App Labs: Nokia Imaging SDK 1.1
Lumia App Labs: Nokia Imaging SDK 1.1Lumia App Labs: Nokia Imaging SDK 1.1
Lumia App Labs: Nokia Imaging SDK 1.1
 
Intro to Nokia X software platform and tools
Intro to Nokia X software platform and toolsIntro to Nokia X software platform and tools
Intro to Nokia X software platform and tools
 
Lumia App Labs: Lessons learned from 50 windows phone 8 design consultations
Lumia App Labs: Lessons learned from 50 windows phone 8 design consultationsLumia App Labs: Lessons learned from 50 windows phone 8 design consultations
Lumia App Labs: Lessons learned from 50 windows phone 8 design consultations
 
Windows Phone 8 speech: parliamo con la nostra app
Windows Phone 8 speech: parliamo con la nostra appWindows Phone 8 speech: parliamo con la nostra app
Windows Phone 8 speech: parliamo con la nostra app
 
La pubblicazione di un'applicazione sullo store
La pubblicazione di un'applicazione sullo storeLa pubblicazione di un'applicazione sullo store
La pubblicazione di un'applicazione sullo store
 
Il pattern mvvm come strutturare al meglio il vostro progetto
Il pattern mvvm come strutturare al meglio il vostro progettoIl pattern mvvm come strutturare al meglio il vostro progetto
Il pattern mvvm come strutturare al meglio il vostro progetto
 

Recently uploaded

Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
 
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀DianaGray10
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...Product School
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...Product School
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1DianaGray10
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...Product School
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...CzechDreamin
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Product School
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Product School
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutesconfluent
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesThousandEyes
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
 
In-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT ProfessionalsIn-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT ProfessionalsExpeed Software
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaRTTS
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...CzechDreamin
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2DianaGray10
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...Elena Simperl
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyJohn Staveley
 

Recently uploaded (20)

Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
In-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT ProfessionalsIn-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT Professionals
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John Staveley
 

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

  • 1. Series 40 Developer Training Getting Started with 3D Game Development on Nokia Series 40 Asha Phones Michael Samarin, Ph.D Director, Developer Training and Evangelism Futurice Oy
  • 2. Resurrect Walking Bring Interest to Through 3D Attention to Mobile Java Brief Examples Real 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
  • 3. 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
  • 4.
  • 6. Nokia X3-02 Nokia Asha 303 3D: 30 to 40 FPS
  • 8. › Object-Oriented 3D › Scene Graph based › Optional MIDP JSR Enter JSR-184 › Very compact API › Very fast development M3G › Optimized for small memory and budget CPU › Excellent implementation on Series 40
  • 10. Lightweight API, only 30 classes AnimationController IndexBuffer RayIntersection AnimationTrack KeyframeSequence SkinnedMesh Appearance Light Sprite3D Background Loader Texture2D Camera Material Transform CompositingMode Mesh Transformable Fog MorphingMesh TriangleStripArray Graphics3D Node VertexArray Group Object3D VertexBuffer Image2D PolygonMode World
  • 11. › Immediate mode › Similar to OpenGL ideology › Retained mode Modes › Scene Graph based › Entire Scene Graph can be restored from file › Well defined M3G format › Can be freely mixed
  • 12. Scene Graph Background Mesh Group Morphing Mesh World Skinned Mesh Sprite 3D Group Sprite 3D User Object Group Camera Light
  • 13. › World › Background › Morphing and Skinned Mesh Most › Animated Geometry Objects Interesting › Mesh Scene Graph Elements › 3D Geometry of Visible Object › Sprite 3D › 2D image in 3D space
  • 14. 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) { } }
  • 15. public class Canvas3D extends Canvas implements Runnable { public Canvas3D(){ } public void paint(Graphics g) { } public void run() { } }
  • 16. 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; } }
  • 17. 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();
  • 18. 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(); } }
  • 19. public class Canvas3D extends Canvas implements Runnable { public Canvas3D(){ while (running){ } repaint(); public void paint(Graphics g) { Thread.sleep(20); } } public void run() { } }
  • 20. Claus Höfele http://www.ibm.com/developerworks/wireless/library/wi-mobile1/ http://www.ibm.com/developerworks/wireless/library/wi-mobile2/
  • 21. 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 };
  • 22. // 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});
  • 23. 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);
  • 24. 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);
  • 28. › Serialized entire Scene Graph M3G File › Animations, Textures, etc. Format › Compressed › Well defined structure
  • 29. 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();
  • 31. › Blender Plugin for 2.49 › Created by Nelson Games: M3G Export › http://www.nelson-games.de
  • 33. M3GToolkit › http://www.java4ever.com/
  • 34. “Bebe” › Blender Scene Model › Created by David Sanguinett
  • 39. › Java Heap size (1 – 4 MB) › JAR file size ( 1 – 2 MB) › CPU speed › Screen Size 240x 320, 320x240, 128x160 Consider › Input Type: T9, Qwerty, Touch-And-Type › Use Nokia Device Matrix › Remote Device Access
  • 40.
  • 47. Thank you! @MichaelSamarin http://www.futurice.com