Пощупать 3д в браузере | Odessa Frontend Meetup #15

OdessaFrontend
OdessaFrontendOdessaFrontend
Как пощупать 3Д в браузере
И что для этого необходимо
UNILIMES
1
Константин Плаксивый
веб разработчик компании UNILIMES
расскажет о ключевых объектах 3д графики и о их взаимодействии,
в контексте библиотеки THREE.JS
2
Ключевые объекты для работы с 3D
графикой
Vector3 ( Vector2 )
Geometry
Face
Material
Texture
1.
2.
3.
4.
5.
3
На базе взаимодействия предыдущих объектов мы рассмотрим более
масштабные, такие как:
Scene
Object3D (Group)
Mesh
1.
2.
3.
4
И в заключении рассмотрим взаимодействие с ними с помощью
Camera
Raycaster
1.
2.
5
Vector3
Vector3, а иначе вектор, вертекс,
вершина. Этот объект является
ключевым для работы с 3д
пространством и используется в таких
формах как позиция или направление.
Комплексное число или просто
контейнер для координат ( X, Y, Z )*.
6
Geometry
Геометрия. Конструкция несущая структуру
любого 3д объекта в 3д пространстве.
Строится в первую очередь из вершин.
7
Геометрия может состоять из одних вершин
и тогда её чаще всего используют как
поинт-клауд. Облако точек. В таком
формате она часто поступает с некоторых
3д сканеров.
8
Но чаще геометрия используется в
совокупнсти вершин и фейсов. Те и другие
находятся в геометрии в массиве и в
дальнейшем используются как основные
данные для построения геометрии.
9
Face
Но где же поверхность?
Технически фейс это объект, несущий
информацию о том, в каком порядке
нужно объединить три вершины
геометрии в поверхность для
дальнейшей отрисовки.
10
Фейс хранит в себе данные о индексах
трех вершин геометрии, в которой
находится. В случае с THREE.js они
обозначены в фейсах как вершина A, B
и C.
11
Geometry—Face and Vertex
Когда у геометрии есть и вершины и
фейсы, она может предстать в более
объемном виде. На изображении мы
видим 8 вершин по которым строится куб,
а так же 12 фейсов, составленных по этим
вершинам.
12
Material
Материал. В 3д для отображения объекта не
достаточно одной геометрии. Нам так же
потребуется материал, несущий в себе
информацию о внешних характеристиках
объекта.
13
В библиотеке three.js используется большое
количество материалов. Для примера
следующие по мере их усложнения.
MeshNormalMaterial
MeshBasicMaterial
MeshStandardMaterial
и другие...
1.
2.
3.
4.
14
Texture
но что если мы захотим обернуть наш объект в
какую-то картинку?.
Для этого нам понадобится текстура. Текстура это
особый объект в котором файл картинки
преобразуется в буфер, который в дальнейшем
попадает в программу для видеокарты на ряду с
геометрией и материалом.
15
Texture
Текстура является самостоятельным объектом, но в
большинстве случаев используется в качестве
ресурса для "карт" материала.
16
Среди часто используемых карт материала можно перечислить
следующие.
map - просто текстура
normalMap — карта рельефности (иллюзия так как не влияет на реальную
геометрию)
aoMap (ambient occlusion map) — карта освещения.
envMap — карта окружения.
и другие...
1.
2.
3.
4.
5.
17
Material + Texture + Face
Но теперь вопрос, как текстура и материал взаимодействуют с
геометрией?.
Для этого используются данные хранящиеся в фейсе. Это информация о
UV-развертке фейса. Она определяет, какую часть текстуры надо
отрисовать на конкретном фейсе.
18
19
Scene,Object3D Mesh
Мы познакомились с ключевыми деталями из которых состоит 3д
пространство и переходим к более масштабным объектам, которые
позволяют объединять эти детали в полноценные сцены. Все эти объекты
обладают необходимым набором свойств для создания древообразной
иерархии. И в вершине этой иерархии находится сцена.
Это Scene, Object3D и Mesh.
20
Scene
Внешняя оболочка нашего пространства и по совместительству тот объект,
который будет основным ресурсом для отрисовки 3д пространства.
Содержит в себе все объекты с которыми мы будем работать.
Сцен может быть много, но чаще всего работа ведется с одной.
21
Object3D
Контейнер не обладающий геометрией и материалом, но позволяющий
хранить внутри другие Object3D | Scene | Mesh объекты, а так же несущий
информацию о матрице преобразования. Для простоты понимания мы
будем говорить о позиции, повороте и скейле.
Помимо прочего, этот объект является прототипом для большинства других
объектов three.js, включая Mesh и Scene. В частности, тех объектов, у
которых предполагается позиция, поворот и скейл.
22
Object3D
Из основных особенностей этого объекта, хочется выделить его
пространственные характеристики. Объект3Д является контейнером, и
обладая своей матрицей преобразования, способен содержать внутри
наследников, которые в свою очередь будут воспринимать пространство
этого контейнера как абсолютное относительно родителя.
23
Object3D
Это выражается в том, что к примеру, если мы заскейлим, сожмем внешний
контейнер — на параметры скейла внутренних контейнеров это не
повлияет и технически, внутри объектам будет вполне просторно.
Перемещаться от х1 к х10 они будут в локальной системе координат. Это
же касается поворота и позиции. Хотя при отрисовке такой конструкции,
мы всё же будем видеть объекты преобразованными, а значит сжатыми,
повернутыми и заскейленными относительно своего родительского
контейнера.
24
Mesh
То самое к чему мы так долго шли. Один из
самых выразительных элементов всего этого
процесса.
25
Наблюдая ранее примеры с материалами и
геометрией мы уже видели этот куб. Однако
без Мэша в three.js мы не смогли бы создать
его. Так как Mesh это носитель геометрии и
материала. Именно в нем, то и другое,
объединяется и находит друг друга.
26
Хочется отметить, что при создании Mesh-а
нам необходимо передать в него два
аргумента, коими является геометрия и
материал.
27
Так как мэш унаследован от Object3D. То у
него проявляются все пространственные
характеристики самого Object3D. Он может
быть полноценной ступенькой иерархии, а
так же обладает своей собственной
матрицей преобразования, так же влияющей
на все вложенные в него объекты.
28
Raycaster and Camera
И вот мы подбираемся к завершающему этапу. Камера и Рейкастер. Эти
объекты нужны нам для взаимодействия со сценой и для её
"прощупывания".
29
Camera
Камера объект библиотеки three.js, так же как
и Mesh образованый от Object3D и
обладающий своей матрицей
преобразования, но ко всему содержащий
несколько дополнительных матриц. Например
матрицу проекции.
30
Помимо позиции, камера содержит
информацию о проекции, соотношении
сторон, угле обзора, параметрах видимости
такие как near | far, которые определяют в
дальнейшем какие объекты или их части
будут видны и на каком удалении от камеры.
31
Среди доступных для использования камер
хочется выделить две основные, Это:
PerspectiveCamera
OrthographicCamera
1.
2.
32
PerspectiveCamera
Перспективная камера является камерой
предоставляющей параметры проекции в
перспективе. Позволяющие отобразить то, что видит
камера с перспективой.
Красным на окружности выделена область, которая
не попадает в проекцию камеры.
33
картинка из википедии
34
OrthographicCamera
Ортографическая камера отличается от
перспективной, отсутствием угла обзора. Она смотрит
в пространство через проекцию определяемую
исключительно параметрами ширины и высоты самой
проекции. Что в результате дает ортоганальный
снимок.
35
картинка из википедии
36
Raycaster
Рейкастер. Математический аппарат,
инструмент позволяющий "сканировать"
необходимую область пространства Object3D
и лежащую на пути луча. Ориентированный на
поиск геометрии.
37
Raycaster
Рейкастер обладает рядом возможностей, своим принципом и требует
некоторую настройку для работы.
Мы практически подобрались к прощупыванию 3д пространства, и именно
рейкастер нам предоставит эту возможность.
38
Raycaster
Для начала рейкастер требуется установить в нужную позицию и указать
направление. Для этого в three.js используется несколько методов.
первый raycaster.setFromCamera( mouse, camera );
39
Raycaster
аргумент mouse это координата события, к примеру клика по
ДомЭлементу. Но в своем изначальном виде данные события нам не
подойдут. Raycaster принимает их в ином формате, чем просто x,y позиция
курсора в момент клика.
40
Raycaster
m.x = (event.clientX/window.innerWidth) * 2 - 1;
m.y = - (event.clientY/window.innerHeight) * 2 + 1;
Основная цель предыдущей операции — преобразовать значения x,y
позиции курсора из пространства ширини и высоты экрана, в
пространство альфа-значений, где левый и нижний край экрана имеют
значение -1, а правый и верхний +1. Именно в такой форме Raycaster
принимает данные для дальнейшей настройки.
41
Raycaster
так клик курсора в центре экрана даст после преобразования значение
mouse = { x: 0, y: 0 }. В последствии эти данные будут использованы для
определения точки в направлении которой должно быть произведено
искажение луча рейкастера опираясь на данные проекции камеры.
42
Raycaster
аргумент camera принимает на вход объект камеры, при этом подходит
как PerspectiveCamera так и OrthographicCamera.
43
Raycaster
После настройки рейкастера, мы можем перейти к его использованию. Для
этого нам необходимо воспользоваться следующим методом.
.intersectObjects( [ array of Object3D | Mesh ] );
вызов этого метода с передачей в него массива объектов, которые мы
хотим "отрейкастить" приведет в движение довольно сложный механизм.
44
Щупаем
Так как мы ознакомились со всеми вводными можно перейти к
завершающему этапу прощупывания.
Обратим внимание на этот слайд.
45
46
спасибо чуваку создавшему этот
замечательный движок для презентаций
https://github.com/shower/shower
47
спасибо [ Odessa FRONTEND community ] за
повод для создания доклада и за
возможность его докласть
48
спасибо,что были с нами
UNILIMES
49
bounceit
50
1 of 50

