SlideShare a Scribd company logo
3D  плеер  на  WebGL
Василика  Климова  
Разработчик  интерфейсов
Artec  Group
@lik04ka
MoscowJS  21
Содержание
2
        Применение  WebGL
        Преимущества
        Основные  понятия  3D  графики
        Библиотека  Three.js
        Плеер  для  просмотра  3D  моделей
• HTML5  <canvas>  
• OpenGL  ES  2.0  
• GLSL  ES  
• 2D/3D
3
WebGL
4
caniuse.com/webgl
IEWebGL
Игры
5
gooengine.com/pearl-­‐boy
6
Навигация
7
bookcase.chromeexperiments.com
Редакторы
8
3dtin.com
9
Инфографика
globe.chromeexperiments.com
10
Технологии  3D
O3D
Преимущества
11
Преимущества
• Открытый  стандарт  
• Кроссплатформенность  
• Высокая  производительность
12
Преимущества
• Автоматическое  управление  памятью  
• Отсутствие  компиляции
13
14
GLSL
Основные  понятия
• Сцена  
• Свет  
• Камера
15
Взаимосвязь  объектов
16
Камера 3D  объектыСвет
Сцена
Рендер
3D  объект
17
Полигональная  сетка
Геометрия Материал Текстура
Визуализация
• Рендер  
• Шейдер  
• Анимация
18
Three.js
19
• three.min.js                                                            420  kb  
• OBJLoader.js                                                                  
• TrackballControls.js                                      14  kb
threejs.org
@mrdoob
8  kb
Входные  данные
20
texture.jpg object.obj
Алгоритм
21
Загрузка  текстуры
Рендер,  canvas
Загрузка  3D  объекта
Сцена,  Камера,  Свет
Анимация
Сцена
22
Player.container  =  document.getElementById("webgl-­‐player");  
Player.size  =  {  
            width:  Player.container.offsetWidth,  
            height:  Player.container.offsetHeight  
};
Player.scene  =  new  THREE.Scene();
Алгоритм
23
Загрузка  текстуры
Рендер,  canvas
Загрузка  3D  объекта
Сцена,  Камера,  Свет
Анимация
Камера
24
Player.camera.position.z  =  300;  
Player.scene.add(Player.camera);
//  PerspectiveCamera(  fov,    aspect,    near,    far  )  
aspect  =  Player.size.width  /  Player.size.height;  
Player.camera  =  new  THREE.PerspectiveCamera(45.0,  aspect,  2,  8000);
25
Перспективная  проекция  
PerspectiveCamera
Ортогональная  проекция  
OrthographicCamera
Типы  камер
Алгоритм
26
Загрузка  текстуры
Рендер,  canvas
Загрузка  3D  объекта
Сцена,  Камера,  Свет  
Анимация
Свет,  рендер,  canvas  
27
Player.light  =  new  THREE.AmbientLight();  
Player.scene.add(Player.light);
//  canvas  
Player.container.appendChild(Player.renderer.domElement);
Player.renderer  =  new  THREE.WebGLRenderer({alpha:  true});  
Player.renderer.setSize(Player.size.width,  Player.size.height);
28
//  Player.scene.add(Player.light)
Player.scene.add(Player.light)
Свет
29
THREE.WebGLRenderer({alpha:  true})
THREE.WebGLRenderer()
WebGLRenderer
Алгоритм
30
Загрузка  текстуры
Рендер,  canvas
Загрузка  3D  объекта
Сцена,  Камера,  Свет
Анимация
Текстура
31
Player.textureLoader  =  new  THREE.TextureLoader();  
Player.textureLoader.load("texture.jpg",  function(texture)  {  
            Player.texture  =  texture;  
            Player.loadModel();  
});
Алгоритм
32
Загрузка  текстуры
Рендер,  canvas
Загрузка  3D  объекта
Сцена,  Камера,  Свет
Анимация
Загрузка  3D  модели
33
loadModel:  function()  {  
        objectLoader  =  new  THREE.OBJLoader();    
                
        
          
        objectLoader.load("object.obj",  function(object)  {  
                object.traverse(function(child)  {  
                        if  (child  instanceof  THREE.Mesh)  {  
                     child.material.map  =  Player.texture;  
                        }  
                });  
                Player.scene.add(object);  
        });  
}
Загрузка  3D  модели
34
loadModel:  function()  {  
        objectLoader  =  new  THREE.OBJLoader();    
                
        
      
        objectLoader.load("object.obj",  function(object)  {  
                object.traverse(function(child)  {  
                        if  (child  instanceof  THREE.Mesh)  {  
                     child.material.map  =  Player.texture;  
                        }  
                });  
                Player.scene.add(object);  
        });  
}
Загрузка  3D  модели
35
loadModel:  function()  {  
        objectLoader  =  new  THREE.OBJLoader();    
                
        
          
        objectLoader.load("object.obj",  function(object)  {  
                object.traverse(function(child)  {  
                        if  (child  instanceof  THREE.Mesh)  {  
                     child.material.map  =  Player.texture;  
                        }  
                });  
                Player.scene.add(object);  
        });  
}
Алгоритм
36
Загрузка  текстуры
Рендер,  canvas
Загрузка  3D  объекта
Сцена,  Камера,  Свет
Анимация
Анимация
37
Player.controls  =  new  THREE.TrackballControls(Player.camera,    
                      Player.container);              
