EN | RU
< Назад | Начало | Далее > |
---|---|---|
02. Мышь | Самоучители | 04. Выбор узла |
В этом самоучителе мы отобразим сферы.
Ориентировочное время выполнения: 10 минут.
Давайте отобразим одну сферу:
local nodes = main.application.nodes
local sphere = nodes:createSphere("sphere", 1)
local root = nodes:node("root")
root:addChild(sphere)
Взглянем на новый использованный нами API:
main.application.nodes
(экземпляр) содержит узлы сцены (необязательно видимые) классаscene.Node
main.application.nodes:createSphere()
(метод)- принимает название сферы (узла) и её радиус
- возвращает новый экземпляр
scene.Node
, представляющий сферуlocal sphere = main.application.nodes:createSphere("sphere", 1)
main.application.nodes:node()
(метод)- принимает название искомого узла среди узлов сцены, содержащися экземпляром
main.application.nodes
- возвращает либо уже существующий экземпляр
scene.Node
, либоnil
в противном случаеlocal node = main.application.nodes:node("sphere") if (node) then print("Node exists") else print("Node does not exist") end
- принимает название искомого узла среди узлов сцены, содержащися экземпляром
scene
(пространство имён) содержит функциональность управления графом сценыscene.Node:addChild()
(метод)- принимает экземпляр
scene.Node
для присоединения его в качестве дочернего узлаlocal parent = main.application.nodes:node("parent") local child = main.application.nodes:node("child") parent:addChild(child)
- принимает экземпляр
Замечания:
- названия узлов сцены должны быть уникальны
- узел
root
создаётсяogs
и служит корнем для видимых узлов сцены - лишь те узлы видимы, которые в начале своей иерархии графа сцены имеют
root
Давайте отобразим другую сферу справа от текущей.
Добавьте следующий код:
local sphereRight = nodes:createSphere("another", 1)
root:addChild(sphereRight)
sphereRight.position = {2, 0, 0}
Взглянем на новый использованный нами API:
scene.Node.position
(свойство)- принимает массив компонент позиции в формате XYZ
node.position = {2, 0, 0}
- возвращает массив компонент позиции в формате XYZ
local pos = node.position print("Node position:", pos[1], pos[2], pos[3])
- принимает массив компонент позиции в формате XYZ
Возможно, вы уже заметили пару странных вещей:
sphereRight
находится слева- видна лишь часть сферы
Эти проблемы возникли из-за того, что камера сама выбрала себе позицию. Давайте посмотрим, каковы текущие позиция и вращение камеры.
Добавьте следующий код:
local camera = main.application.camera
local pos = camera.position
print("Camera position:", pos[1], pos[2], pos[3])
local rot = camera.rotation
print("Camera rotation:", rot[1], rot[2], rot[3])
Взглянем на новый использованный нами API:
main.application.camera.position
(свойство)- принимает массив компонент позиции в формате XYZ
main.application.camera.position = {0, -30, 0}
- возвращает массив компонент позиции в формате XYZ
local pos = main.application.camera.position print("Camera position:", pos[1], pos[2], pos[3])
- принимает массив компонент позиции в формате XYZ
main.application.camera.rotation
(свойство)- принимает массив компонент вращения в градусах XYZ
main.application.camera.rotation = {90, 0, 0}
- возвращает массив компонент вращения в градусах XYZ
local rot = main.application.camera.rotation print("Camera rotation:", rot[1], rot[2], rot[3])
- принимает массив компонент вращения в градусах XYZ
Консоль отладки должна содержать теперь что-то вроде:
Camera position: 0.000000 3.974028 0.000000
Camera rotation: 90.000000 0.000000 180.000000
Довольно интересная ориентация камеры, не так ли?
Возможно, вы решили, что установка вращения камеры в 0, 0, 0
поместит
sphereRight
справа. Тем не менее, одного вращения не хватит, чтобы улучшить
вид сцены. На самом деле, нам нужна следующая ориентация камеры:
- позиция:
0, -30, 0
- вращение:
90, 0, 0
Честно говоря, мы пришли к этим значениям благодаря экспериментам, у нас нет логического объяснения этих значений. Извиняйте.
Давайте теперь отобразим обе сферы таким образом, чтобы они были отчётливо видны. Вот полный код:
local nodes = main.application.nodes
local sphere = nodes:createSphere("sphere", 1)
local root = nodes:node("root")
root:addChild(sphere)
local sphereRight = nodes:createSphere("another", 1)
root:addChild(sphereRight)
sphereRight.position = {2, 0, 0}
local camera = main.application.camera
camera.position = {0, -30, 0}
camera.rotation = {90, 0, 0}
Теперь sphereRight
находится справа от первоначальной сферы.
Вы успешно отобразили сферы, позиционировали одну из них, а затем улучшили угол обзора с помощью ориентации камеры.
< Назад | Начало | Далее > |
---|---|---|
02. Мышь | Самоучители | 04. Выбор узла |