Recommended

Presentation Diplom by
Presentation DiplomPresentation Diplom
Presentation Diplomguestc80a581
348 views23 slides
Введиние в разработку 3D игр для Nokia Asha телефонов by
Введиние в разработку 3D игр для Nokia Asha телефоновВвединие в разработку 3D игр для Nokia Asha телефонов
Введиние в разработку 3D игр для Nokia Asha телефоновMicrosoft Mobile Developer
526 views47 slides
3D графіка by
3D графіка3D графіка
3D графікаsveta78314
125 views21 slides
л.1 by
л.1л.1
л.1cezium
475 views29 slides
“ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt) by
 “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt) “ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)
“ComputerVision(Ruby && OpenCV)”, Людмила Дежкина ( Senior Ruby, DataArt)Alina Vilk
791 views20 slides
Tomato Engine: Как мы создавали онлайн шутер с авторитарным сервером by
Tomato Engine: Как мы создавали онлайн шутер с авторитарным серверомTomato Engine: Как мы создавали онлайн шутер с авторитарным сервером
Tomato Engine: Как мы создавали онлайн шутер с авторитарным серверомDevGAMM Conference
2.4K views30 slides

More Related Content

What's hot

РЕАЛИЗАЦИЯ РАДИАЛЬНО-БАЗИСНОЙ НЕЙРОННОЙ СЕТИ НА МАССИВНО-ПАРАЛЛЕЛЬНОЙ АРХИТЕК... by
РЕАЛИЗАЦИЯ РАДИАЛЬНО-БАЗИСНОЙ НЕЙРОННОЙ СЕТИ НА МАССИВНО-ПАРАЛЛЕЛЬНОЙ АРХИТЕК...РЕАЛИЗАЦИЯ РАДИАЛЬНО-БАЗИСНОЙ НЕЙРОННОЙ СЕТИ НА МАССИВНО-ПАРАЛЛЕЛЬНОЙ АРХИТЕК...
РЕАЛИЗАЦИЯ РАДИАЛЬНО-БАЗИСНОЙ НЕЙРОННОЙ СЕТИ НА МАССИВНО-ПАРАЛЛЕЛЬНОЙ АРХИТЕК...ITMO University
280 views5 slides
фурье вычисления для сравнения изображений by
фурье вычисления для сравнения изображенийфурье вычисления для сравнения изображений
фурье вычисления для сравнения изображенийDmitry Protopopov
347 views22 slides
Векторизация кода (семинар 1) by
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Mikhail Kurnosov
1.2K views39 slides
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно... by
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...Омские ИТ-субботники
159 views54 slides
CV2011-2. Lecture 09. Single view reconstructin. by
CV2011-2. Lecture 09.  Single view reconstructin.CV2011-2. Lecture 09.  Single view reconstructin.
CV2011-2. Lecture 09. Single view reconstructin.Anton Konushin
1K views129 slides
Расчёт дифракционных картин by
Расчёт дифракционных картинРасчёт дифракционных картин
Расчёт дифракционных картинTimur Shaporev
1.4K views4 slides

What's hot(12)

РЕАЛИЗАЦИЯ РАДИАЛЬНО-БАЗИСНОЙ НЕЙРОННОЙ СЕТИ НА МАССИВНО-ПАРАЛЛЕЛЬНОЙ АРХИТЕК... by ITMO University
РЕАЛИЗАЦИЯ РАДИАЛЬНО-БАЗИСНОЙ НЕЙРОННОЙ СЕТИ НА МАССИВНО-ПАРАЛЛЕЛЬНОЙ АРХИТЕК...РЕАЛИЗАЦИЯ РАДИАЛЬНО-БАЗИСНОЙ НЕЙРОННОЙ СЕТИ НА МАССИВНО-ПАРАЛЛЕЛЬНОЙ АРХИТЕК...
РЕАЛИЗАЦИЯ РАДИАЛЬНО-БАЗИСНОЙ НЕЙРОННОЙ СЕТИ НА МАССИВНО-ПАРАЛЛЕЛЬНОЙ АРХИТЕК...
ITMO University280 views
фурье вычисления для сравнения изображений by Dmitry Protopopov
фурье вычисления для сравнения изображенийфурье вычисления для сравнения изображений
фурье вычисления для сравнения изображений
Dmitry Protopopov347 views
Векторизация кода (семинар 1) by Mikhail Kurnosov
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)
Mikhail Kurnosov1.2K views
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно... by Омские ИТ-субботники
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
CV2011-2. Lecture 09. Single view reconstructin. by Anton Konushin
CV2011-2. Lecture 09.  Single view reconstructin.CV2011-2. Lecture 09.  Single view reconstructin.
CV2011-2. Lecture 09. Single view reconstructin.
Anton Konushin1K views
Расчёт дифракционных картин by Timur Shaporev
Расчёт дифракционных картинРасчёт дифракционных картин
Расчёт дифракционных картин
Timur Shaporev1.4K views
ФГУП НИИР - Cloud by ifedorus
ФГУП НИИР - CloudФГУП НИИР - Cloud
ФГУП НИИР - Cloud
ifedorus906 views
МЕТОДИКА СБОРКИ И ОБРАБОТКИ ДАННЫХ, ПОЛУЧЕННЫХ В ПРОЦЕССЕ 3D-СКАНИРОВАНИЯ by ITMO University
МЕТОДИКА СБОРКИ И ОБРАБОТКИ ДАННЫХ, ПОЛУЧЕННЫХ В ПРОЦЕССЕ 3D-СКАНИРОВАНИЯМЕТОДИКА СБОРКИ И ОБРАБОТКИ ДАННЫХ, ПОЛУЧЕННЫХ В ПРОЦЕССЕ 3D-СКАНИРОВАНИЯ
МЕТОДИКА СБОРКИ И ОБРАБОТКИ ДАННЫХ, ПОЛУЧЕННЫХ В ПРОЦЕССЕ 3D-СКАНИРОВАНИЯ
ITMO University754 views
CV2011-2. Lecture 07. Binocular stereo. by Anton Konushin
CV2011-2. Lecture 07.  Binocular stereo.CV2011-2. Lecture 07.  Binocular stereo.
CV2011-2. Lecture 07. Binocular stereo.
Anton Konushin1.3K views
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов. by TKConf
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
TKConf447 views
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX) by Mikhail Kurnosov
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Mikhail Kurnosov2.2K views
2004 Белова "Моделирование систем синхронизации с использованием хаотических ... by RF-Lab
2004 Белова "Моделирование систем синхронизации с использованием хаотических ...2004 Белова "Моделирование систем синхронизации с использованием хаотических ...
2004 Белова "Моделирование систем синхронизации с использованием хаотических ...
RF-Lab143 views

