Другое > Игроделам - Blender Game Engine

Blender Game Еngine (BGE) вопросы и ответы

(1/13) > >>

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

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

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии