3d форум по Blender

Другое => Игровые 3d-движки (любые) => Игроделам - Blender Game Engine => Тема начата: Samovar от 10 Августа 2016, 22:22:54

Название: Blender Game Еngine (BGE) вопросы и ответы
Отправлено: Samovar от 10 Августа 2016, 22:22:54
Ещё раз спасибо админу 3dRend за отдельную ветку по BGE!
Настоятельная просьба ко всем: писать вопросы и ответы по BGE этой теме, а не в основной "Теме для быстрых вопросов от новичков". Так мы общими усилиями хоть как-то упорядочим и облегчим поиск полезной информации на нашем любимом форуме.
Название: Re: Blender Game Еngine (BGE) вопросы и ответы
Отправлено: Samovar от 04 Ноября 2017, 14:44:18

Цитировать
Цитировать
Цитата: Barabashka от 01 Ноября 2017, 15:18:07
Всем привет. Кто-то может пояснить что происходит взглянув на картинку?

Непонятно почему окно в окне имея одни и те же координаты отображается в виде через камеру в разных местах в зависимости от масштабирования окна вида из камеры?



Фигнёй не страдай, пиши лучше этот вопрос в своей теме, и заодно, приложи файл...  [url]http://blender-3d.ru/forum/index.php/topic,1716.msg25165.html#msg25165[/url]
...и я тебе уже там давно ответил:

Нет Самовар, тут другое. Использование "монитора" я понял. В данном случае опробовал другой подход в использовании окна в окне.
Взгляните на картинку. В основном окне изображение куба. В этом окне есть ещё одно окно с изображением цилиндра. Специально фоны в окнах сделал различными для большей наглядности.
В левом рисунке вид из камеры масштабировал в меньшую сторону и запустил игровой движок. Затем масштабировал тот же вид из камеры в большую сторону, и, опять запустил движок (правый рисунок).
Вопрос в следующем: почему окно в окне (окно с зелёным фоном) имеет разное местоположение? Я сделал его перемещение с помощью клавиш со стрелками, но это дело десятое. Мне непонятна причина разного местоположения окна, ведь я не изменил положение ни одного объекта, ни одного значения свойства.


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 (http://blender-3d.ru/forum/go.php?url=aHR0cDovL2JnZXB5dGhvbi50dXRvcmlhbHNmb3JibGVuZGVyM2QuY29tL0NhbWVyYS9zZXRWaWV3cG9ydA==)
Название: Re: Blender Game Еngine (BGE) вопросы и ответы
Отправлено: Barabashka от 18 Ноября 2017, 18:27:05
Samovar, попытался довести до конца затею со слежением. Взгляните, если есть время.
Я не понимаю откуда появляется прогрессия в изменении угла куба.
Непонятно так же как получить движение куба в сторону к (от) конуса в случае поворота куба вокруг оси "Z". Пытался использовать localOrientation и worldOrientation, но что-то не получилось.
Принты в блендер-файле оставил специально.
Название: Re: Blender Game Еngine (BGE) вопросы и ответы
Отправлено: Samovar от 19 Ноября 2017, 07:44:11
Цитировать
Я не понимаю откуда появляется прогрессия в изменении угла куба.

Наверно, зря я давал вам ссылку на программу-переводчик с английского на русский. Приходится переводить для вас...

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)
Название: Re: Blender Game Еngine (BGE) вопросы и ответы
Отправлено: Samovar от 19 Ноября 2017, 07:52:28
Цитировать
Непонятно так же как получить движение куба в сторону к (от) конуса в случае поворота куба вокруг оси "Z".

Попробуйте этот метод...  в мировых (глобальных) координатах (local=False) или в локальных (local=True)
applyMovement(move, local)
http://bgepython.tutorialsforblender3d.com/GameObject/applyMovement (http://blender-3d.ru/forum/go.php?url=aHR0cDovL2JnZXB5dGhvbi50dXRvcmlhbHNmb3JibGVuZGVyM2QuY29tL0dhbWVPYmplY3QvYXBwbHlNb3ZlbWVudA==)