Similar to Пощупать 3д в браузере | Odessa Frontend Meetup #15

3 d studio_max by
3 d studio_max3 d studio_max
3 d studio_maxAlexis Jobes
183 views29 slides
V ray2 by
V ray2V ray2
V ray2guest062370d
1 view35 slides
Элективный курс 3d моделирование и анимация by
Элективный курс 3d моделирование и анимацияЭлективный курс 3d моделирование и анимация
Элективный курс 3d моделирование и анимацияОльга Бутонакова
526 views10 slides
Интерактивные 3D-карты своими руками / Александр Амосов (Avito) by
Интерактивные 3D-карты своими руками / Александр Амосов (Avito)Интерактивные 3D-карты своими руками / Александр Амосов (Avito)
Интерактивные 3D-карты своими руками / Александр Амосов (Avito)Ontico
549 views92 slides
Matchmoving Introduction by
Matchmoving IntroductionMatchmoving Introduction
Matchmoving IntroductionAlexander Lavrov
476 views22 slides
Марина Степанова "Кластеризатор в JS API Яндекс.Карт" by
Марина Степанова "Кластеризатор в JS API Яндекс.Карт"Марина Степанова "Кластеризатор в JS API Яндекс.Карт"
Марина Степанова "Кластеризатор в JS API Яндекс.Карт"Yandex
2K views37 slides

Similar to Пощупать 3д в браузере | Odessa Frontend Meetup #15(20)

