Возможно вы искали: 'X3: Terran Conflict'

May 12 2025 01:25:39
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96030355
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18346
• Обзор The Walking ... 18789
• Обзор DMC: Devil M... 19864
• Обзор на игру Valk... 15867
• Обзор на игру Stars! 17754
• Обзор на Far Cry 3 17935
• Обзор на Resident ... 16012
• Обзор на Chivalry:... 17495
• Обзор на игру Kerb... 17970
• Обзор игры 007: Fr... 16604
Превью о играх
• Превью к игре Comp... 17946
• Превью о игре Mage... 14451
• Превью Incredible ... 14706
• Превью Firefall 13462
• Превью Dead Space 3 16325
• Превью о игре SimC... 14717
• Превью к игре Fuse 15432
• Превью Red Orche... 15532
• Превью Gothic 3 16334
• Превью Black & W... 17345
Главная » Статьи » Всё о XNA » BOX-ы и физика

BOX-ы и физика

В граве, если кто обратил внимание, пристутсвует какая-то физика. Т.е. при попадании ракеты в стену, стена рушится. Все это легко осуществить встроенными в XNA средствами. Я сам долго над этим возился, может кому из новичков поможет. А кто-нибудь из “старичков” улучшит пример(собственно поэтому и выкладываю, сам я че то не силен в математике, если кому не трудно – сделайте доброе дело).
Как вы знаете, (или не знаете) в XNA есть встроенный класс – Box. С ним можно делать кое какие вещи, например, проверка на столкновения и т.д. Что бы создать его достаточно всего два параметра, координаты двух точек, самой дальней от начала оси координат и самой ближней. К сожалению в этой простоте и кроется подвох – создавать боксы можно только параллельными этим самым осям координат (т.е. такими какими они есть в Grave, поэтому там нет косых сооружений). Я сначала пробовал конечно вручную создавать все эти боксы, но мягко говоря “подустал”, вонзникла мысль что не барское (человечье) это дело, пусть этим РС занимается на то у него и голова железная (или кремниевая). В общем путем нехитрых усилий я создал функцию.
Что делает человек – в редакторе 3D создает уровень. Затем, при его визуализации, передает все полученные из него меши в функцию, заодно с мировыми матрицами, которые передает в шейдер для отрисовки. Как результат получает бокс ровно вокруг этого самого меша (если конечно ничего не напутал с матрицами). Советую создать массив боксов и в него заносить все результаты, кроме того, боксы можно, конечно, создавать каждый раз при отрисовке, но желательно делать это один раз при инициализации.
А вот проверять на столкновения, наоборот, советую почаще, хотя все конечно зависит от реализации. Кому не интересно, может не разбирать, функция прекрасно работает сама. Только успевай вызывать.

BoundingBox box(ModelMesh mesh, Matrix matrix) 
{ 
VertexPositionColor[] vector = new VertexPositionColor[mesh.VertexBuffer.SizeInBytes / VertexPositionColor.SizeInBytes]; 
// создаем массив вершин, в который будут 
// записанны все вершины меша. 

 


Тут важно задать размер этого массива.
Древний и самый точный метод, которым до сих пор пользуются гадалки хорош, но в данном случае не помог.
Путем другого, весьма похожего, “метода научного тыка”, я сделал следующую реализацию.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// ответственно заявляю – работает. Почему сам не знаю, но чувствую – 
// делать надо так 
mesh.VertexBuffer.GetData(vector); 
// тут мы лихо загоняем все вершин меша в созданный нами массив и в дальнейшем работаем уже с ним 
 
Vector3 max = new Vector3();
//как было сказано, нам достаточно 
Vector3 min = new Vector3();
//всего двух точек 
 
for (int i = 0; i < vector.Length; i++) 
{ 
vector[i].Position = Vector3.Transform(vector[i].Position, matrix);
//берем из нашего массива только координаты, т.е. позицию 
// не забываем перемножать на матрицу, что бы все вершины были на месте 
// и считались не так как в модели, а так как в нашем уютном 
// трехмерном мире 
 
if (i == 0) 
{ 
max = vector[i].Position; min = vector[i].Position; 
// при первом проходе и max и min будут равны нулю 
// и если весь меш находится по ту сторону нуля (т.е. меньше его) 
// наши вершины автоматически становятся самыми большими 
// и бокс будет образован вокруг них 
// мы этого не допустим и присвоим им обязательно значения 
// а дальше, точнее ниже, все идет по накатаной, само собой 
// просто сравниваются все значения и остаются только наибольшие и наименьшие 
} 
if (max.Z < vector[i].Position.Z) 
max.Z = vector[i].Position.Z; 
if (min.Z > vector[i].Position.Z) 
min.Z = vector[i].Position.Z; 
 
if (max.Y < vector[i].Position.Y) 
max.Y = vector[i].Position.Y; 
 
if (min.Y > vector[i].Position.Y)
min.Y = vector[i].Position.Y; 
 
if (max.X < vector[i].Position.X) 
max.X = vector[i].Position.X; 
 
if (min.X > vector[i].Position.X) 
min.X = vector[i].Position.X; 
} 
return new BoundingBox(min, max); 
 
//итог: дали меш и матрицу, 
// получили бокс, как и обещал. 
} 

 



Кому не нравится, пусть придумает лучше, с удовольствием посмотрю сам на лучшую реализацию. Я лишь задал направление, кто способен сделать лучше, пусть делает. Очень хотелось бы что бы кто нибудь взялся за реализацию боксов не параллельных осям координат. Тут нужно будет писать свой класс. Я бы написал, но мои попытки навели на мысль,что без знания математики (может быть даже высшей) тут не обойтись. Как я понимаю достаточно будет всего трех вершин. Ну а проверку столкновения написать не так уж и сложно. Ну и сам алгоритм нахождения дальней или ближней вершины, может тоже можно улучшить, я лично ничего лучше не придумал.
691 Прочтений •  [BOX-ы и физика] [08.08.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• BOX-ы и физика Ukraine Vova 08.08.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка