SlideShare a Scribd company logo
OpenGL ES 1.1 и 2.0 для разработки iPhone игр Товченко Тарас  [email_address]
OpenGL - реализует API для передачи графических данных на устройство для визуализации и последующего вивода этих данных на экран OpenGL API User Code данные и комманды визуализация и вывод
Основные объекты-понятия в OpenGLES API (краткое описание) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Единый контекст 2 Render context View Texture 1 Texture 2 Texture 3 VBO 1 VBO 2 Shader Current Need bind 1 Плохая практика
Производительность ,[object Object],[object Object]
Framebuffers ,[object Object]
Hardware реализация OpenGLES на iPhone ,[object Object],[object Object]
+ (Class) layerClass { return [CAEAGLLayer class]; } myEAGLLayer = (CAEAGLLayer*)self.layer; GLuint framebuffer; glGenFramebuffersOES(1, &framebuffer); glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer); GLuint colorRenderbuffer; glGenRenderbuffersOES(1, &colorRenderbuffer); glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer); [myContext renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:myEAGLLayer]; glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, colorRenderbuffer);
Отличия OpenGL ES 1.1 и 2.0 Точка выбора версии OpenGL ES EAGLContext* myContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1]; [EAGLContext setCurrentContext: myContext]; GLES 1.1 - реализует набор стандартных ф-й для вивода всей графической информации, в том числе и для затенения. GLES 2.0 - реализует набор ф-й для инициализации, управления состояниями контекста и вывода VBO c текстурами, все остальные операции (модификация вершин, затенение и т.п.) реализуются через шейдеры.
Шейдеры OpenGL ES 2.0 поддерживает: 1. Pixel Shaders (Fragment) - программа которая исполняется на видео карточке для каждого пикселя. 2. Vertex Shaders - тоже самое только вызывается для каждой вершины модели. Таким образом все операции по обработке вершин и пикселей можно писать на шейдерах и не тратить на них процессорное время. Это дает больше возможностей для реализации техник затенений.
OpenGL Shader Builder от Apple
 
Рекомендации, часто используемые техники, различные улучшения различные улучшения
Модели и VBO Как лучше: 1. Создавать для каждого объекта свой VBO, слить один раз данные, при условии что они не меняются, а потом при отрисовке перебирать все VBO и выводить? 2. Создать один VBO и каждый раз при отрисовке перебирать все объекты и заливать в него данные при этом не тратя время на переключение между буферами?
Решение Создаем один VBO, затем сливаем в него данные от всех объектов при этом пересчитываем индексы. object 1 object 2 object 3 vert: x0,y0,z0-x1... vert: x0,y0,z0-x1... vert: x0,y0,z0-x1... index:  0,2,1,3 index:  0,1,2 index:  2,1,3,0 index vbo 0,2,1,3,  -  4,5,6, - 9,8,10,7
Правильная последовательность биндинга OpenGL объектов - залог производительности Очень важно во время рендеринга чем по менше использовать операции переключения текущего объекта (например текстуры) или изменения состояния opengl. Для этого нужно иметь так называемый дрокол вывода данных (drawing protocol), который представляет из себя отсортированный список объектов по состояниям отрисовки. Под состояниями понимается: 1. состояния самого opengl 2. текущая текстура 3. трансформации 4. и могут быть какие-то еще свои костомные атрибуты
Пример Есть 3 объекта и 2 текстуры object 1 object 2 object 3 tex 1 tex 2 tex 1 object 1 object 2 object 3 tex 1 tex 2 tex 1 Неправильно Правильно
Повышение производительности для статической геометрии ,[object Object]
Экспорт 3D объектов из графических редакторов Maya 3DMax Для этой цели проще всего использовать формат OBJ в который умеет экпортировать почти любой 3D-редактор и который очень простой для парсинга и последующего извлечения данных. Но перед использованием данного формата в своем iPhone приложении его следует предварительно обработать.
OBJ - формат Является текстовым форматом в котором интересующие нас данные представлены в следующем виде: v  0.617428 -0.168873 -1.800043v  0.664162 0.002637 1.938868v  0.792035 -0.168873 -1.800043 vn -0.423596 -0.905671 0.018061vn -0.399840 -0.916549 -0.008100vn 0.403383 -0.915026 -0.003040 vt 0.520304 0.236667vt 0.662630 0.236373vt 0.662631 0.374176 f 0/2/5 4/3/0 2/0/1 f 8/3/2 2/3/4 4/6/7 f 1/4/7 2/3/8 2/9/3
iPhone приложения не должны тратить свое время на парсинг текста и построения правильной последовательности вершин и индексов, эта работа должна быть предварительно выполнена парсером. vertex data:  x0, y0, z0,  u0, v0,  xn0, yn0, zn0, ... index data:  0, 4, 5, 3, 2, 3, 0, 1... Для удобства можно сделать что бы парсер результат своей работы сохранял в apple plist, в котором будут лежать уже правильно построенные бинарные данные в str-закодированном виде. И потом загружаем этот plist в NSDictionary и по имени тега получаем данные объекта.
Спасибо за внимание и удачных проектов :) Taras (DoctorSet) Tovchenko 2009