Интерактивные 3D-карты своими руками / Александр Амосов (Avito) by Ontico
Интерактивные 3D-карты своими руками / Александр Амосов (Avito)Интерактивные 3D-карты своими руками / Александр Амосов (Avito)
Интерактивные 3D-карты своими руками / Александр Амосов (Avito)
Ontico549 views
Марина Степанова "Кластеризатор в JS API Яндекс.Карт" by Yandex
Марина Степанова "Кластеризатор в JS API Яндекс.Карт"Марина Степанова "Кластеризатор в JS API Яндекс.Карт"
Марина Степанова "Кластеризатор в JS API Яндекс.Карт"
Yandex2K views
тема 03 картографические и геоинформационные структуры данных by Andrey Lepikhov
тема 03 картографические и геоинформационные структуры данныхтема 03 картографические и геоинформационные структуры данных
тема 03 картографические и геоинформационные структуры данных
Andrey Lepikhov758 views
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах" by Yandex
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Yandex1.7K views
распознавание автомобильного номера в условиях зашумлённости» by seik0ixtem
распознавание автомобильного номера в условиях зашумлённости»распознавание автомобильного номера в условиях зашумлённости»
распознавание автомобильного номера в условиях зашумлённости»
seik0ixtem1.1K views
C++ Базовый. Занятие 05. by Igor Shkulipa
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.
Igor Shkulipa182 views
Convert this: peculiarities of cross-platform mobile game development at Vizor by DevGAMM Conference
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 Conference243 views
"Рекомендации по проектированию API" — Марина Степанова, Яндекс by Yandex
"Рекомендации по проектированию API" — Марина Степанова, Яндекс"Рекомендации по проектированию API" — Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
Yandex6.1K views
Сопровождение движущихся объектов в условиях их заслонения движущимися и непо... by Nikolai Ptitsyn
Сопровождение движущихся объектов в условиях их заслонения движущимися и непо...Сопровождение движущихся объектов в условиях их заслонения движущимися и непо...
Сопровождение движущихся объектов в условиях их заслонения движущимися и непо...
Nikolai Ptitsyn1.3K views
«3D-плеер на WebGL», Василика Климова, MoscowJS 21 by MoscowJS
«3D-плеер на WebGL», Василика Климова, MoscowJS 21«3D-плеер на WebGL», Василика Климова, MoscowJS 21
«3D-плеер на WebGL», Василика Климова, MoscowJS 21
MoscowJS1.9K views
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV by Pavel Tsukanov
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCVМАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
Pavel Tsukanov4.5K views
"Рекомендации по проектированию API". Марина Степанова, Яндекс by Yandex
"Рекомендации по проектированию API". Марина Степанова, Яндекс"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, Яндекс
Yandex1.7K views
Архитектура современного 3 d движка: Разработка Xenus: Точка кипения by Roman_Lut
Архитектура современного 3 d движка: Разработка Xenus: Точка кипенияАрхитектура современного 3 d движка: Разработка Xenus: Точка кипения
Архитектура современного 3 d движка: Разработка Xenus: Точка кипения
Roman_Lut5.7K views
Делаем кроссбраузерные тесты поверх Webdriver by SQALab
Делаем кроссбраузерные тесты поверх WebdriverДелаем кроссбраузерные тесты поверх Webdriver
Делаем кроссбраузерные тесты поверх Webdriver
SQALab1.6K views
Расчетная работа Цифровой коллаж by sheplyakov
Расчетная работа Цифровой коллажРасчетная работа Цифровой коллаж
Расчетная работа Цифровой коллаж
sheplyakov717 views

More from OdessaFrontend

Викторина | Odessa Frontend Meetup #19 by
Викторина | Odessa Frontend Meetup #19Викторина | Odessa Frontend Meetup #19
Викторина | Odessa Frontend Meetup #19OdessaFrontend
139 views20 slides
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee... by
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...OdessaFrontend
151 views34 slides
Великолепный Gatsby.js | Odessa Frontend Meetup #19 by
Великолепный Gatsby.js | Odessa Frontend Meetup #19Великолепный Gatsby.js | Odessa Frontend Meetup #19
Великолепный Gatsby.js | Odessa Frontend Meetup #19OdessaFrontend
122 views50 slides
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr... by
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...OdessaFrontend
214 views73 slides
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18 by
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18OdessaFrontend
82 views19 slides
Викторина | Odessa Frontend Meetup #17 by
Викторина | Odessa Frontend Meetup #17Викторина | Odessa Frontend Meetup #17
Викторина | Odessa Frontend Meetup #17OdessaFrontend
150 views23 slides

More from OdessaFrontend(20)

