Текст 3D¶
Содержание
-
объект
Teкст 3D;
Text3DReactor
¶ Производный от: Система координат (TransformNodeReactor)
Текст 3D используется для создания трёхмерного текста в сцене.
Формально Текст (TextReactor) и Teкст 3D (Text3DReactor) не имеют общих классов, хотя и имеют схожий набор параметров.

Свойства текста¶
Вводится в Teкст 3D (Text3DReactor)
Параметр | Описание |
---|---|
Текст (text.value) | Значение текста. |
Шрифт (text.font_id) | Используемый шрифт. |
Размер шрифта (text.font_size) | Размер используемого шрифта. |
Толщина шрифта (text.font_depth) | Толщина 3d текста. |
Цвет текста (text.color) | Цвет текста. |
Интерлиньяж (text.line_spacing) | Расстояние между строками текста. |
Выравнивание (text.align) | Выравнивание текста. |
-
параметр
Текст;
text.value
¶ Значение текста (например «New text»).
-
параметр
Шрифт;
text.font_id
¶ Используемый шрифт (например «OpenSans-Regular.ttf»).
-
параметр
Размер шрифта;
text.font_size
¶ Размер используемого шрифта. Используются те же единицы измерения, что и у Прямоугольник (RectReactor).
-
параметр
Толщина шрифта;
text.font_depth
¶ Толщина 3d текста.
-
параметр
Цвет текста;
text.color
¶ Цвет текста.
-
параметр
Интерлиньяж;
text.line_spacing
¶ Расстояние между строками текста.
-
параметр
Выравнивание;
text.align
¶ Выравнивание текста как по горизонтали, так и по вертикали.
Действия¶

Действие | Описание |
---|---|
Текст - изменить текст (setText_value) | Установить значение текста. |
Текст - изменить шрифт (setText_font_id) | Установить шрифт для текста. |
Текст - изменить размер (setText_font_size) | Установить размер шрифта для текста. |
Текст - изменить толщину (setText_font_depth) | Установить толщину текста. |
Текст - изменить цвет (setText_color) | Установить цвет текста. |
Текст - изменить выравнивание (setText_align) | Установить выравнивание текста. |
Текст - изменить интерлиньяж (setText_line_spacing) | Установить расстояние между строками. |
-
действие
Текст - изменить текст;
setText_value
(text, concatenate)¶ Установить значение текста. Если задан параметр Конкатенировать с текущим значением, то произойдет конкатенация строк.
Параметры: - Значение / text – новое значение, которое будет установлено для текста, или конкатенировано с текущим значением.
- Конкатенировать с текущим значением / concatenate – Если установлен данный флаг, то произойдет конкатенация(соединение) текущего значения с указанным значением.
-
действие
Текст - изменить шрифт;
setText_font_id
(font_id)¶ Установить шрифт для текста.
Параметры: Значение / font_id – выбранный шрифт Примечание
EV Toolbox идет с набором предустановленных шрифтов, которые вы можете выбрать. Также можно добавить свой шрифт во вкладке Ресурсы
-
действие
Текст - изменить размер;
setText_font_size
(font_size)¶ Установить размер шрифта для текста.
Параметры: Значение / font_size – размер. Используются те же единицы измерения, что и у Прямоугольник (RectReactor).
-
действие
Текст - изменить толщину;
setText_font_depth
(depth)¶ Установить толщину 3d текста.
Параметры: Значение / depth – толщина.
-
действие
Текст - изменить цвет;
setText_color
(color)¶ Установить размер шрифта для текста.
Параметры: Значение / color – цвет. Также у цвета можно установить прозрачность. Примечание
В версии Advanced, если вы захотите установить цвет текста в скриптах, то используйте для задания цвета конструктор
osg.Vec4
, который будет содержать RGBA-значения(напримерosg.Vec4(1.0,1.0,1.0,0.5)
для белого полупрозрачного цвета).
-
действие
Текст - изменить выравнивание;
setText_align
(align)¶ Установить выравнивание текста.
Параметры: Значение / align – выравнивание. Указываются как горизонтальное выравнивание, так и вертикальное. Примечание
В версии Advanced, если вы захотите установить выравнивание текста в скриптах, то используйте строковые значения «left», «center», «right» для горизонтального и «top», «center», «bottom» для вертикального, указанные через дефис. Например, для выравнивания слева по горизонтали и справа по верху укажите «left-top».
-
действие
Текст - изменить интерлиньяж;
setText_line_spacing
(line_spacing)¶ Установить расстояние между строками текста(интерлиньяж).
Параметры: Значение / line_spacing – расстояние.
Текст3d является производным от Система координат (TransformNodeReactor) и наследует его параметры и действия.
Положение объекта¶
Вводится в Система координат (TransformNodeReactor)
Параметр | Описание |
---|---|
Перемещение (trans) | Перемещение объекта относительно родительского объекта. |
Вращение (rotate) | Поворот объекта относительно родительского объекта. |
Масштаб (scale) | Масштаб объекта относительно родительского объекта. |
Действие | Описание |
---|---|
Объект - переместить (setTrans) | Установить новое перемещение объекта (значение параметра Перемещение (trans)) |
Объект - повернуть (setRotate) | Установить новый поворот объекта (значение параметра Вращение (rotate)) |
Объект - масштабировать (setScale) | Установить новый масштаб объекта (значение параметра Масштаб (scale)) |
Объект - преобразовать (setTransform) | Установить новые значения сразу для трех параметров: Перемещение (trans), Вращение (rotate), Масштаб (scale) |