More Related Content

Similar to OpenGL ES 1.1 и 2.0 для разработки iPhone игр

Uneta 17.04.15 Dekhtiar - Entity framework 7 and co.
Uneta 17.04.15 Dekhtiar - Entity framework 7 and co.Uneta 17.04.15 Dekhtiar - Entity framework 7 and co.
Uneta 17.04.15 Dekhtiar - Entity framework 7 and co.
UNETA
 
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Cisco Russia
 
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic GamesAlexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
White Nights Conference
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0
akrakovetsky
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at Vizor
DevGAMM Conference
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON
 
Starling and Feathers
Starling and FeathersStarling and Feathers
Starling and Feathers
Valentin Zhelezny
 
Робототехника с Not eXactly C. Часть I
Робототехника с Not eXactly C. Часть IРобототехника с Not eXactly C. Часть I
Робототехника с Not eXactly C. Часть I
Alexander Kolotov
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
IT-Доминанта
 
Баннерокрутилка на Erlang
Баннерокрутилка на ErlangБаннерокрутилка на Erlang
Баннерокрутилка на ErlangArtyom Gavrichenkov
 
Net framework
Net frameworkNet framework
Net framework
poverhnost
 
Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)
Pavel Tsukanov
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
Mikhail Chinkov
 
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Ontico
 
Visual C++/NET. Классика программирования. Степаненко О.Е.
Visual C++/NET. Классика программирования. Степаненко О.Е.Visual C++/NET. Классика программирования. Степаненко О.Е.
Visual C++/NET. Классика программирования. Степаненко О.Е.
StAlKeRoV
 
Поговорим о различных версиях .NET
Поговорим о различных версиях .NETПоговорим о различных версиях .NET
Поговорим о различных версиях .NET
Andrey Akinshin
 
Go Mobile! Windows Phone 7 for all
Go Mobile! Windows Phone 7 for all Go Mobile! Windows Phone 7 for all
Go Mobile! Windows Phone 7 for all
SoftServe
 
Mind map
Mind mapMind map
Mind map
Monceber
 

Similar to OpenGL ES 1.1 и 2.0 для разработки iPhone игр (20)

Uneta 17.04.15 Dekhtiar - Entity framework 7 and co.
Uneta 17.04.15 Dekhtiar - Entity framework 7 and co.Uneta 17.04.15 Dekhtiar - Entity framework 7 and co.
Uneta 17.04.15 Dekhtiar - Entity framework 7 and co.
 
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
 
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic GamesAlexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
 
Open gl и direct3d
Open gl и direct3dOpen gl и direct3d
Open gl и direct3d
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at Vizor
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
 
Starling and Feathers
Starling and FeathersStarling and Feathers
Starling and Feathers
 
Робототехника с Not eXactly C. Часть I
Робототехника с Not eXactly C. Часть IРобототехника с Not eXactly C. Часть I
Робототехника с Not eXactly C. Часть I
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
 
Баннерокрутилка на Erlang
Баннерокрутилка на ErlangБаннерокрутилка на Erlang
Баннерокрутилка на Erlang
 
Net framework
Net frameworkNet framework
Net framework
 
Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
 
Visual C++/NET. Классика программирования. Степаненко О.Е.
Visual C++/NET. Классика программирования. Степаненко О.Е.Visual C++/NET. Классика программирования. Степаненко О.Е.
Visual C++/NET. Классика программирования. Степаненко О.Е.
 
Поговорим о различных версиях .NET
Поговорим о различных версиях .NETПоговорим о различных версиях .NET
Поговорим о различных версиях .NET
 
Go Mobile! Windows Phone 7 for all
Go Mobile! Windows Phone 7 for all Go Mobile! Windows Phone 7 for all
Go Mobile! Windows Phone 7 for all
 