Викторина | Odessa Frontend Meetup #19 by OdessaFrontend
Викторина | Odessa Frontend Meetup #19Викторина | Odessa Frontend Meetup #19
Викторина | Odessa Frontend Meetup #19
OdessaFrontend139 views
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee... by OdessaFrontend
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
OdessaFrontend151 views
Великолепный Gatsby.js | Odessa Frontend Meetup #19 by OdessaFrontend
Великолепный Gatsby.js | Odessa Frontend Meetup #19Великолепный Gatsby.js | Odessa Frontend Meetup #19
Великолепный Gatsby.js | Odessa Frontend Meetup #19
OdessaFrontend122 views
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr... by OdessaFrontend
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
OdessaFrontend214 views
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18 by OdessaFrontend
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
OdessaFrontend82 views
Викторина | Odessa Frontend Meetup #17 by OdessaFrontend
Викторина | Odessa Frontend Meetup #17Викторина | Odessa Frontend Meetup #17
Викторина | Odessa Frontend Meetup #17
OdessaFrontend150 views
Антихрупкий TypeScript | Odessa Frontend Meetup #17 by OdessaFrontend
Антихрупкий TypeScript | Odessa Frontend Meetup #17Антихрупкий TypeScript | Odessa Frontend Meetup #17
Антихрупкий TypeScript | Odessa Frontend Meetup #17
OdessaFrontend108 views
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17 by OdessaFrontend
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
OdessaFrontend84 views
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17 by OdessaFrontend
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
OdessaFrontend254 views
Объекты в ECMAScript | Odessa Frontend Meetup #16 by OdessaFrontend
Объекты в ECMAScript | Odessa Frontend Meetup #16Объекты в ECMAScript | Odessa Frontend Meetup #16
Объекты в ECMAScript | Odessa Frontend Meetup #16
OdessaFrontend169 views
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16 by OdessaFrontend
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
OdessaFrontend159 views
Cлайдер на CSS | Odessa Frontend Meetup #16 by OdessaFrontend
Cлайдер на CSS | Odessa Frontend Meetup #16Cлайдер на CSS | Odessa Frontend Meetup #16
Cлайдер на CSS | Odessa Frontend Meetup #16
OdessaFrontend148 views
Современный станок верстальщика by OdessaFrontend
Современный станок верстальщикаСовременный станок верстальщика
Современный станок верстальщика
OdessaFrontend188 views
Викторина | Odessa Frontend Meetup #15 by OdessaFrontend
Викторина | Odessa Frontend Meetup #15Викторина | Odessa Frontend Meetup #15
Викторина | Odessa Frontend Meetup #15
OdessaFrontend87 views
DRY’им Vuex | Odessa Frontend Meetup #15 by OdessaFrontend
DRY’им Vuex | Odessa Frontend Meetup #15DRY’им Vuex | Odessa Frontend Meetup #15
DRY’им Vuex | Odessa Frontend Meetup #15
OdessaFrontend64 views
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15 by OdessaFrontend
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
OdessaFrontend109 views
Викторина | Odessa Frontend Meetup #14 by OdessaFrontend
Викторина | Odessa Frontend Meetup #14Викторина | Odessa Frontend Meetup #14
Викторина | Odessa Frontend Meetup #14
OdessaFrontend83 views
Викторина | Odessa Frontend Meetup #13 by OdessaFrontend
Викторина | Odessa Frontend Meetup #13Викторина | Odessa Frontend Meetup #13
Викторина | Odessa Frontend Meetup #13
OdessaFrontend147 views
Структуры данных в JavaScript | Odessa Frontend Meetup #13 by OdessaFrontend
Структуры данных в JavaScript | Odessa Frontend Meetup #13Структуры данных в JavaScript | Odessa Frontend Meetup #13
Структуры данных в JavaScript | Odessa Frontend Meetup #13
OdessaFrontend1.6K views
Эффективность с большой буквы Э… или любой другой | Odessa Frontend Meetup #13 by OdessaFrontend
Эффективность с большой буквы Э… или любой другой | Odessa Frontend Meetup #13Эффективность с большой буквы Э… или любой другой | Odessa Frontend Meetup #13
Эффективность с большой буквы Э… или любой другой | Odessa Frontend Meetup #13
OdessaFrontend184 views

