Автор Тема: Blender Game Еngine (BGE) вопросы и ответы  (Прочитано 16102 раз)

Оффлайн Samovar

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

Оффлайн Samovar

  • Житель
Re: Blender Game Еngine (BGE) вопросы и ответы
« Ответ #1 : 04 Ноябрь 2017, 14:44:18 »

Цитировать
Цитировать
Цитата: 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

  • Житель
Re: Blender Game Еngine (BGE) вопросы и ответы
« Ответ #2 : 18 Ноябрь 2017, 18:27:05 »
Samovar, попытался довести до конца затею со слежением. Взгляните, если есть время.
Я не понимаю откуда появляется прогрессия в изменении угла куба.
Непонятно так же как получить движение куба в сторону к (от) конуса в случае поворота куба вокруг оси "Z". Пытался использовать localOrientation и worldOrientation, но что-то не получилось.
Принты в блендер-файле оставил специально.

Оффлайн Samovar

  • Житель
Re: Blender Game Еngine (BGE) вопросы и ответы
« Ответ #3 : 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)

Оффлайн Samovar

  • Житель
Re: Blender Game Еngine (BGE) вопросы и ответы
« Ответ #4 : 19 Ноябрь 2017, 07:52:28 »
Цитировать
Непонятно так же как получить движение куба в сторону к (от) конуса в случае поворота куба вокруг оси "Z".
Попробуйте этот метод...  в мировых (глобальных) координатах (local=False) или в локальных (local=True)
applyMovement(move, local)
http://bgepython.tutorialsforblender3d.com/GameObject/applyMovement

Благодарю, что пишите свои вопросы в эту тему.
« Последнее редактирование: 19 Ноябрь 2017, 08:08:41 от Samovar »

Оффлайн Barabashka

  • Житель
Re: Blender Game Еngine (BGE) вопросы и ответы
« Ответ #5 : 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, это прелюдия. Какое-то время назад, пытаясь разобраться с векторами (отмечу, безуспешно) наткнулся на идею крутить не объект, а координатную сетку как-то через вектора (как, я так и не понял). Если вам знаком этот метод, то может на моём примере куба и конуса, сможете показать, как это будет выглядеть.
Буду очень признателен.
Бленд-файл с последними изменениями прицепил.

Оффлайн Barabashka

  • Житель
Re: Blender Game Еngine (BGE) вопросы и ответы
« Ответ #6 : 19 Ноябрь 2017, 17:36:51 »
Цитировать
Непонятно так же как получить движение куба в сторону к (от) конуса в случае поворота куба вокруг оси "Z".
Попробуйте этот метод...  в мировых (глобальных) координатах (local=False) или в локальных (local=True)
applyMovement(move, local)
http://bgepython.tutorialsforblender3d.com/GameObject/applyMovement

Благодарю, что пишите свои вопросы в эту тему.
Вот бы ещё сообразить как move обозначить, как в ней три параметра расстояний обозначить. Каких расстояний, от чего.
Извините Samovar, прошлый раз пример не заметил. Вопрос снимаю.
« Последнее редактирование: 19 Ноябрь 2017, 18:24:38 от Barabashka »

Оффлайн Barabashka

  • Житель
Re: Blender Game Еngine (BGE) вопросы и ответы
« Ответ #7 : 19 Ноябрь 2017, 18:48:23 »
Samovar, получилось. Спасибо за подсказки. Пример решён, однако пример вращения координат очень надеюсь увидеть, если, конечно, вы в курсе способа.

Оффлайн Samovar

  • Житель
Re: Blender Game Еngine (BGE) вопросы и ответы
« Ответ #8 : 20 Ноябрь 2017, 09:12:38 »
Цитировать
Пример решён, однако пример вращения координат очень надеюсь увидеть, если, конечно, вы в курсе способа.
Нет  у меня готового решения вашей задачи. И мне достаточно трудно отвечать на ваши вопросы, т.к. я не особо шарю в Python, и тем более в API BGE к нему. Я также мучаюсь со словарями как и вы, но перевожу по смыслу, исходя из своего опыта и нескольких  разных сервисов перевода. Если честно, мне ваше занятие видится так: https://youtu.be/AH6fEnmwZHw
Поясню чуть позже, почему оно мне так видится...

Оффлайн Barabashka

  • Житель
Re: Blender Game Еngine (BGE) вопросы и ответы
« Ответ #9 : 20 Ноябрь 2017, 10:40:25 »
Цитировать
Пример решён, однако пример вращения координат очень надеюсь увидеть, если, конечно, вы в курсе способа.
Нет  у меня готового решения вашей задачи. И мне достаточно трудно отвечать на ваши вопросы, т.к. я не особо шарю в Python, и тем более в API BGE к нему. Я также мучаюсь со словарями как и вы, но перевожу по смыслу, исходя из своего опыта и нескольких  разных сервисов перевода. Если честно, мне ваше занятие видится так: https://youtu.be/AH6fEnmwZHw
Поясню чуть позже, почему оно мне так видится...
Специфика возможностей ума. А ведь действительно зачастую иду в обход.

Оффлайн Samovar

  • Житель
Re: Blender Game Еngine (BGE) вопросы и ответы
« Ответ #10 : 20 Ноябрь 2017, 13:24:48 »
Цитировать
А ведь действительно зачастую иду в обход.
Попробуйте сделать это в BGE без использования Python, тогда меня поймёте https://youtu.be/AH6fEnmwZHw

