Вопросы по созданию игр.

Board index Геймдев в Blender Игровой движок Blender

Description: Все вопросы и обсуждения, касающиеся BGE
Moderators: exooman, denis8424

  • 0

Post #1by exooman » 25.01.2014, 14:45

В этой теме помогаем друг-другу разбираться в игростроении на движке BGE.
Внимание, прежде чем задать вопрос, просмотрите темы:
Blender Game Engine FAQ
Blender Game Engine примеры
Полезные ресурсы по BGE


Пожалуйста, выкладывайте бленд-файлы, изображения и другие ресурсы на сторонних хостингах. Приветствуется упаковывание файлов в архив, желательно в формате .7z. По возможности старайтесь использовать изображения формата .jpeg.
exooman
Posts: 1932



Post #101by Line » 24.03.2014, 10:31

denis8424 wrote:В общем уточни, как бы ты хотел, чтобы оно выглядело
К пустышке привязан объект или их группа. Объект скрыт (перенесен на другой слой). При запуске BGE отображаются только пустышки, к которым привязаны объекты. Далее. А почему сплайны не могут отображаться в BGE? Там все построено на треугольниках, полигонах? А сплайны это уже нет. .... Разбираюсь, сколько всего надо знать.
Энтузиаст Blender 3D
Line M
Avatar
Posts: 743


Post #102by denis8424 » 24.03.2014, 11:27

Line wrote:К пустышке привязан объект или их группа. Объект скрыт (перенесен на другой слой). При запуске BGE отображаются только пустышки, к которым привязаны объекты.
Если привязки не будут меняться, то можно к пустышке прикрепить объект, который будет становиться видимым/невидимым, в зависимости от каких-то условий, которые тебе нужны. То есть парентишь к пустышке куб, и в настройках физики делаешь его видимым/невидимым. Хотя проще использовать объекты вместо пустышек изначально. А скриптом вообще замечательно.
Line wrote:Далее. А почему сплайны не могут отображаться в BGE? Там все построено на треугольниках, полигонах?
Потому что разработчик не написал такую функцию, тем более, что она не нужна.

P.S. Сейчас проверил кое-что. Ты уверен, что тебе нужно отображение пустышек, потомки которых на неактивном слое? Или достаточно того, что они невидимы?

Code: Select all
import bge
cont = bge.logic.getCurrentController()
scene = bge.logic.getCurrentScene()
key = cont.sensors['Keyboard']
if key.positive:
    for obj in scene.objects:
        if 'Empty' in obj.name and obj.children:
            pos = obj.worldPosition
           
            vec1X = [obj.worldPosition[0] - 1, obj.worldPosition[1], obj.worldPosition[2]]
            vec2X = [obj.worldPosition[0] + 1, obj.worldPosition[1], obj.worldPosition[2]]
            vec1Y = [obj.worldPosition[0], obj.worldPosition[1] -1, obj.worldPosition[2]]
            vec2Y = [obj.worldPosition[0], obj.worldPosition[1] +1, obj.worldPosition[2]]
            vec1Z = [obj.worldPosition[0], obj.worldPosition[1], obj.worldPosition[2]-1]
            vec2Z = [obj.worldPosition[0], obj.worldPosition[1], obj.worldPosition[2]+1]
            color = [256, 0, 0]
            bge.render.drawLine(vec1X, vec2X, color)
            bge.render.drawLine(vec1Y, vec2Y, color)
            bge.render.drawLine(vec1Z, vec2Z, color)
denis8424
Avatar
Posts: 724

Post #103by rek_on » 31.03.2014, 13:59

ребят подскажите с реализацией
Есть объект, он вращается на произвольный угол. Если запросить ориентацию относительно глобальных или локальных координат, появляется матрица (3х3). Так вот собственно вопрос как из этих значений получить градусы?

и еще один вопрос как с помощью скрипта изменить значение пророперти присвоенного к другому объекту?
rek_on
Posts: 9

  • 1

Post #104by denis8424 » 31.03.2014, 14:59