Mind map
Mind mapMind map
Mind map
 
Lirc или домашний медиацентр
Lirc или домашний медиацентрLirc или домашний медиацентр
Lirc или домашний медиацентр
 

More from Pavel Bashmakov

The road from the services to the products
The road from the services to the productsThe road from the services to the products
The road from the services to the products
Pavel Bashmakov
 
Портирование успешных iPhone приложений на Android\Bada платформы
Портирование успешных iPhone приложений на Android\Bada платформыПортирование успешных iPhone приложений на Android\Bada платформы
Портирование успешных iPhone приложений на Android\Bada платформы
Pavel Bashmakov
 
Мобильные приложения как инструмент доступа к пользователям современных мобил...
Мобильные приложения как инструмент доступа к пользователям современных мобил...Мобильные приложения как инструмент доступа к пользователям современных мобил...
Мобильные приложения как инструмент доступа к пользователям современных мобил...
Pavel Bashmakov
 
Разработка мобильных приложений
Разработка мобильных приложенийРазработка мобильных приложений
Разработка мобильных приложений
Pavel Bashmakov
 
Android Platform Architecture
Android Platform ArchitectureAndroid Platform Architecture
Android Platform Architecture
Pavel Bashmakov
 
Android Game Fox Hunter - Start
Android Game Fox Hunter - StartAndroid Game Fox Hunter - Start
Android Game Fox Hunter - Start
Pavel Bashmakov
 
About Stanfy
About StanfyAbout Stanfy
About Stanfy
Pavel Bashmakov
 
Mobile Apps - Новые Медиа
Mobile Apps - Новые МедиаMobile Apps - Новые Медиа
Mobile Apps - Новые МедиаPavel Bashmakov
 
Mobile Apps - New Media
Mobile Apps - New MediaMobile Apps - New Media
Mobile Apps - New Media
Pavel Bashmakov
 
Клиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhoneКлиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhone
Pavel Bashmakov
 
In-App-Purchases и с чем их едят
In-App-Purchases и с чем их едятIn-App-Purchases и с чем их едят
In-App-Purchases и с чем их едят
Pavel Bashmakov
 
Использование современных мобильных техноолгий в медиабизнесе
Использование современных мобильных техноолгий в медиабизнесеИспользование современных мобильных техноолгий в медиабизнесе
Использование современных мобильных техноолгий в медиабизнесе
Pavel Bashmakov
 
Stanfy - Mobile Apps as Newest Media
Stanfy - Mobile Apps as Newest MediaStanfy - Mobile Apps as Newest Media
Stanfy - Mobile Apps as Newest Media
Pavel Bashmakov
 
Владимир Пузанов - JailBreak: Разработка без лимитов
Владимир Пузанов - JailBreak: Разработка без лимитовВладимир Пузанов - JailBreak: Разработка без лимитов
Владимир Пузанов - JailBreak: Разработка без лимитов
Pavel Bashmakov
 
Павел Тайкало - Использование CoreData в iPhone приложения
Павел Тайкало - Использование CoreData в iPhone приложенияПавел Тайкало - Использование CoreData в iPhone приложения
Павел Тайкало - Использование CoreData в iPhone приложенияPavel Bashmakov
 
Taras Kornichuk - Ценности социальной игровой платформы для разработчиков и и...
Taras Kornichuk - Ценности социальной игровой платформы для разработчиков и и...Taras Kornichuk - Ценности социальной игровой платформы для разработчиков и и...
Taras Kornichuk - Ценности социальной игровой платформы для разработчиков и и...
Pavel Bashmakov
 
Использование iPhone приложений в Бизнесе, Маркетинге и PR
Использование iPhone приложений в Бизнесе, Маркетинге и PRИспользование iPhone приложений в Бизнесе, Маркетинге и PR
Использование iPhone приложений в Бизнесе, Маркетинге и PR
Pavel Bashmakov
 
Индустрия iPhone приложений
Индустрия iPhone приложенийИндустрия iPhone приложений
Индустрия iPhone приложений
Pavel Bashmakov
 
Sapka Contest 2009 (RU)
Sapka Contest 2009 (RU)Sapka Contest 2009 (RU)
Sapka Contest 2009 (RU)
Pavel Bashmakov
 
Sapka Contest 2009 (UA)
Sapka Contest 2009 (UA)Sapka Contest 2009 (UA)
Sapka Contest 2009 (UA)
Pavel Bashmakov
 

