Камера стоит немного сбоку, потому что если бы она стояла фронтально, увидеть ось Z не получилось бы. Оси должны быть понятны всем, направление привычное: по X слева минус, справа плюс; по Z вдали минус, вблизи плюс, по Y внизу минус, вверху плюс. Но обратите внимание на интересную деталь: ось Z почему-то толще в левой части экрана, а ближе к правой части становится всё тоньше и тоньше. Дело в том, что эта ось уходит всё дальше от нас, и камера отображает объекты согласно перспективе (это называется PerspectiveCamera, которая чаще всего используется на сцене). Есть ещё стандартная камера, но её отображение совсем нереалистичное: представьте обычную комнату, в которой у вещей нет перспективы.
Третью ось мы видим из определенной позиции камеры и смотрим – заметьте, это важно! – в определенном направлении. Сейчас мы оставляем камеру в той же точке, но меняем направление и смотрим по X в точку, скажем, 250.
Изображение изменилось, будто вы стоите в помещении в том же углу, что и раньше, но повернули голову и смотрите не на дверь, а на окно и видите совершенно другую картину. Кроме изменения точки, на которую мы смотрим, можно ещё изменить точку, откуда мы смотрим. Предположим, вы из угла комнаты перешли к двери, – теперь камера по X расположена ближе к нулю.
То же самое можно сделать обратно: опять меняем позицию камеры и угол обзора, и из-за этого на сцене генерируется разное отображение. Первое, что нужно запомнить: камера всегда определяется своим местоположением и точкой, на которую мы смотрим; это основа того, что будет отображено на экране.
Теперь посмотрим на такие понятия, как меш, геометрия и материалы. Сейчас на сцене постепенно появляется новый меш, который собран из геометрии под названием «прямоугольник» (по факту – это некая плоскость).
Он составлен из материала, но материал не совсем обычный – не «basic material», а «phong material», самый сложный и самый реалистичный тип материала. На следующем этапе будет заметно, чем отличается поведение линии и плоскости. Линии составлены из «basic material» – самого простого материала, и просто покрашены в какой-то цвет, а плоскость составлена из реалистичного материала, и он, на самом деле, белый, но почему-то плоскость серая. Серой она является потому, что цвет источника освещения – 0х777777. Сейчас мы удалим из источника освещения синюю гамму и посмотрим, что произойдет: плоскость меняет свой цвет, а линии остаются такими же – продемонстрировано разное поведение материалов.
Basic material не реагирует ни на что, а плоскость с реалистичным материалом реагирует на изменения освещения. Удалим ещё красную гамму: она становится зеленой.
Помимо того, что мы играем с цветом (хотя цвет нашей плоскости остаётся белым, сейчас меняется только источник освещения), саму плоскость тоже можно изменять. Белый цвет задавать ей неинтересно, поэтому рассмотрим следующую вещь, которую мы можем задавать материалу, - текстуру. Мы задали на нашу плоскость текстуру шириной и высотой по 128 пикселей, которая по ней размножилась.
По сути, мы передали в материал некую карту, которая указывает, как ему следует себя отображать. Если мы поменяем цвет источника освещения, например, переведем его на белый дневной свет, плоскость станет гораздо ярче. Текстура, на самом деле, зеленого цвета с синим кружком – эти цвета мы теперь видим так, как они были задуманы, а не так, как отображалось при освещении. То же самое, один в один, будет происходить, когда мы будем говорить уже не про плоскость, а про сложную 3D модель.
Загружаем 3D модель машины как готовый меш. Но меш обладает только геометрией, которая ещё никак не украшена.
Разве это машина? Вы бы на такой согласились ездить?
Вот это – другое дело, уже нормально смотрится. В чем разница? В первом случае машина сделана просто: геометрия и заданный по умолчанию материал (белый материал, нереагирующий на свет). А вторая машина – это меш с реалистичным материалом, на котором определенным образом поставлена текстура, и получаем достаточно красивый результат. При этом объекты освещены со всех сторон одинаково и равномерно: нет теней, разных цветовых оттенков, потому что использовался источник рассеянного света, который со всех сторон светит одинаково, так как расположен где-то очень далеко, как солнце над головой (вообще-то солнце тени генерирует, а наше освещение пока не умеет).
Поставим точку света: посмотрите, как от этого меняется 3D мир.
Мы поставили точку света ближе к нам, и получилось, что яркая часть сейчас освещена (которая ближе к левому углу), а дальше объект плоскости становится всё более зеленым. Это происходит потому, что свет туда долетает хуже. Это аналог лампы, которую вы поставили, направили на какую-нибудь доску, и ближнюю часть она освещает хорошо, а дальнюю – плохо. Свет может быть направленный, можно генерировать тени, но всё это мы с вами увидим и научимся делать в рамках следующих уроков.
На данном этапе мы рассмотрим этот 3D мир с разных сторон и подключим OrbitControl – специальную добавку к three.js. Таким образом мы можем покрутиться по сцене и посмотреть, как это выглядит.
Не обращайте внимания на то, что периодически пропадают оси, это в порядке вещей, мы иногда смотрим на них под тем ракурсом, когда ось имеет нулевую толщину, с другой точки зрения она видна нормально. В целом это выглядит так: машины, плоскость.
Если вы хотите научиться всё это создавать, ждите следующих уроков, где мы по шагам всё разберём.
А сейчас нужно обобщить основные понятия, которые мы сегодня узнали, посмотреть на иерархию отображения. Первоначально у нас есть рендерер – то, что работает с тегом canvas и выводит туда изображения. Он зависит от камеры и сцены: камера направлена на сцену. На сцене есть источники света – это массив, потому что их может быть много; много может быть и мешей – 3D объектов, которые заводятся на сцену. Каждый меш представляет собой геометрию и материал. Материал – это наиболее обширное понятие, есть «хитрые» материалы (например, с отражением), но это уже высший пилотаж, который мы сейчас рассматривать не будем. Но так или иначе, материал включает в себя правила отображения, возможность поставить цвета, текстуры и многое другое. Так выглядит иерархия отображения в рамках просмотра сцены с простейшей стороны.
Пожалуйста, запомните эти понятия и связи между ними, чтобы на следующем уроке, когда мы начнём писать код, вам было проще ориентироваться, и вы не путались в названиях классов и их значениях.
На следующем уроке мы рассмотрим, как подключается библиотека three.js, создадим первую сцену и поставим туда какие-нибудь объекты.
Подписывайтесь на мой youtube канал, чтобы не пропустить следующие уроки!
20.10.2015
Понравился материал? Поделись с друзьями!