Blender 2.6x

Демонстрация с помощью Blender Game Engine относительности скорости

Цель: показать, что наблюдаемая скорость объекта зависит от скорости и направления движения системы отсчета (места, откуда ведется наблюдение).

Описание модели "Относительность скорости"

Куб - движущийся объект (прямолинейно с постоянной скоростью), камера - система отсчета. Камера может либо не двигаться, либо двигаться в том же направлении, что и объект, но с меньшей скоростью.

Движение длится определенное время (t = const). Следовательно, длина пройденного пути зависит только от скорости объекта.

При неподвижной камере за то же время объект пройдет большее расстояние, чем в случае, когда камера движется по направлению его движения (но медленнее).

Пройденное расстояние измеряется с помощью линейки, прикрепленной к камере.

Создание модели в Blender

Используется движок Blender Game Engine.

Для куба устанавливаются свойство (Timer) и два сенсора (Always и Property-timer). Сенсоры запускают движение и останавливают его (по истечении 2.5 сек). Скорость куба равна 0.05 (Loc).

То же самое делается для камеры, за исключением скорости (здесь она 0.02) и сенсора Always (заменяется на Keyboard).

Если запустить игру (P) и не двигать камеру, то куб пройдет большее расстояние. Например, остановится на отметке 9. Если камеру двигать, то меньшее (остановится на 6-ти).

Прикрепленный файлРазмер
rel_move.blend2.11 Мб

Исследование равноускоренного прямолинейного движения с помощью Blender Game Engine

Физический смысл модели

Если на объект, находящийся в состоянии покоя, массой 1 кг начать действовать силой, равной 1 Н, то он начнет двигаться с ускорением 1 м/с2. (a = F/m)

При этом его скорость после каждой секунды движения будет увеличиваться на единицу: в конце 1-ой секунды - 1 м/с, 2-й - 2 м/с, 3-й - 3 м/с.

Однако средняя скорость (Vср) за каждую секунду будет равна сумме скоростей в начале секунды и ее конце, поделенной на 2. (Vср = (V1 + V0) / 2).

Путь, пройденный объектом за каждую конкретную секунду (S = Vср * t):
S1 = ((0м/с+1м/с)/2) * 1c = 0.5м
S2 = ((1м/с+2м/с)/2) * 1c = 1.5м
S3 = ((2м/с+3м/с)/2) * 1c = 2.5м
S4 = ((3м/с+4м/с)/2) * 1c = 3.5м
S5 = ((4м/с+5м/с)/2) * 1c = 4.5м
S6 = ((5м/с+6м/с)/2) * 1c = 5.5м
S7 = ((6м/с+7м/с)/2) * 1c = 6.5м

Суммарный путь пройденный телом за 7 секунд: S = 24.5м.

Если требуется просто найти пройденный путь за определенное время, то вычисления производятся в одно действие: S = ((7м/с - 0м/с) / 2) * 7c = 3.5м/с * 7с = 24.5м

24.5 : 0.5 = 49 : 1 = 72 : 1
2 : 0.5 = 4 : 1 = 22 : 1
Т.е. общий путь, пройденный за N секунд, относится к пути, пройденному за 1-ю секунду, как квадрат N-ой секунды.

Также пройденный путь можно определить через ускорение. Т.к. V = at, то S = (at/2) * t = (at2)/2. Например, S = 1*72/2 = 24.5.

Описание модели и ее создание в Blender

На покоящийся шарик массой 1 кг начинает постоянно действовать сила в 1 Н. Трение отсутствует. За 7 секунд шарик преодолевает расстояние в 24.5 метра, при этом его скорость постоянно увеличивается. На линии отмечается путь, пройденный объектом за каждую секунду.

Наглядность модели: наблюдение ускорения, увеличивающегося пройденного пути за каждую последующую секунду.

В Blender Game Engine сила в 1 усл. единицу действительно равна 1 ньютону. В этом можно убедиться, если убрать трение в насторойках материала (для объекта и поверхности), и опцию Damping (Translation) в панели Physics (должен быть включен режим Blender Game).

Появление разноцветных плоскостей управляется с помощью свойства timer и активатора Visibility.