-
параметр
Перемещение;
trans
¶ Вводится в Система координат (TransformNodeReactor)
Параметр позволяет задать точный сдвиг объекта по координатам (
x
,y
,z
) относительно родительского объекта.Перемещение задаётся в виде объекта
osg.Vec3
. Пример использования:-- Заставим мячик прыгать на месте local ball = ... local velocity = 0 -- Текущая скорость объекта ball.trans = osg.Vec3(0, 0, 0.2) -- Задаём начальное положение - 20 см. local delta_time = 0.01 -- Время между кадрами для обновления -- Функция для обновления function update_velocity_and_position() -- Обновляем положение объекта. -- Для простоты считаем, что скорость за этот период времени не менялась ball.trans = ball.trans + osg.Vec3(0, 0, 1) * velocity * delta_time -- Обновляем скорость: на мячик действует ускорение свободного падения -- 9.8 м/с^2, с предыдущей итерации прошло время delta_time velocity = velocity - 9.8 * delta_time -- Мячик достиг земли - отскок от земли if ball.trans:z() <= 0 then velocity = - velocity end end -- Вызывать функцию обновления позиции каждые delta_time секунд timer:subscribe(update_velocity_and_position, delta_time)
Доступны следующие действия:
сбросить в нулевое положение
поместить на метку автоматически (совместить центр с родительской меткой)
-
параметр
Вращение;
rotate
¶ Вводится в Система координат (TransformNodeReactor)
Параметр позволяет задать точный поворот объекта по осям (
x
,y
,z
) относительно родительского объекта.В данном параметре используются углы Крылова (или углы Эйлера), где порядок поворота осей определяется в порядке:
z
,x
,y
. Все углы задаются в градусах.Параметр имеет тип
osg.Vec3
, где каждая компонента вектора соответствует своей оси.Для перевода в градусы и из градусов можно воспользоваться функциями
deg2rad(x)
иrad2deg(x)
. Данные функции могут быть использованы как для чисел, так и для векторовosg.Vec3
,osg.Vec2
.Для перевода в/из
osg.Quat
можно воспользоваться функциямиeuler2quat(ypr)
иquat2euler(quat)
. Важно отметить, что обе функции работают с векторами в радианах. Таким образом, для получения кватерниона из параметра Вращение (rotate), а также наоборот необходимо сделать по два вызова:local model = ... -- Получение кватерниона по параметру rotate local rotation_quat = euler2quat(deg2rad(model.rotate)) -- Присвоение кватерниона параметру rotate model.rotate = rad2deg(quat2euler(rotation_quat))
Пример вращения логотипа:
local logo = ... local function update_logo_rotation() -- Забираем текущий поворот local rot = logo.rotate -- Добавляем небольшое вращение вдоль одной из осей rot:y((rot:y() + 1) % 360) -- Присваиваем новое значение объекту logo.rotate = rot end -- Подписываемся на таймер, чтобы обновление происходило каждые 0.01 секунд timer:subscribe(update_logo_rotation, 0.01)
Пример поворота объекта в сторону метки:
local model = ... local marker = ... -- Функция построения кватерниона для поворота от from к to local function _make_directed_rotation(from, to) -- Вращать будем относительно оси, ортогональной обоим векторам, -- для его получения воспользуемся векторным произведением local axis = osg.Vec3.cross(from, to) -- Для получения угла вращения воспользуемся скалярным произведением: -- v1 * v2 = |v1| |v2| cos(angle(v1, v2)) => angle = acos(v1 * v2 / (|v1| |v2|)) local angle_cos = osg.Vec3.dot(from, to) / (from:length() * to:length()) local angle = math.acos(angle_cos) -- Возвращаем кватернион вращения с найденной осью и углом return osg.Quat(angle, axis) end local function update_rotation() -- Направление от модели к метке local delta_trans = marker.trans - model.trans -- Получим вращение модели в виде кватерниона local rotation = _make_directed_rotation(osg.Vec3(1, 0, 0), delta_trans) -- Присваиваем вращение. Заметим, что необходимо перевести кватернион -- сначала в углы Крылова, а затем перевести их значения из радианов в градусы model.rotate = deg2rad(quat2euler(rotation)) end -- Будем обновлять вращение каждые 10 миллисекунд timer:subscribe(update_rotation, 0.01)
Доступны следующие действия:
сбросить в начальное состояние
-
параметр
Масштаб;
scale
¶ Вводится в Система координат (TransformNodeReactor)
Параметр позволяет задать точный масштаб по координатам (
x
,y
,z
) относительно родительского объекта.Доступны следующие действия:
сбросить в начальное состояние
поместить на метку автоматически (совместить габариты объекта и родительской метки)
зафиксировать оси (масштабировать отдельно по каждой оси, или по всем одновременно)
-
действие
Объект - переместить;
setTrans
(trans)¶ Установить новое значение перемещения объекта (параметра Перемещение (trans))
Данное действие равносильно присваиванию параметра Перемещение (trans)
transform:setTrans(osg.Vec3(0.0, 0.0, 0.0)) transform.trans = osg.Vec3(0.0, 0.0, 0.0)
Параметры: Перемещение / trans – Новое значение перемещения
-
действие
Объект - повернуть;
setRotate
(rotate)¶ Установить новое значение вращения объекта (параметра Вращение (rotate)).
Данное действие равносильно присваиванию параметра Вращение (rotate)
transform:setRotate(osg.Vec3(0.0, 0.0, 0.0)) transform.rotate = osg.Vec3(0.0, 0.0, 0.0)
Параметры: Вращение / rotate – Новое значение вращения
-
действие
Объект - масштабировать;
setScale
(scale)¶ Установить новое значение масштабирования объекта (параметра Масштаб (scale)).
Данное действие равносильно присваиванию параметра Масштаб (scale)
transform:setScale(osg.Vec3(1.0, 1.0, 1.0)) transform.scale = osg.Vec3(1.0, 1.0, 1.0)
Параметры: Масштаб / scale – Новое значение вращения
-
действие
Объект - преобразовать;
setTransform
(trans, rotate, scale)¶ Установить новые значения перемещения, вращения и масштаба (параметров Перемещение (trans), Вращение (rotate), Масштаб (scale). Данный вызов равносилен последовательным вызовам Объект - переместить (setTrans), Объект - повернуть (setRotate), Объект - масштабировать (setScale):
Следующие две конструкции полностью равносильны:
model:setTransform(osg.Vec3(0.0, 0.0, 0.0), osg.Vec3(0.0, 0.0, 0.0), osg.Vec3(1.0, 1.0, 1.0))
model:setTrans(osg.Vec3(0.0, 0.0, 0.0)) model:setRotate(osg.Vec3(0.0, 0.0, 0.0)) model:setScale(osg.Vec3(1.0, 1.0, 1.0))
Равносильная конструкция
Advanced¶
Вспомогательные методы | Описание |
---|---|
getMatrix() |
Получить матрицу трансформации объекта. |
setMatrix(matrix, skipDecomposition) |
Задать матрицу трансформации объекта Параметры:
|