Пощупать 3д в браузере | Odessa Frontend Meetup #15

  • 1. Как пощупать 3Д в браузере И что для этого необходимо UNILIMES 1
  • 2. Константин Плаксивый веб разработчик компании UNILIMES расскажет о ключевых объектах 3д графики и о их взаимодействии, в контексте библиотеки THREE.JS 2
  • 3. Ключевые объекты для работы с 3D графикой Vector3 ( Vector2 ) Geometry Face Material Texture 1. 2. 3. 4. 5. 3
  • 4. На базе взаимодействия предыдущих объектов мы рассмотрим более масштабные, такие как: Scene Object3D (Group) Mesh 1. 2. 3. 4
  • 5. И в заключении рассмотрим взаимодействие с ними с помощью Camera Raycaster 1. 2. 5
  • 6. Vector3 Vector3, а иначе вектор, вертекс, вершина. Этот объект является ключевым для работы с 3д пространством и используется в таких формах как позиция или направление. Комплексное число или просто контейнер для координат ( X, Y, Z )*. 6
  • 7. Geometry Геометрия. Конструкция несущая структуру любого 3д объекта в 3д пространстве. Строится в первую очередь из вершин. 7
  • 8. Геометрия может состоять из одних вершин и тогда её чаще всего используют как поинт-клауд. Облако точек. В таком формате она часто поступает с некоторых 3д сканеров. 8
  • 9. Но чаще геометрия используется в совокупнсти вершин и фейсов. Те и другие находятся в геометрии в массиве и в дальнейшем используются как основные данные для построения геометрии. 9
  • 10. Face Но где же поверхность? Технически фейс это объект, несущий информацию о том, в каком порядке нужно объединить три вершины геометрии в поверхность для дальнейшей отрисовки. 10
  • 11. Фейс хранит в себе данные о индексах трех вершин геометрии, в которой находится. В случае с THREE.js они обозначены в фейсах как вершина A, B и C. 11
  • 12. Geometry—Face and Vertex Когда у геометрии есть и вершины и фейсы, она может предстать в более объемном виде. На изображении мы видим 8 вершин по которым строится куб, а так же 12 фейсов, составленных по этим вершинам. 12
  • 13. Material Материал. В 3д для отображения объекта не достаточно одной геометрии. Нам так же потребуется материал, несущий в себе информацию о внешних характеристиках объекта. 13
  • 14. В библиотеке three.js используется большое количество материалов. Для примера следующие по мере их усложнения. MeshNormalMaterial MeshBasicMaterial MeshStandardMaterial и другие... 1. 2. 3. 4. 14
  • 15. Texture но что если мы захотим обернуть наш объект в какую-то картинку?. Для этого нам понадобится текстура. Текстура это особый объект в котором файл картинки преобразуется в буфер, который в дальнейшем попадает в программу для видеокарты на ряду с геометрией и материалом. 15
  • 16. Texture Текстура является самостоятельным объектом, но в большинстве случаев используется в качестве ресурса для "карт" материала. 16
  • 17. Среди часто используемых карт материала можно перечислить следующие. map - просто текстура normalMap — карта рельефности (иллюзия так как не влияет на реальную геометрию) aoMap (ambient occlusion map) — карта освещения. envMap — карта окружения. и другие... 1. 2. 3. 4. 5. 17
  • 18. Material + Texture + Face Но теперь вопрос, как текстура и материал взаимодействуют с геометрией?. Для этого используются данные хранящиеся в фейсе. Это информация о UV-развертке фейса. Она определяет, какую часть текстуры надо отрисовать на конкретном фейсе. 18
  • 19. 19
  • 20. Scene,Object3D Mesh Мы познакомились с ключевыми деталями из которых состоит 3д пространство и переходим к более масштабным объектам, которые позволяют объединять эти детали в полноценные сцены. Все эти объекты обладают необходимым набором свойств для создания древообразной иерархии. И в вершине этой иерархии находится сцена. Это Scene, Object3D и Mesh. 20
  • 21. Scene Внешняя оболочка нашего пространства и по совместительству тот объект, который будет основным ресурсом для отрисовки 3д пространства. Содержит в себе все объекты с которыми мы будем работать. Сцен может быть много, но чаще всего работа ведется с одной. 21
  • 22. Object3D Контейнер не обладающий геометрией и материалом, но позволяющий хранить внутри другие Object3D | Scene | Mesh объекты, а так же несущий информацию о матрице преобразования. Для простоты понимания мы будем говорить о позиции, повороте и скейле. Помимо прочего, этот объект является прототипом для большинства других объектов three.js, включая Mesh и Scene. В частности, тех объектов, у которых предполагается позиция, поворот и скейл. 22
  • 23. Object3D Из основных особенностей этого объекта, хочется выделить его пространственные характеристики. Объект3Д является контейнером, и обладая своей матрицей преобразования, способен содержать внутри наследников, которые в свою очередь будут воспринимать пространство этого контейнера как абсолютное относительно родителя. 23
  • 24. Object3D Это выражается в том, что к примеру, если мы заскейлим, сожмем внешний контейнер — на параметры скейла внутренних контейнеров это не повлияет и технически, внутри объектам будет вполне просторно. Перемещаться от х1 к х10 они будут в локальной системе координат. Это же касается поворота и позиции. Хотя при отрисовке такой конструкции, мы всё же будем видеть объекты преобразованными, а значит сжатыми, повернутыми и заскейленными относительно своего родительского контейнера. 24
  • 25. Mesh То самое к чему мы так долго шли. Один из самых выразительных элементов всего этого процесса. 25
  • 26. Наблюдая ранее примеры с материалами и геометрией мы уже видели этот куб. Однако без Мэша в three.js мы не смогли бы создать его. Так как Mesh это носитель геометрии и материала. Именно в нем, то и другое, объединяется и находит друг друга. 26
  • 27. Хочется отметить, что при создании Mesh-а нам необходимо передать в него два аргумента, коими является геометрия и материал. 27
  • 28. Так как мэш унаследован от Object3D. То у него проявляются все пространственные характеристики самого Object3D. Он может быть полноценной ступенькой иерархии, а так же обладает своей собственной матрицей преобразования, так же влияющей на все вложенные в него объекты. 28
  • 29. Raycaster and Camera И вот мы подбираемся к завершающему этапу. Камера и Рейкастер. Эти объекты нужны нам для взаимодействия со сценой и для её "прощупывания". 29
  • 30. Camera Камера объект библиотеки three.js, так же как и Mesh образованый от Object3D и обладающий своей матрицей преобразования, но ко всему содержащий несколько дополнительных матриц. Например матрицу проекции. 30
  • 31. Помимо позиции, камера содержит информацию о проекции, соотношении сторон, угле обзора, параметрах видимости такие как near | far, которые определяют в дальнейшем какие объекты или их части будут видны и на каком удалении от камеры. 31
  • 32. Среди доступных для использования камер хочется выделить две основные, Это: PerspectiveCamera OrthographicCamera 1. 2. 32
  • 33. PerspectiveCamera Перспективная камера является камерой предоставляющей параметры проекции в перспективе. Позволяющие отобразить то, что видит камера с перспективой. Красным на окружности выделена область, которая не попадает в проекцию камеры. 33
  • 35. OrthographicCamera Ортографическая камера отличается от перспективной, отсутствием угла обзора. Она смотрит в пространство через проекцию определяемую исключительно параметрами ширины и высоты самой проекции. Что в результате дает ортоганальный снимок. 35
  • 37. Raycaster Рейкастер. Математический аппарат, инструмент позволяющий "сканировать" необходимую область пространства Object3D и лежащую на пути луча. Ориентированный на поиск геометрии. 37
  • 38. Raycaster Рейкастер обладает рядом возможностей, своим принципом и требует некоторую настройку для работы. Мы практически подобрались к прощупыванию 3д пространства, и именно рейкастер нам предоставит эту возможность. 38
  • 39. Raycaster Для начала рейкастер требуется установить в нужную позицию и указать направление. Для этого в three.js используется несколько методов. первый raycaster.setFromCamera( mouse, camera ); 39
  • 40. Raycaster аргумент mouse это координата события, к примеру клика по ДомЭлементу. Но в своем изначальном виде данные события нам не подойдут. Raycaster принимает их в ином формате, чем просто x,y позиция курсора в момент клика. 40
  • 41. Raycaster m.x = (event.clientX/window.innerWidth) * 2 - 1; m.y = - (event.clientY/window.innerHeight) * 2 + 1; Основная цель предыдущей операции — преобразовать значения x,y позиции курсора из пространства ширини и высоты экрана, в пространство альфа-значений, где левый и нижний край экрана имеют значение -1, а правый и верхний +1. Именно в такой форме Raycaster принимает данные для дальнейшей настройки. 41
  • 42. Raycaster так клик курсора в центре экрана даст после преобразования значение mouse = { x: 0, y: 0 }. В последствии эти данные будут использованы для определения точки в направлении которой должно быть произведено искажение луча рейкастера опираясь на данные проекции камеры. 42
  • 43. Raycaster аргумент camera принимает на вход объект камеры, при этом подходит как PerspectiveCamera так и OrthographicCamera. 43
  • 44. Raycaster После настройки рейкастера, мы можем перейти к его использованию. Для этого нам необходимо воспользоваться следующим методом. .intersectObjects( [ array of Object3D | Mesh ] ); вызов этого метода с передачей в него массива объектов, которые мы хотим "отрейкастить" приведет в движение довольно сложный механизм. 44
  • 45. Щупаем Так как мы ознакомились со всеми вводными можно перейти к завершающему этапу прощупывания. Обратим внимание на этот слайд. 45
  • 46. 46
  • 47. спасибо чуваку создавшему этот замечательный движок для презентаций https://github.com/shower/shower 47
  • 48. спасибо [ Odessa FRONTEND community ] за повод для создания доклада и за возможность его докласть 48
  • 49. спасибо,что были с нами UNILIMES 49