ݺߣ

ݺߣShare a Scribd company logo
Series 40 Developer Training
Введение в разработку 3D игр для
Nokia Asha телефонов



Michael Samarin, Ph.D
Director,
Developer Training and Evangelism
Futurice Oy
Восстановить
             интерес к
 Привлечь    Mobile Java
                                       Обзор 3D
внимание к        3D        Краткий
                                      Примеров в
3D API для     JSR-184      JSR-184
                                      NetBeans и
  Nokia         (M3G)        (M3G)
                                       Nokia SDK
 Series 40       для          тур
                                      1.1 for Java
  (Asha)      создания
                 игр
Series 40
» 675 Миллионов устройств
» 3.9 Миллионов скачиваний ежедневно
» Ценовые категории 35 – 140 Евро


» Игровые студии с которыми придется соревноваться: EA,
  Gameloft, Rovio, India Games
Введиние в разработку 3D игр для Nokia Asha телефонов
http://youtu.be/AnD0nfAwNUY
Nokia X3-02     Nokia Asha 303




      3D: от 30 до 40 FPS
http://youtu.be/4wsGh-AOSzE
› Объектно-Ориентированное 3D
          › Основано на Scene Graph

JSR-184   › Один из MIDP JSR
          › Очень компактное API

  M3G     › Быстрый цикл разработки
          › Оптимизировано для небольшого
            объема памяти и бюджетных CPU
          › Отличная реализация на Series 40
M3G Тур
APIs и Инструментарий
Компактное API, всего 30 классов
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
             › Аналогичен по идеологии
               OpenGL
          › Retained mode

Режимы       › Основан на Scene Graph

(modes)      › Весь Scene Graph может быть
               сохранен в / загружен из файла
             › Полноценно описан M3G
               формат
          › Режимы могут быть свободно
            использоваться
            одновременно
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
  Наиболее         › Анимированная геометрия
Интересные           объектов


Scene Graph
              ›   Mesh
                   › 3D Геометрия видимых объектов
  Элементы    ›   Sprite 3D
                   › 2D изображения в 3D
                     пространстве
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);
Демонстрация
http://youtu.be/JAP0y9moeao
http://youtu.be/i51juyXAW-4
› Сериализует полный Scene
           Graph
  M3G    › Анимации, Текстуры, итд.
Формат
Файлов   › С компрессией
         › Хорошо определенная
           структура
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
             › Автор Nelson Games:
M3G Export   › http://www.nelson-games.de
Демонстрация
M3GToolkit   › http://www.java4ever.com/
“B”   › Blender Scene
 Model   › Автор David Sanguinett
Демонстрация
http://youtu.be/V6Zy1NFFGrk
http://www.developer.nokia.com/Resources/Library/Java
Демонстрация
› Размер Java Heap (1 – 4 MB)
         › Размер JAR файла ( 1 – 2 MB)
         › Скорость процессора

Важно:   › Размер экрана: 240x 320, 320x240,
           128x160
         › Тип ввода: T9, Qwerty, Touch-And-Type
         › Nokia Device Matrix
         › Remote Device Access
Введиние в разработку 3D игр для Nokia Asha телефонов
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
Спасибо!




  @MichaelSamarin
http://www.futurice.com

More Related Content

Similar to Введиние в разработку 3D игр для Nokia Asha телефонов (20)

"Погружение в Robolectric" Дмитрий Костырев (Avito)
"Погружение в Robolectric"  Дмитрий Костырев (Avito)"Погружение в Robolectric"  Дмитрий Костырев (Avito)
"Погружение в Robolectric" Дмитрий Костырев (Avito)
AvitoTech
Знакомство с Papervision3d
Знакомство с Papervision3dЗнакомство с Papervision3d
Знакомство с Papervision3d
Igor Ruzanov
Иструментарий для быстрой разработки игр с 2 d физикой
Иструментарий для быстрой разработки игр с 2 d физикойИструментарий для быстрой разработки игр с 2 d физикой
Иструментарий для быстрой разработки игр с 2 d физикой
akimovpro
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv Startup Club
JavaFX Script Language
JavaFX Script LanguageJavaFX Script Language
JavaFX Script Language
SSA KPI
Ciklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScriptCiklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScript
Dmytro Mindra
NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript
Dmytro Mindra
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
Computer Science Club
Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"
Yandex
технология Imagine3 d 1 1
технология Imagine3 d 1 1технология Imagine3 d 1 1
технология Imagine3 d 1 1
oleg gubanov
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
Dmitri Soshnikov
Google maps for android
Google maps for androidGoogle maps for android
Google maps for android
Stfalcon Meetups
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDAЛекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
Mikhail Kurnosov
Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"
IT Event
"Погружение в Robolectric" Дмитрий Костырев (Avito)
"Погружение в Robolectric"  Дмитрий Костырев (Avito)"Погружение в Robolectric"  Дмитрий Костырев (Avito)
"Погружение в Robolectric" Дмитрий Костырев (Avito)
AvitoTech
Знакомство с Papervision3d
Знакомство с Papervision3dЗнакомство с Papervision3d
Знакомство с Papervision3d
Igor Ruzanov
Иструментарий для быстрой разработки игр с 2 d физикой
Иструментарий для быстрой разработки игр с 2 d физикойИструментарий для быстрой разработки игр с 2 d физикой
Иструментарий для быстрой разработки игр с 2 d физикой
akimovpro
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv Startup Club
JavaFX Script Language
JavaFX Script LanguageJavaFX Script Language
JavaFX Script Language
SSA KPI
Ciklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScriptCiklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScript
Dmytro Mindra
NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript
Dmytro Mindra
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
Computer Science Club
Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"
Yandex
технология Imagine3 d 1 1
технология Imagine3 d 1 1технология Imagine3 d 1 1
технология Imagine3 d 1 1
oleg gubanov
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
Dmitri Soshnikov
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDAЛекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
Mikhail Kurnosov
Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"
IT Event

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
Microsoft Mobile Developer
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
Microsoft Mobile Developer
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
Microsoft Mobile Developer
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
Microsoft Mobile Developer
Push notifications on Nokia X
Push notifications on Nokia XPush notifications on Nokia X
Push notifications on Nokia X
Microsoft Mobile Developer
DIY Nokia Asha app usability studies
DIY Nokia Asha app usability studiesDIY Nokia Asha app usability studies
DIY Nokia Asha app usability studies
Microsoft Mobile Developer
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
Microsoft 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 Geo2tag
Microsoft Mobile Developer
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
Microsoft Mobile Developer
Nokia In-App Payment - UX considerations
Nokia In-App Payment - UX considerationsNokia In-App Payment - UX considerations
Nokia In-App Payment - UX considerations
Microsoft Mobile Developer
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)
Microsoft Mobile Developer
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
Microsoft Mobile Developer
Kids' games and educational app design
Kids' games and educational app designKids' games and educational app design
Kids' games and educational app design
Microsoft Mobile Developer
Nokia X: opportunities for developers
Nokia X: opportunities for developersNokia X: opportunities for developers
Nokia X: opportunities for developers
Microsoft Mobile Developer
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
Microsoft Mobile Developer
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
Microsoft 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 consultations
Microsoft 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 app
Microsoft 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 store
Microsoft 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 progetto
Microsoft 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 Geo2tag
Microsoft 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 consultations
Microsoft 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 progetto
Microsoft Mobile Developer

Введиние в разработку 3D игр для Nokia Asha телефонов

  • 1. Series 40 Developer Training Введение в разработку 3D игр для Nokia Asha телефонов Michael Samarin, Ph.D Director, Developer Training and Evangelism Futurice Oy
  • 2. Восстановить интерес к Привлечь Mobile Java Обзор 3D внимание к 3D Краткий Примеров в 3D API для JSR-184 JSR-184 NetBeans и Nokia (M3G) (M3G) Nokia SDK Series 40 для тур 1.1 for Java (Asha) создания игр
  • 3. Series 40 » 675 Миллионов устройств » 3.9 Миллионов скачиваний ежедневно » Ценовые категории 35 – 140 Евро » Игровые студии с которыми придется соревноваться: EA, Gameloft, Rovio, India Games
  • 6. Nokia X3-02 Nokia Asha 303 3D: от 30 до 40 FPS
  • 8. › Объектно-Ориентированное 3D › Основано на Scene Graph JSR-184 › Один из MIDP JSR › Очень компактное API M3G › Быстрый цикл разработки › Оптимизировано для небольшого объема памяти и бюджетных CPU › Отличная реализация на Series 40
  • 9. M3G Тур APIs и Инструментарий
  • 10. Компактное API, всего 30 классов 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 › Аналогичен по идеологии OpenGL › Retained mode Режимы › Основан на Scene Graph (modes) › Весь Scene Graph может быть сохранен в / загружен из файла › Полноценно описан M3G формат › Режимы могут быть свободно использоваться одновременно
  • 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 Наиболее › Анимированная геометрия Интересные объектов Scene Graph › Mesh › 3D Геометрия видимых объектов Элементы › Sprite 3D › 2D изображения в 3D пространстве
  • 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. › Сериализует полный Scene Graph M3G › Анимации, Текстуры, итд. Формат Файлов › С компрессией › Хорошо определенная структура
  • 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 › Автор Nelson Games: M3G Export › http://www.nelson-games.de
  • 33. M3GToolkit › http://www.java4ever.com/
  • 34. “B” › Blender Scene Model › Автор David Sanguinett
  • 39. › Размер Java Heap (1 – 4 MB) › Размер JAR файла ( 1 – 2 MB) › Скорость процессора Важно: › Размер экрана: 240x 320, 320x240, 128x160 › Тип ввода: T9, Qwerty, Touch-And-Type › Nokia Device Matrix › Remote Device Access