Прикрепленный файлРазмер
accel.blend1.07 Мб

Как задать для объекта определенную скорость движения (Blender Game Engine)

Цель: задать для объекта определенную скорость перемещения.

В активаторе Motion параметр Loc измеряется в неизвестно каких единицах. Это и не существенно, если важно различие в скоростях. Например, если один объект должен двигаться медленно, а другой - в два раза быстрее, то можно для одного установить значение 0.02, а для другого - 0.04.

Однако может потребоваться знать скорость объекта или расстояние, которое он проходит за определенное время. Поэтому необходимо каким-либо образом вычислить, какой скорости соответствует 1 "блендоровский" Loc.

Если известно расстояние и время, то можно определить скорость: V = s/t. Далее вывести соответствие между скоростью в Loc и реальных единицах (м/с).

Описание модели

На панели Scene в разделе Units включаем кнопку Metrics (хотя можно обойтись и без этого).

Вид сверху.

N. Задаем для плоскости определенный размер по оси x (Dimenstions).

Для сферы создаем свойство timer, два сенсора (Always и Property). Для property-timer задаем значение интервала от 0 до 1 (т.е. движение будет длится 1 секунду).

Активатор Motion. Устанавливаем какое-либо значение Loc. Запускаем игру и смотрим, проходит ли сфера за 1 сек длину плоскости. Методом подбора находим такие значения длины плоскости и параметра Loc, чтобы шар точно преодолевал расстояние от начала плоскости до ее конца. Например, было выяснено, что при длине плоскости в 6 м, шар проходит это расстояние за 0.1 Loc. Т.е. скорость в 0.1 Loc соответствует 6 м/с. Следовательно, за 0.05 Loc - 3 м/с, а 0,01 Loc - 0,06 м/с.

Поскольку значение Loc можно задавать только до сотых, то это накладывает ограничения на возможность установить точную скорость. Определим, какому значению Loc соответствует скорость в 1 м/с:
0.1 - 6 (м/с)
x - 1 (м/с)
следовательно x = (0.1 * 1)/6 ~ 0.0166(6). В Blender2.6 можно будет вписать только округленное до сотых значение (0.02).

Прикрепленный файлРазмер
units.blend652.99 кб

Проблема с установкой массы (Set Mass) в Blender Game Engine

Массу физического объекта можно установить на панели Physics. Например, в 1 ед.

Если в процессе игры требуется поменять массу, то можно использовать активатор Edit_Object -> Dynamics -> Set Mass.

Однако масса изменяется лишь однажды. Далее, если нажимать тот же сенсор или другой, меняющий массу, то происходит что-то странное: объект легчает (не смотря на указанную массу). Причем настолько, что после нескольких нажатий, взлетает.

Проблема не решается, если добавить дополнительную пару контроллер-активатор, "обнуляющий массу", а затем снова установить массу. Т. е. проблема скорее всего именно в Set Mass.

Прозрачный куб с непрозрачными гранями (Blender 2.6x)

Создание ребер

  1. Вид сверху (7). Shift+D (дублирование). Смещаем копию на равное количество единиц (Ctrl) вправо.
  2. N. В разделе Scale устанавливаем значения X и Z в 0.01. Получается объемное ребро. N.
  3. Дублируем ребро и смещаем его ровно на то количество единиц, которое равно стороне куба.
  4. Выделяем оба ребра, дублируем, поворачиваем по оси Z на 900 (R, Z, Ctrl).
  5. Выделяем четыре ребра. Вид спереди (1). Перемещаем вниз (на уровень основания исходного куба). Дублируем, перемещаем вверх. (Всегда использовать Ctrl.)
  6. Выделить два видимых из вида спереди ребра. Дублировать, повернуть по Y на 900 (R, Y, Ctrl).
  7. Не снимая выделения, перейти на вид сбоку. Дублировать и переместить на противоположную грань.
  8. Выделить все грани (B) и объединить (Ctrl+J).

Настройки материалов

Совместите каркас из ребер с кубом, объединить их.

Настройка окружения

Прозрачный куб, созданный в Blender