Оффлайн Barabashka

  • Житель
Re: Blender Game Еngine (BGE) вопросы и ответы
« Ответ #11 : 20 Ноябрь 2017, 17:01:10 »
Цитировать
А ведь действительно зачастую иду в обход.
Попробуйте сделать это в BGE без использования Python, тогда меня поймёте https://youtu.be/AH6fEnmwZHw
Согласен что можно и без Python получить требуемый результат, за счёт возможностей самого Blender, но это будет без Python'а, а хочется хоть шапочно с ним ознакомиться.
Ладно Samovar, спасибо за оказанную помощь и хочу надеется что при появлении затруднений моё обращение в эту тему будет встречено благожелательно.
Всего вам хорошего.

Оффлайн Samovar

  • Житель
Re: Blender Game Еngine (BGE) вопросы и ответы
« Ответ #12 : 20 Ноябрь 2017, 17:07:43 »
Это похвально на счёт Python, но, если бесцельно с ним знакомиться , толку будет мало :)  как и с любым иным языком программирования...
Мне ваша цель непонятна...очень жаль, что вы на некоторое время решили покинуть этот форум, если я правильно ваш посыл понял... возвращайтесь  к нам непременно... лично я, буду рад снова с вами пообщаться.
« Последнее редактирование: 20 Ноябрь 2017, 17:27:00 от Samovar »

Оффлайн Barabashka

  • Житель
Re: Blender Game Еngine (BGE) вопросы и ответы
« Ответ #13 : 20 Ноябрь 2017, 19:01:29 »
Это похвально на счёт Python, но, если бесцельно с ним знакомиться , толку будет мало :)  как и с любым иным языком программирования...
Мне ваша цель непонятна...очень жаль, что вы на некоторое время решили покинуть этот форум, если я правильно ваш посыл понял... возвращайтесь  к нам непременно... лично я, буду рад снова с вами пообщаться.
Года два или более, назад наткнулся на Blender. Взыграло любопытство, что это такое. Начал с 3D графики и был поражён результатами. Сделал несколько объектов, начав с очень простых (стакан, кружка), а закончил своим 3D бюстом. Исчерпав идеи, заинтересовался физическими возможностями Blender. От простого к сложному – сделал водопад в пещере. Тут с идеями вообще напряг был большой, потому переключился на создание, точнее на монтаж отснятых роликов и переключился на анимацию. Затем, как-то заинтересовал BGE. Компьютерные игры, за исключением шахмат вообще не признаю, а тут появилась идея создать какой-нибудь технологический процесс, ну, например, работа двигателя внутреннего сгорания с возможностью изменения каких-то его параметров. Ведь интересно же. А вот тут без Python, без скриптов просто не обойтись. От идеи создания двигателя пока пришлось отказаться. Но Python освоить без его применения просто не реально, вот я и придумываю для себя задачи с примитивами, выполняющими разные задачи по управлению, или пытаюсь творчески подойти к выполнению какого-то урока подхваченного из интернета. Может быть, когда-нибудь эти знания пригодятся и на работе, например для демонстрации чего-либо.
Когда занятость на работе снижается, то соответственно появляется время для Blender. Ну и наоборот. Большие перерывы служат негативной причиной в освоении Blender. Метание по разным возможностям тоже не идёт на пользу – ведь, по сути, это верхоглядство. Тут две перспективы, или какая-то возможность Blender покорит, и начну совершенствоваться в ней, или увлекусь чем-то ещё.


Оффлайн Samovar

  • Житель
Re: Blender Game Еngine (BGE) вопросы и ответы
« Ответ #14 : 21 Ноябрь 2017, 06:45:19 »
Цитировать
Компьютерные игры, за исключением шахмат вообще не признаю
это глупо, не признавать очевидного....на данный момент компьютерные игры являются вершиной аудио-визуального искусства, коими до них были театр, радио и кино...
Цитировать
Метание по разным возможностям тоже не идёт на пользу – ведь, по сути, это верхоглядство. Тут две перспективы, или какая-то возможность Blender покорит, и начну совершенствоваться в ней, или увлекусь чем-то ещё.
...это дело ваше, чем увлечься. А про "верхоглядство"-  это, скорее всего, вы сами себя подкололи, т.к. основа у всего программирования - банальная математика, которой учат в средней школе, ну и высшая математика, которой учат в ВУЗ (матрицы, вектора и прочее...) Кстати, первым в мире программистом была женщина - математик, англичанка  Ада Лавлэйс.
И основной принцип программирования - это KISS принцип (KISS (акроним для «Keep it short and simple»)), но вы явно ему не следуете, потому я и прикладываю вам видео про "нормальные герои всегда идут в обход"...
« Последнее редактирование: 21 Ноябрь 2017, 07:11:04 от Samovar »

 


Яметрика

* По форуму

* Рекламный блок

* Последние вложения

1 (1).png
Скачано: 68
Автор: LEXA ANЭGROWND
blender.png
Скачано: 78
Автор: ipv2007
4.png
Скачано: 100
Автор: hiroyukiss
2.png
Скачано: 122
Автор: hiroyukiss

Скачано: 112
Автор: Dilifa12