Другое > Игроделам - Blender Game Engine
Blender Game Еngine (BGE) вопросы и ответы
Samovar:
Ещё раз спасибо админу 3dRend за отдельную ветку по BGE!
Настоятельная просьба ко всем: писать вопросы и ответы по BGE этой теме, а не в основной "Теме для быстрых вопросов от новичков". Так мы общими усилиями хоть как-то упорядочим и облегчим поиск полезной информации на нашем любимом форуме.
Samovar:
--- Цитата: Barabashka от 02 Ноябрь 2017, 10:40:43 ---
--- Цитировать ---
--- Цитировать ---Цитата: Barabashka от 01 Ноября 2017, 15:18:07
Всем привет. Кто-то может пояснить что происходит взглянув на картинку?

Непонятно почему окно в окне имея одни и те же координаты отображается в виде через камеру в разных местах в зависимости от масштабирования окна вида из камеры?
--- Конец цитаты ---
Фигнёй не страдай, пиши лучше этот вопрос в своей теме, и заодно, приложи файл... http://blender-3d.ru/forum/index.php/topic,1716.msg25165.html#msg25165
...и я тебе уже там давно ответил:
--- Конец цитаты ---
Нет Самовар, тут другое. Использование "монитора" я понял. В данном случае опробовал другой подход в использовании окна в окне.
Взгляните на картинку. В основном окне изображение куба. В этом окне есть ещё одно окно с изображением цилиндра. Специально фоны в окнах сделал различными для большей наглядности.
В левом рисунке вид из камеры масштабировал в меньшую сторону и запустил игровой движок. Затем масштабировал тот же вид из камеры в большую сторону, и, опять запустил движок (правый рисунок).
Вопрос в следующем: почему окно в окне (окно с зелёным фоном) имеет разное местоположение? Я сделал его перемещение с помощью клавиш со стрелками, но это дело десятое. Мне непонятна причина разного местоположения окна, ведь я не изменил положение ни одного объекта, ни одного значения свойства.
--- Конец цитаты ---
--- Код ---
import bge # импортируем модуль BGE
from bge import logic as G # импортировать logic из модуля bge как G
from bge import render as R # импортировать render из модуля bge как R
scene = G.getCurrentScene() # получить текущую сцену
objList = scene.objects # получить список объектов сцены
cont = G.getCurrentController() # получить активный контроллер Python
own = cont.owner # получить выделенный объект Monitor
print("own = ",own)
cam = objList["Camera"] # получить камеру большого окна с названием Camera
scene.active_camera = cam # активировать как камеру большого окна Camera
obj = objList["CameraObzora"] # получить CameraObzora из списка объектов сцены
W = R.getWindowWidth() // 100 # получить Ширину окна
H = R.getWindowHeight() // 100 # получить Высоту окна
obj.useViewport = True # получить изображение
obj.setViewport(own["Left"] * W, own["Bottom"] * H, own["Right"] * W, own["Top"] * H) # установить параметры вывода окна
--- Конец кода ---
--- Цитировать ---W = R.getWindowWidth() // 100 # получить Ширину окна
H = R.getWindowHeight() // 100 # получить Высоту окна
--- Конец цитаты ---
Что это "//" ?
Справка:
setViewport( лево, низ, право, верх)
setViewport позволяет одновременно отображать более одного вида из камеры в основном окне.
лево:
Позиция левой границы отображения вида в основном окне
Тип: целое
низ:
Позиция нижней границы отображения вида в основном окне
Тип: целое
право:
Позиция правой границы отображения вида в основном окне
Тип: целое
верх:
Позиция верхней границы отображения вида в основном окне
Тип: целое
Примечание:
Нижний левый угол основного окна это координаты (0,0)
Верхний правый угол основного окна это координаты (ширина основного окна, высота основного окна)
http://bgepython.tutorialsforblender3d.com/Camera/setViewport
Barabashka:
Samovar, попытался довести до конца затею со слежением. Взгляните, если есть время.
Я не понимаю откуда появляется прогрессия в изменении угла куба.
Непонятно так же как получить движение куба в сторону к (от) конуса в случае поворота куба вокруг оси "Z". Пытался использовать localOrientation и worldOrientation, но что-то не получилось.
Принты в блендер-файле оставил специально.
Samovar:
--- Цитировать ---Я не понимаю откуда появляется прогрессия в изменении угла куба.
--- Конец цитаты ---
Наверно, зря я давал вам ссылку на программу-переводчик с английского на русский. Приходится переводить для вас...
http://bgepython.tutorialsforblender3d.com/GameObject/applyRotation
Справка:
applyRotation(rot, local)
Поворачивает (приращение) игровой объект на заданную величину (приращение работает как в актуаторе Motion -> Rot).
rot:
Величина поворота игрового объекта.
Тип: список [ rx, ry, rz]
rx: величина поворота в радианах вдоль оси x
ry: величина поворота в радианах вдоль оси y
rz: величина поворота в радианах вдоль оси z
local:
оси координат (глобальные или локальные) используемые для поворота игрового объекта.
Тип: булев (логический)
0 = False = глобальные оси координат (или мировые)
1 = True = локальные оси координат
Примечание:
Типы объектов: Dynamic, Rigid body, Static, Character, Sensor, Occlude и No Collision.
Радианы: показатель угла. 1 радиан это 57.296 градусов. 1.570796327 радиан = 90 градусов
Попробуйте так свой код изменить:
--- Код ---
if senleft.positive == True: # если нажата клавиша Стрелка влево
#grad = grad + deltaUgolCube # нарастить значение угла вращения Cube
rotCube = [0,0,math.radians(deltaUgolCube)] # получить значение угла вращения Cube в радианах
cube.applyRotation(rotCube, False) # уточнить положение куба в мире по оси Z
print("+grad = ",grad, " +deltaUgolCube = ",deltaUgolCube)
elif senright.positive == True: # если нажата клавиша Стрелка влево
#grad = grad - deltaUgolCube # нарастить значение угла вращения Cube
rotCube = [0,0,math.radians(deltaUgolCube*-1)] # получить значение угла вращения Cube в радианах
cube.applyRotation(rotCube, False) # уточнить положение куба в мире по оси Z
print("-grad = ",grad, " -deltaUgolCube = ",deltaUgolCube)
--- Конец кода ---
Samovar:
--- Цитировать ---Непонятно так же как получить движение куба в сторону к (от) конуса в случае поворота куба вокруг оси "Z".
--- Конец цитаты ---
Попробуйте этот метод... в мировых (глобальных) координатах (local=False) или в локальных (local=True)
applyMovement(move, local)
http://bgepython.tutorialsforblender3d.com/GameObject/applyMovement
Благодарю, что пишите свои вопросы в эту тему.
Навигация
Перейти к полной версии