Dragon3DGraff_Blog — Страница 3 — Creating 3D Editor

TertiusAxis

Выделение объектов

При создании объекта появляется панель с отображением его параметров. Реализовал выделение объектов. TODO: сделать объект выделенным после создания, при выделении отображать панель с параметрами, при изменении значения в панели параметров менять геометрию выделенного объекта.

Читать далее

Изменение объекта вслед за движением мыши

Решение этого вопроса заставило меня вспомнить тригонометрию и векторную алгебру. Постановка задачи: при создании изменять объект вслед за движением мыши. Что мы имеем: координаты курсора в экранных координатах, угол обзора камеры, соотношение сторон.Нужно определить: насколько отличается масштаб вида в мировых координатах в данный момент времени от масштаба экрана, найти расстояние от положения объекта в экранных координатах и умножить его на масштаб вида в текущий момент времени. Чтоб смотреть на камеру со стороны (сверху), я создал третий рендер и поместил его во второй канвас. При нажатии на канвас он увеличивается на весь экран. В последствии сделаю там ортогональную камеру. Первое, что мы сделаем – определим положение объекта в экранных координатах. Для этого спроецируем вектор положения объекта на экран. В three.js предусмотрена функция project(). Клонируем вектор положения объекта, иначе функция изменит положение объекта. Переводим в координаты экрана: На видео первый желтый шарик показывает положение создаваемого объекта. Теперь определим положение камеры в 3D пространстве и запишем его в новый вектор. Для этого также предусмотрена функция: Аналогично определим направление камеры, выраженный единичным вектором: Определим расстояние от камеры до объекта: Теперь из центра из камеры получим точку, отстоящую на расстояние равное расстоянию от камеры до объекта: На видео это второй желтый шарик и зеленая линия,

Читать далее

Создание куба

Создание куба указанием мыши. Точка, в которой создаётся примитив, является пересечением курсора и одной из плоскостей, проходящих по осям координат. Пересечение определяется Raycaster. Изменение размера примитива осуществляется изменением размера на 0.1 при движении мыши. TODO: сделать так, чтобы примитив растягивался за указателем мыши.

Читать далее

Отображение координат

Чтобы лучше ориентироваться в пространстве я решил добавить координаты в точке, которая является проекцией курсора из камеры на координатные плоскости. Реализовано с помощью Raycaster. По осям добавлены невидимые плоскости, пересечение с которыми фиксируется. Из точки пересечения нарисовал пунктирные линии и повесил label с указанием координат. Для label запустил второй рендер CSS2DRenderer. Он рендерится поверх канваса, поэтому теперь события нужно отлавливать на нем, а не на канвасе, например

Читать далее

Создание простой сцены

Итак, начнем. Подключил библиотеку three.js, создал пустую сцену, добавил OrbitControls для вращения камеры, добавил сетку из хелперов библиотеки.Набросал примерно интерфейс как я его себе представлял. По плану левая панель будет иметь возможность прятаться.Добавил стандартные функции создания примитивов куба и шара. Создаются при нажатии на соответствующие кнопки в центре координат (что меня не устраивает). TODO: сделать так, чтобы создание примитива осуществлялось в указанной точке. Для начала привязка подразумевается к главным плоскостям координатной сетки.

Читать далее

Вступление

В этом блоге я буду выкладывать процесс создания 3d-редактора/игрового движка для браузера с использованием библиотеки three.js. Цель проекта — изучение программирования на языке JavaScript, приобретение необходимых навыков, отработка применения сопутствующих инструментов.Исходный код: https://github.com/Dragon3DGraff/TertiusAxisРедактор: https://dragon3dgraff.ru/TertiusAxis/

Читать далее