animate:  function()  {  
        requestAnimationFrame(Player.animate);  
        Player.renderer.render(Player.scene,  Player.camera);  
}
Player.animate();
Player.controls.update();
Анимация
38
Запросить  браузер  повторить  
animate()
Отрисовать  модель
Обновить  положение  камеры
requestAnimationFrame
animate:  function()  {  
        requestAnimationFrame(Player.animate);  
        Player.controls.update();  
        Player.renderer.render(Player.scene,  Player.camera);  
}
39
viewshape.com
WebGL  библиотеки
•   Three.js  
•   Babylon.js  
•   Turbulenz  
•   PhiloGL
40
Полезные  ссылки
davidscottlyons.com/threejs  
Книга  Learning  Three.js:  The  JavaScript  3D  Library  for  WebGL  
Книга  WebGL.  Программирование  трехмерной  графики  
Никита  Северинов  diductio.ru/course/2060/
41
Исходники
42
github.com/Likita
43
Геймификация
Интерактивность
Василика  Климова
vasilika.klimova

likita
lik04ka
Спасибо  за  внимание!
44

More Related Content

PPT
Знакомство с Papervision3d
PDF
Artec 3D web player
PDF
Разработка игр с помощью Cocos2d
PPTX
Интерактивные 3D-карты своими руками / Александр Амосов (Avito)
PDF
Введиние в разработку 3D игр для Nokia Asha телефонов
PDF
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
PPTX
Как правильно делать анимацию и добиться 60fps на различных девайсах | Odessa...
PDF
Путь к WebGL через THREE.js | Odessa Frontend Meetup #12
Знакомство с Papervision3d
Artec 3D web player
Разработка игр с помощью Cocos2d
Интерактивные 3D-карты своими руками / Александр Амосов (Avito)
Введиние в разработку 3D игр для Nokia Asha телефонов
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Как правильно делать анимацию и добиться 60fps на различных девайсах | Odessa...
Путь к WebGL через THREE.js | Odessa Frontend Meetup #12

What's hot (7)

PDF
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
PPT
Иструментарий для быстрой разработки игр с 2 d физикой
PPT
20111204 computer graphics_galinsky_lecture12_real_time
PDF
iOS-05_2-UIKit
PDF
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
PDF
Python + GPGPU
PDF
Владимир Алаев, Сергей Белов "Новые возможности bem-tools для автоматической ...
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Иструментарий для быстрой разработки игр с 2 d физикой
20111204 computer graphics_galinsky_lecture12_real_time
iOS-05_2-UIKit
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
Python + GPGPU
Владимир Алаев, Сергей Белов "Новые возможности bem-tools для автоматической ...
Ad

Similar to «3D-плеер на WebGL», Василика Климова, MoscowJS 21 (20)

PDF
WebGL. Что за технология, почему стоит изучать и как начать ей пользоваться, ...
PDF
Пощупать 3д в браузере | Odessa Frontend Meetup #15
PDF
Василика Климова
PDF
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
PDF
Ренессанс графики на клиенте
PDF
Пора учить WebGL
PDF
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
PPT
3D в браузере. Битва за реалистичность / Иван Дембицкий (Realaxy)
PPT
Архитектура современного 3 d движка: Разработка Xenus: Точка кипения
PPTX
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
PPT
3dweb
PDF
Компьютерная графика в Processing, часть 7. 3D в Processing
PPSX
Moving from Flash to HTML5 – converting large projects
ODP
Tanki Online — multiplayer 3D-action in browser
PPT
CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр
PPTX
Базовые понятия 3D графики (Ден Шергин) - DEBUG TiME #3 2016
PPT
OpenGL ES 1.1 и 2.0 для разработки iPhone игр
PPT
Лекция по Трёхмерной графике
ODP
3D в браузерных играх, социальных сетях и на мобильных платформах
WebGL. Что за технология, почему стоит изучать и как начать ей пользоваться, ...
Пощупать 3д в браузере | Odessa Frontend Meetup #15
Василика Климова
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
Ренессанс графики на клиенте
Пора учить WebGL
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
3D в браузере. Битва за реалистичность / Иван Дембицкий (Realaxy)
Архитектура современного 3 d движка: Разработка Xenus: Точка кипения
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
3dweb
Компьютерная графика в Processing, часть 7. 3D в Processing
Moving from Flash to HTML5 – converting large projects
Tanki Online — multiplayer 3D-action in browser
CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр
Базовые понятия 3D графики (Ден Шергин) - DEBUG TiME #3 2016
OpenGL ES 1.1 и 2.0 для разработки iPhone игр
Лекция по Трёхмерной графике
3D в браузерных играх, социальных сетях и на мобильных платформах
Ad

More from MoscowJS (20)

PDF
Александр Русаков - TypeScript 2 in action
PDF
Виктор Розаев - Как не сломать обратную совместимость в Public API
PDF
Favicon на стероидах
PDF
E2E-тестирование мобильных приложений
PDF
Reliable DOM testing with browser-monkey
PDF
Basis.js - Production Ready SPA Framework
PDF
Контекст в React, Николай Надоричев, MoscowJS 31
PDF
Верстка Canvas, Алексей Охрименко, MoscowJS 31
PDF
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
PDF
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
PDF
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
PDF
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
PDF
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
PDF
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
PDF
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
PDF
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
PDF
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
PDF
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
PDF
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
PDF
"Доклад не про React", Антон Виноградов, MoscowJS 27
Александр Русаков - TypeScript 2 in action
Виктор Розаев - Как не сломать обратную совместимость в Public API
Favicon на стероидах
E2E-тестирование мобильных приложений
Reliable DOM testing with browser-monkey
Basis.js - Production Ready SPA Framework
Контекст в React, Николай Надоричев, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
"Доклад не про React", Антон Виноградов, MoscowJS 27

«3D-плеер на WebGL», Василика Климова, MoscowJS 21