rek_on wrote:Есть объект, он вращается на произвольный угол. Если запросить ориентацию относительно глобальных или локальных координат, появляется матрица (3х3). Так вот собственно вопрос как из этих значений получить градусы
Ориентация осей записывается в матрицы в виде столбцов, то есть вертикально. Можно выковырять вектор ориентации конкретной оси просто по индексам, или с помощью функции own.getAxisVect(), подробнее смотри в #bge.types.KX_GameObject.getAxisVect
Для того что бы получить угол между осями, например глобальной осью Х и осью ориентации объекта можно использовать функцию mathutils.Vector.angle
rek_on wrote:и еще один вопрос как с помощью скрипта изменить значение пророперти присвоенного к другому объекту?
Code: Select all
otherObject = bge.logic.getCurrentScene().objects['имя другого объекта']
otherObject['prop'] = чему-то там.
denis8424
Avatar
Posts: 724

  • 3

Post #105by Wegemu » 31.03.2014, 18:05

Есть объект, он вращается на произвольный угол. Если запросить ориентацию относительно глобальных или локальных координат, появляется матрица (3х3). Так вот собственно вопрос как из этих значений получить градусы?

Code: Select all
from bge import logic

rad = 180/3.14

obj = logic.getCurrentController().owner

euler = obj.worldOrientation.to_euler()
print(euler.z/rad) # угол по оси z в градусах

euler.x = 45*rad # градусы, переведенные в радианы
euler.z = 30*rad

obj.worldOrientation = euler.to_matrix()
When debugging, novices insert corrective code; experts remove defective code.
VEゲーム

Ушел в поисках приключений в страну GLSL.
Wegemu M
Avatar
Posts: 62

Post #106by andreymal » 31.03.2014, 18:08

Wegemu wrote:rad = 180/3.14
Как грубо =(

import math
rad = 180/math.pi
Wegemu wrote:obj.worldOrientation = euler.to_matrix()
to_matrix, кстати, необязательно, само переведётся.

А вообще я на каких-то геймдев-сайтах читал, что туда-сюда матрицы-градусы лучше конвертировать поменьше, а то операция типа ресурсозатратная. Но лично не проверял.

Added after 4 minutes 21 second:
denis8424 wrote:"какие ваши доказательства?(с)"
Не, моё 2011 годом датируется =-) http://www.youtube.com/watch?v=YauxQunYpko
Странно, что я на этот пример не обратил внимания.
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Avatar
Posts: 1195

Post #107by Wegemu » 31.03.2014, 18:22

andreymal wrote:Как грубо =(

import math
rad = 180/math.pi

Нафига "лишний" модуль подключать? Да и такая точность избыточна. =)

andreymal wrote:to_matrix, кстати, необязательно, само переведётся.

А вообще я на каких-то геймдев-сайтах читал, что туда-сюда матрицы-градусы лучше конвертировать поменьше, а то операция типа ресурсозатратная. Но лично не проверял.

Ага, переводится само. Раньше не работало (в предыдущих версиях).

Да, ты прав - ресурсозатратно. Но ведь это для "начала" не плохой способ ведь.
When debugging, novices insert corrective code; experts remove defective code.
VEゲーム

Ушел в поисках приключений в страну GLSL.
Wegemu M
Avatar
Posts: 62

  • 1

Post #108by andreymal » 31.03.2014, 18:25

Wegemu wrote:Нафига "лишний" модуль подключать?
А он всё равно уже где-нибудь внутри блендера подключен, ресурсы не тратит.

Wegemu wrote:Да и такая точность избыточна.
Нет, я хочу максимально доступную точность) К тому же это уже начинает иметь значение, если где-то считать обороты тысячами, например (не в данном случае, да).
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Avatar
Posts: 1195

Post #109by rek_on » 02.04.2014, 14:13

спасибо за помощь!!! :-D

Wegemu тоже раздумывал над такой же реализацией
только
Wegemu wrote:rad = 180/3.14
все же rad = 3.14/180

а вот еще вопрос
Wegemu wrote:euler = obj.worldOrientation.to_euler()
obj.worldOrientation = euler.to_matrix()