More from Pavel Bashmakov (20)

The road from the services to the products
The road from the services to the productsThe road from the services to the products
The road from the services to the products
 
Портирование успешных iPhone приложений на Android\Bada платформы
Портирование успешных iPhone приложений на Android\Bada платформыПортирование успешных iPhone приложений на Android\Bada платформы
Портирование успешных iPhone приложений на Android\Bada платформы
 
Мобильные приложения как инструмент доступа к пользователям современных мобил...
Мобильные приложения как инструмент доступа к пользователям современных мобил...Мобильные приложения как инструмент доступа к пользователям современных мобил...
Мобильные приложения как инструмент доступа к пользователям современных мобил...
 
Разработка мобильных приложений
Разработка мобильных приложенийРазработка мобильных приложений
Разработка мобильных приложений
 
Android Platform Architecture
Android Platform ArchitectureAndroid Platform Architecture
Android Platform Architecture
 
Android Game Fox Hunter - Start
Android Game Fox Hunter - StartAndroid Game Fox Hunter - Start
Android Game Fox Hunter - Start
 
About Stanfy
About StanfyAbout Stanfy
About Stanfy
 
Mobile Apps - Новые Медиа
Mobile Apps - Новые МедиаMobile Apps - Новые Медиа
Mobile Apps - Новые Медиа
 
Mobile Apps - New Media
Mobile Apps - New MediaMobile Apps - New Media
Mobile Apps - New Media
 
Клиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhoneКлиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhone
 
In-App-Purchases и с чем их едят
In-App-Purchases и с чем их едятIn-App-Purchases и с чем их едят
In-App-Purchases и с чем их едят
 
Использование современных мобильных техноолгий в медиабизнесе
Использование современных мобильных техноолгий в медиабизнесеИспользование современных мобильных техноолгий в медиабизнесе
Использование современных мобильных техноолгий в медиабизнесе
 
Stanfy - Mobile Apps as Newest Media
Stanfy - Mobile Apps as Newest MediaStanfy - Mobile Apps as Newest Media
Stanfy - Mobile Apps as Newest Media
 
Владимир Пузанов - JailBreak: Разработка без лимитов
Владимир Пузанов - JailBreak: Разработка без лимитовВладимир Пузанов - JailBreak: Разработка без лимитов
Владимир Пузанов - JailBreak: Разработка без лимитов
 
Павел Тайкало - Использование CoreData в iPhone приложения
Павел Тайкало - Использование CoreData в iPhone приложенияПавел Тайкало - Использование CoreData в iPhone приложения
Павел Тайкало - Использование CoreData в iPhone приложения
 
Taras Kornichuk - Ценности социальной игровой платформы для разработчиков и и...
Taras Kornichuk - Ценности социальной игровой платформы для разработчиков и и...Taras Kornichuk - Ценности социальной игровой платформы для разработчиков и и...
Taras Kornichuk - Ценности социальной игровой платформы для разработчиков и и...
 
Использование iPhone приложений в Бизнесе, Маркетинге и PR
Использование iPhone приложений в Бизнесе, Маркетинге и PRИспользование iPhone приложений в Бизнесе, Маркетинге и PR
Использование iPhone приложений в Бизнесе, Маркетинге и PR
 
Индустрия iPhone приложений
Индустрия iPhone приложенийИндустрия iPhone приложений
Индустрия iPhone приложений
 
Sapka Contest 2009 (RU)
Sapka Contest 2009 (RU)Sapka Contest 2009 (RU)
Sapka Contest 2009 (RU)
 
Sapka Contest 2009 (UA)
Sapka Contest 2009 (UA)Sapka Contest 2009 (UA)
Sapka Contest 2009 (UA)
 