Благодарю, что пишите свои вопросы в эту тему.
Название: Re: Blender Game Еngine (BGE) вопросы и ответы
Отправлено: Barabashka от 19 Ноября 2017, 17:27:49
Цитировать
Я не понимаю откуда появляется прогрессия в изменении угла куба.
Наверно, зря я давал вам ссылку на программу-переводчик с английского на русский. Приходится переводить для вас...
Не тот вы мне переводчик предложили, таких у меня четыре штуки. Мне бы ещё переводчик с их русского на русский где-то добыть.
Нет действительно, прочитать-то прочитал, только вот вопрос, что понял?
applyRotation(rot, local) - Rotate the game object a set amount (works like Motion Actuator Rot).
Googl Translate – Поверните игровой объект на определенное количество
PROMT – Смените друг друга игра возражают количеству набора
Yandex Translate – Вращать объект заданного значения
X-Translator PLATINUM - Вращайтесь игра возражает количеству набора
Samovar, в строке:
rotCube = [0,0,math.radians(deltaUgolCube)]          # получить значение угла вращения Cube в радианах
происходит установка постоянного значения наращивания в радианах что я и пишу в комментарии.
В строке
rotCube = [0,0,math.radians(deltaUgolCube*-1)]          # получить значение угла вращения Cube в радианах
Опять же, происходит установка постоянного значения наращивания в отрицательном значении – пишу  в комментарии.
Получается что в строке cube.applyRotation(rotCube, False) переменная rotCube явно не переменная, а выполняет каким-то образом сразу несколько функций: хранит значение наращивания и одновременно умудряется хранить наращиваемое значение после наращивания. В страшном сне такое не приснится.
Ваше скромное «Поворачивает (приращение)…» поясняет, т.е. переводит с русского на русский, и я думаю, что я понял происходящее.
В принципе пример можно считать рассмотренным благодаря вашему терпению. Однако одна заковыка осталась. После вращения куба, он не хочет перемещаться по своим новым локальным осям, а перемещается по глобальным, несмотря на то, что я использую строки:
pl = cube.localPosition                         # получить локальное положение Cube 
……………………………………..
elif senforw.positive == True:              # если нажата клавиша Стрелка вверх
    pl[1] +=1
    cube.localPosition[1] = pl[1]
Samovar, это прелюдия. Какое-то время назад, пытаясь разобраться с векторами (отмечу, безуспешно) наткнулся на идею крутить не объект, а координатную сетку как-то через вектора (как, я так и не понял). Если вам знаком этот метод, то может на моём примере куба и конуса, сможете показать, как это будет выглядеть.
Буду очень признателен.
Бленд-файл с последними изменениями прицепил.
Название: Re: Blender Game Еngine (BGE) вопросы и ответы
Отправлено: Barabashka от 19 Ноября 2017, 17:36:51
Цитировать
Непонятно так же как получить движение куба в сторону к (от) конуса в случае поворота куба вокруг оси "Z".

Попробуйте этот метод...  в мировых (глобальных) координатах (local=False) или в локальных (local=True)
applyMovement(move, local)
[url]http://bgepython.tutorialsforblender3d.com/GameObject/applyMovement[/url] ([url]http://blender-3d.ru/forum/go.php?url=aHR0cDovL2JnZXB5dGhvbi50dXRvcmlhbHNmb3JibGVuZGVyM2QuY29tL0dhbWVPYmplY3QvYXBwbHlNb3ZlbWVudA==[/url])

Благодарю, что пишите свои вопросы в эту тему.

Вот бы ещё сообразить как move обозначить, как в ней три параметра расстояний обозначить. Каких расстояний, от чего.
Извините Samovar, прошлый раз пример не заметил. Вопрос снимаю.
Название: Re: Blender Game Еngine (BGE) вопросы и ответы
Отправлено: Barabashka от 19 Ноября 2017, 18:48:23
Samovar, получилось. Спасибо за подсказки. Пример решён, однако пример вращения координат очень надеюсь увидеть, если, конечно, вы в курсе способа.