Пятница, 22.09.2017, 15:26
Приветствую Вас Гость | RSS

Кузница миров

Меню сайта
Категории раздела
Мои статьи [2]
Курс : "Основы С++ для начинающих программистов игр." [25]
WindMill Engine [3]
XNA4 RPG [0]
Перевод туториалов но созданию RPG на C# c XNA4.
C# & Leadwerks [5]
Программирование Leadwerks Engine на языке С# с помощью врапера Le.NET.

Каталог статей и уроков

Главная » Статьи » C# & Leadwerks

5. Leadwerks Engine. Основы физики. Тела

1. Основы физики. Тела

----------------------------------------------------------------------------------------------------------------------------

Приступать к изучению этого материала желательно после знакомства с уроками:

3. Работа с освещением

4. Введение в меши

Начнем мы с исходного кода второго урока, закомментировав или удалив создание мешей.

----------------------------------------------------------------------------------------------------------------------------

В Leadwerks engine за физику отвечает библиотека newton. Newton это профессиональный физический движок с обширным функционалом.

Базовым объектом в Newton, для которого просчитываются физические процессы, является тело (body). В Leadwerks engine оно представлено классом TBody.

Создадим тело в виде коробки и установим ему массу. Добавим перед главным циклом следующий код:

 

// Создаем физическое тело

TBody body = LE.CreateBodyBox();

//Задаем массу

LE.SetBodyMass(body, 1);

 

Поскольку сам по себе body невидим, включим режим отладки физики:

 

//Отображение физических объектов

LE.DebugPhysics(1);

 

 

Запущенная программа нарисует зеленый куб, который под воздействием гравитации тут же упадет вниз куда-то за пределы экрана.

 

[image]

 

Чтобы куб не падал в бесконечность, создадим еще одно тело и поместим его под кубом:

 

TBody ground = LE.CreateBodyBox(5, 0.1f, 5);

LE.PositionEntity(ground, LE.Vec3(0, -1, 0));

 

Массу ему указывать не будем.

Теперь, если запустить программу, зеленый куб все равно упадет вниз, пройдя сквозь другое тело. Чтобы такое не происходило нужно задействовать проверку столкновений.

 

//Активация проверки столкновений

LE.Collisions(1,1);

LE.EntityType(body, 1);

LE.EntityType(ground, 1);

 

Причем, в движке можно сделать так, чтобы не все тела сталкивались. Для этого нужно разделить их по типам. Тип телу задается функцией EntityType. А функция Collisions указывает, какие типы тел могут взаимодействовать между собой.

Запустим программу, теперь куб никуда не упадет.

[image]

 

Ну и ради интереса добавим еще одно тело:

 

TBody body2 = LE.CreateBodyBox();

LE.SetBodyMass(body2, 1);

LE.PositionEntity(body2, LE.Vec3(0.5f, 2, 0));

LE.EntityType(body2, 1);

 

В результате один бокс упадет на другой и свалится с него:

 

[image]

 

 

Теперь заменим контуры тел на видимые объекты. Ведь в компьютерных играх графика состоит не только из линий. Для этого создадим кубический меш и соединим его функцией EntityParent с физическим телом.

 

TMesh mesh = LE.CreateCube();

LE.EntityParent(mesh, body);

 

Проделав то же самое с остальными телами и отключив отладку физики мы увидим такую картину:

 

[image]

 

 

Ну а в завершение устроим небольшой «кубопад», добавив перед главным циклом такой код:

 

float x;

float z;

Random rnd = new Random();

for (int n = 1; n <= 1000; n++)

{

body = LE.CopyEntity(body);

x = rnd.Next(-5, 5);

z = rnd.Next(-5, 5);

LE.PositionEntity(body, LE.Vec3(x, n, z));

}

 

 

[image]

 

А чтобы картинка не была такой мрачной, вспомним урок про загрузку мешей и загрузим и применим ко всем объектам материал:

 

TMaterial mat = LE.LoadMaterial("brick.mat");

if (mat != null)

{

//Применяем материал к мещам

LE.PaintEntity(mesh, mat);

LE.PaintEntity(mesh2, mat);

LE.PaintEntity(mesh3, mat);

}

 

Так, однозначно, смотрится веселее.

 

[image]

 

Полный исходный код можно взять здесь.

Категория: C# & Leadwerks | Добавил: nilrem (09.09.2012)
Просмотров: 1331 | Комментарии: 2 | Рейтинг: 0.0/0
Всего комментариев: 2
2  
отличные уроки! Продолжай...

1  
Жаль, что уроки на этом кончаются. Очень уж хороши. Все просто и понятно

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0