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

777
-1

Published on

В этом вебинаре вы узнаете как создавать настоящие трехмерные игры с момощью современной реализации Mobile Java JSRs на телефонах Nokia Series 40 семейства Asha. Мы ознакомим с деталями процесса создания 3D игр: планирование и построение игровых уровней; освещение и уровень реализма; сравнение создания игровых персонажей вручную и с помощью пакетов трехмерного моделирования; анимация и поведение игровых персонажей; решения менеджмента памяти и текстур; стратегии пользовательского ввода; оптимизирование исполнения программ для различных ориентаций экранов и моделей телефонов. Обзор скорости трехмерной графики на различных телефонах Nokia Series 40 семейства Asha.

Published in: Technology, Art & Photos
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
777
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Series 40 Developer TrainingВведение в разработку 3D игр дляNokia Asha телефоновMichael Samarin, Ph.DDirector,Developer Training and EvangelismFuturice Oy
  2. 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. 3. Series 40» 675 Миллионов устройств» 3.9 Миллионов скачиваний ежедневно» Ценовые категории 35 – 140 Евро» Игровые студии с которыми придется соревноваться: EA, Gameloft, Rovio, India Games
  4. 4. http://youtu.be/AnD0nfAwNUY
  5. 5. Nokia X3-02 Nokia Asha 303 3D: от 30 до 40 FPS
  6. 6. http://youtu.be/4wsGh-AOSzE
  7. 7. › Объектно-Ориентированное 3D › Основано на Scene GraphJSR-184 › Один из MIDP JSR › Очень компактное API M3G › Быстрый цикл разработки › Оптимизировано для небольшого объема памяти и бюджетных CPU › Отличная реализация на Series 40
  8. 8. M3G ТурAPIs и Инструментарий
  9. 9. Компактное API, всего 30 классовAnimationController IndexBuffer RayIntersectionAnimationTrack KeyframeSequence SkinnedMeshAppearance Light Sprite3DBackground Loader Texture2DCamera Material TransformCompositingMode Mesh TransformableFog MorphingMesh TriangleStripArrayGraphics3D Node VertexArrayGroup Object3D VertexBufferImage2D PolygonMode World
  10. 10. › Immediate mode › Аналогичен по идеологии OpenGL › Retained modeРежимы › Основан на Scene Graph(modes) › Весь Scene Graph может быть сохранен в / загружен из файла › Полноценно описан M3G формат › Режимы могут быть свободно использоваться одновременно
  11. 11. Scene Graph Background Mesh Group Morphing MeshWorld Skinned Mesh Sprite 3D Group Sprite 3D User Object Group Camera Light
  12. 12. › World › Задний план (Background) › Morphing and Skinned Mesh Наиболее › Анимированная геометрияИнтересные объектовScene Graph › Mesh › 3D Геометрия видимых объектов Элементы › Sprite 3D › 2D изображения в 3D пространстве
  13. 13. 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) { }}
  14. 14. public class Canvas3D extends Canvas implements Runnable { public Canvas3D(){ } public void paint(Graphics g) { } public void run() { }}
  15. 15. 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; }}
  16. 16. 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();
  17. 17. 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(); }}
  18. 18. public class Canvas3D extends Canvas implements Runnable { public Canvas3D(){ while (running){ } repaint(); public void paint(Graphics g) { Thread.sleep(20); } } public void run() { }}
  19. 19. ClausHöfele http://www.ibm.com/developerworks/wireless/library/wi-mobile1/ http://www.ibm.com/developerworks/wireless/library/wi-mobile2/
  20. 20. 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};
  21. 21. // 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});
  22. 22. 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);
  23. 23. 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);
  24. 24. Демонстрация
  25. 25. http://youtu.be/JAP0y9moeao
  26. 26. http://youtu.be/i51juyXAW-4
  27. 27. › Сериализует полный Scene Graph M3G › Анимации, Текстуры, итд.ФорматФайлов › С компрессией › Хорошо определенная структура
  28. 28. 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();
  29. 29. Blender 2.49
  30. 30. › Blender Plugin for 2.49 › Автор Nelson Games:M3G Export › http://www.nelson-games.de
  31. 31. Демонстрация
  32. 32. M3GToolkit › http://www.java4ever.com/
  33. 33. “Bebe” › Blender Scene Model › Автор David Sanguinett
  34. 34. Демонстрация
  35. 35. http://youtu.be/V6Zy1NFFGrk
  36. 36. http://www.developer.nokia.com/Resources/Library/Java
  37. 37. Демонстрация
  38. 38. › Размер Java Heap (1 – 4 MB) › Размер JAR файла ( 1 – 2 MB) › Скорость процессораВажно: › Размер экрана: 240x 320, 320x240, 128x160 › Тип ввода: T9, Qwerty, Touch-And-Type › Nokia Device Matrix › Remote Device Access
  39. 39. Textures by: http://www.filterforge.com, http://www.squidoo.com
  40. 40. http://youtu.be/O36PQOGMqMM
  41. 41. Nokia C2-02
  42. 42. http://youtu.be/aolNL0jQ940
  43. 43. http://youtu.be/3a-LqHrVbko
  44. 44. http://youtu.be/Z8B07rp0N_I
  45. 45. Спасибо! @MichaelSamarinhttp://www.futurice.com

×