OpenGL ES 1.1 и 2.0 для разработки iPhone игр

  • 1. OpenGL ES 1.1 и 2.0 для разработки iPhone игр Товченко Тарас [email_address]
  • 2. OpenGL - реализует API для передачи графических данных на устройство для визуализации и последующего вивода этих данных на экран OpenGL API User Code данные и комманды визуализация и вывод
  • 3.
  • 4. Единый контекст 2 Render context View Texture 1 Texture 2 Texture 3 VBO 1 VBO 2 Shader Current Need bind 1 Плохая практика
  • 5.
  • 6.
  • 7.
  • 8. + (Class) layerClass { return [CAEAGLLayer class]; } myEAGLLayer = (CAEAGLLayer*)self.layer; GLuint framebuffer; glGenFramebuffersOES(1, &framebuffer); glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer); GLuint colorRenderbuffer; glGenRenderbuffersOES(1, &colorRenderbuffer); glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer); [myContext renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:myEAGLLayer]; glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, colorRenderbuffer);
  • 9. Отличия OpenGL ES 1.1 и 2.0 Точка выбора версии OpenGL ES EAGLContext* myContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1]; [EAGLContext setCurrentContext: myContext]; GLES 1.1 - реализует набор стандартных ф-й для вивода всей графической информации, в том числе и для затенения. GLES 2.0 - реализует набор ф-й для инициализации, управления состояниями контекста и вывода VBO c текстурами, все остальные операции (модификация вершин, затенение и т.п.) реализуются через шейдеры.
  • 10. Шейдеры OpenGL ES 2.0 поддерживает: 1. Pixel Shaders (Fragment) - программа которая исполняется на видео карточке для каждого пикселя. 2. Vertex Shaders - тоже самое только вызывается для каждой вершины модели. Таким образом все операции по обработке вершин и пикселей можно писать на шейдерах и не тратить на них процессорное время. Это дает больше возможностей для реализации техник затенений.
  • 11. OpenGL Shader Builder от Apple
  • 12.  
  • 13. Рекомендации, часто используемые техники, различные улучшения различные улучшения
  • 14. Модели и VBO Как лучше: 1. Создавать для каждого объекта свой VBO, слить один раз данные, при условии что они не меняются, а потом при отрисовке перебирать все VBO и выводить? 2. Создать один VBO и каждый раз при отрисовке перебирать все объекты и заливать в него данные при этом не тратя время на переключение между буферами?
  • 15. Решение Создаем один VBO, затем сливаем в него данные от всех объектов при этом пересчитываем индексы. object 1 object 2 object 3 vert: x0,y0,z0-x1... vert: x0,y0,z0-x1... vert: x0,y0,z0-x1... index: 0,2,1,3 index: 0,1,2 index: 2,1,3,0 index vbo 0,2,1,3, - 4,5,6, - 9,8,10,7
  • 16. Правильная последовательность биндинга OpenGL объектов - залог производительности Очень важно во время рендеринга чем по менше использовать операции переключения текущего объекта (например текстуры) или изменения состояния opengl. Для этого нужно иметь так называемый дрокол вывода данных (drawing protocol), который представляет из себя отсортированный список объектов по состояниям отрисовки. Под состояниями понимается: 1. состояния самого opengl 2. текущая текстура 3. трансформации 4. и могут быть какие-то еще свои костомные атрибуты
  • 17. Пример Есть 3 объекта и 2 текстуры object 1 object 2 object 3 tex 1 tex 2 tex 1 object 1 object 2 object 3 tex 1 tex 2 tex 1 Неправильно Правильно
  • 18.
  • 19. Экспорт 3D объектов из графических редакторов Maya 3DMax Для этой цели проще всего использовать формат OBJ в который умеет экпортировать почти любой 3D-редактор и который очень простой для парсинга и последующего извлечения данных. Но перед использованием данного формата в своем iPhone приложении его следует предварительно обработать.
  • 20. OBJ - формат Является текстовым форматом в котором интересующие нас данные представлены в следующем виде: v 0.617428 -0.168873 -1.800043v 0.664162 0.002637 1.938868v 0.792035 -0.168873 -1.800043 vn -0.423596 -0.905671 0.018061vn -0.399840 -0.916549 -0.008100vn 0.403383 -0.915026 -0.003040 vt 0.520304 0.236667vt 0.662630 0.236373vt 0.662631 0.374176 f 0/2/5 4/3/0 2/0/1 f 8/3/2 2/3/4 4/6/7 f 1/4/7 2/3/8 2/9/3
  • 21. iPhone приложения не должны тратить свое время на парсинг текста и построения правильной последовательности вершин и индексов, эта работа должна быть предварительно выполнена парсером. vertex data: x0, y0, z0, u0, v0, xn0, yn0, zn0, ... index data: 0, 4, 5, 3, 2, 3, 0, 1... Для удобства можно сделать что бы парсер результат своей работы сохранял в apple plist, в котором будут лежать уже правильно построенные бинарные данные в str-закодированном виде. И потом загружаем этот plist в NSDictionary и по имени тега получаем данные объекта.
  • 22. Спасибо за внимание и удачных проектов :) Taras (DoctorSet) Tovchenko 2009