у вас глобальные величины оринтации, а можно ли как нибудь вращать объекты в локальной системе?
просто изменив с obj.worldOrientation = euler на obj.localOrientation = euler не работает, точнее работает но все равно беруться глобальные величины
rek_on
Posts: 9

Post #110by engine9 » 02.04.2014, 14:38

Подскажите, БГЕ ограничен в размерах локации? К примеру я хочу сделать поле 200х200 км, для авиасима. Потянет?
engine9 M
Avatar
Location: Архангельск
Posts: 695

  • 1

Post #111by andreymal » 02.04.2014, 17:27

Не знаю. В самом блендере ограничение 10k×10k×10k, в бге не проверял
Уменьши все размеры в 1000 раз и вперёд
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Avatar
Posts: 1195

Post #112by Wegemu » 02.04.2014, 17:40

rek_on wrote:у вас глобальные величины оринтации, а можно ли как нибудь вращать объекты в локальной системе?
просто изменив с obj.worldOrientation = euler на obj.localOrientation = euler не работает, точнее работает но все равно беруться глобальные величины
В чем проблема?
Code: Select all
euler = obj.localOrientation.to_euler()
obj.localOrientation = euler.to_matrix()
When debugging, novices insert corrective code; experts remove defective code.
VEゲーム

Ушел в поисках приключений в страну GLSL.
Wegemu M
Avatar
Posts: 62

Post #113by engine9 » 02.04.2014, 18:10

>Уменьши все размеры в 1000 раз и вперёд
А самые мелкие размеры какие? Точней точность самого блена.
engine9 M
Avatar
Location: Архангельск
Posts: 695

  • 1

Post #114by denis8424 » 02.04.2014, 18:26

engine9, обратись к Flogger-K за консультацией, он тоже авиасим делает. Но локации у него точно больше десяти километров.
denis8424
Avatar
Posts: 724

Post #115by rek_on » 03.04.2014, 08:21

Wegemu wrote:В чем проблема?

в этом случае, работает только снятие локальных координат, но вот поворот в локальной системе не осуществляется, то есть вращение происходит все равно относительно глобальных осей
consol_grad2.zip
rek_on
Posts: 9

Post #116by denis8424 » 03.04.2014, 20:24

rek_on, Все равно непонятно, в чем проблема. Не стесняйся писать подробные тексты.
Загляни сюда заодно http://www.blender.org/documentation/blender_python_api_2_69_release/mathutils.html, в самом начале есть пример кода, реализующего поворот через матрицу поворота.
denis8424
Avatar
Posts: 724

Post #117by Line » 07.04.2014, 13:25

Что это за командное окно управления анимацией (я так понял)? Файл с расширением .pd.
http://www.youtube.com/watch?v=t-5a5S0-8Hg
Энтузиаст Blender 3D
Line M
Avatar
Posts: 743


Post #118by iliya2013 » 12.04.2014, 12:33

как сделать с помощью нодов так чтобы плоскость с одной стороны давала одно свечение а с другой другое? и по цветам тоже разное.
Открывая душу будь всегда готов, что кто то в нее обязательно плюнет.
iliya2013 M
Avatar
Location: Магнитогорск
Posts: 448

  • 1

Post #119by maleficmax » 12.04.2014, 13:02

Продублировать плоскость и инвертировать нормали. Не знаю конкретно про БГЕ, но в юнити помогало )
Не стоит путать небо со звездами, отраженными ночью в поверхности пруда. А.Сапковский
Моя свалка | Уроки
maleficmax M
фашист і бандерівець
Avatar
Location: Україна, Кременчук
Posts: 4376


Post #120by iliya2013 » 12.04.2014, 14:48

maleficmax wrote:Продублировать плоскость и инвертировать нормали. Не знаю конкретно про БГЕ, но в юнити помогало )
а чтобы свечение было через ноды, как сделать? :)
Открывая душу будь всегда готов, что кто то в нее обязательно плюнет.
iliya2013 M
Avatar
Location: Магнитогорск
Posts: 448

PreviousNext

Return to Игровой движок Blender

Who is online (over the past 5 minutes)

Users browsing this forum: 1 guest