SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
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
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/
“Bebe”   › 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
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

Contenu connexe

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

"Погружение в Robolectric" Дмитрий Костырев (Avito)
"Погружение в Robolectric"  Дмитрий Костырев (Avito)"Погружение в Robolectric"  Дмитрий Костырев (Avito)
"Погружение в Robolectric" Дмитрий Костырев (Avito)AvitoTech
 
Знакомство с Papervision3d
Знакомство с Papervision3dЗнакомство с Papervision3d
Знакомство с Papervision3dIgor 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 LanguageSSA KPI
 
Ciklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScriptCiklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScriptDmytro 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_samsonovComputer Science Club
 
Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Yandex
 
технология Imagine3 d 1 1
технология Imagine3 d 1 1технология Imagine3 d 1 1
технология Imagine3 d 1 1oleg gubanov
 
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...Dmitri Soshnikov
 
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDAЛекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDAMikhail 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
 

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

"Погружение в Robolectric" Дмитрий Костырев (Avito)
"Погружение в Robolectric"  Дмитрий Костырев (Avito)"Погружение в Robolectric"  Дмитрий Костырев (Avito)
"Погружение в Robolectric" Дмитрий Костырев (Avito)
 
Знакомство с Papervision3d
Знакомство с Papervision3dЗнакомство с Papervision3d
Знакомство с Papervision3d
 
Иструментарий для быстрой разработки игр с 2 d физикой
Иструментарий для быстрой разработки игр с 2 d физикойИструментарий для быстрой разработки игр с 2 d физикой
Иструментарий для быстрой разработки игр с 2 d физикой
 
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
 
JavaFX Script Language
JavaFX Script LanguageJavaFX Script Language
JavaFX Script Language
 
directx
directxdirectx
directx
 
Ciklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScriptCiklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScript
 
NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript
 
Hydra Renderer
Hydra RendererHydra Renderer
Hydra Renderer
 
Hydra Renderer
Hydra RendererHydra Renderer
Hydra Renderer
 
Ray tracing systems_msu
Ray tracing systems_msuRay tracing systems_msu
Ray tracing systems_msu
 
Ray tracing systems_msu
Ray tracing systems_msuRay tracing systems_msu
Ray tracing systems_msu
 
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
 
Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"
 
технология Imagine3 d 1 1
технология Imagine3 d 1 1технология Imagine3 d 1 1
технология Imagine3 d 1 1
 
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
 
Google maps for android
Google maps for androidGoogle maps for android
Google maps for android
 
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDAЛекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
 
Паттерны проектирования
Паттерны проектированияПаттерны проектирования
Паттерны проектирования
 
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"
 

Plus de 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
 

Plus de 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
 

Введиние в разработку 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
  • 4.
  • 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. “Bebe” › 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
  • 40.