Возможно вы искали: 'Odell Down Under'

May 12 2025 01:23:25
  • Как сделать 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 » SimpleBoundingPryzm, рефлектор и все, все, все…

SimpleBoundingPryzm, рефлектор и все, все, все…

Краткий экскурс. Все кто хочет осваивать XNA должны знать, что, скорее всего (но необязательно) им придется писать на C#, являющимся управляемым (managed) языком (не единственным, но предпочтительным для работы с XNA). Это понятие включает много чего и с этим вы можете ознакомиться при необходимости чуть погуглив, но кроме всего прочего, любая библиотека или исполнимый файл (далее сборка) скомпилированный для работы с XNA (в том числе) содержит самоописательную информацию или по-другому метаданные. Т.е. сборка несет в себе много информации о себе самой – из метаданных можно узнать о классах и их членах этой сборки, а так же о тех классах на которые сборка ссылается. Например, метаданные метода содержат полное описание метода, включая класс (сборку его содержащую), тип возвращаемый методом и всех его параметров. Такое обилие информации не должно пропадать! Я надеюсь, вы с этим тоже согласны. Так вот с помощью метаданных, анализа IL в который компилируется наш код и неугомонных ручек вполне возможно восстановить исходный код сборки. Для этого есть несколько готовых программ (ildasm даже входит в комплект .NET Framework SDK), но мы скачали (я надеюсь, вы последовали моей рекомендации) признанного лидера .NET Reflector от Lutz Roeder.

Итак, устанавливаем и запускаем, в итоге видим, что-то вроде:
articles: BoundingPryzm01.png

Это оно, то, что послужит вам верой и правдой, если вы и дальше будете что-то писать под .NET. Итак, нам нужно добраться до библиотек XNA, щелкаем меню File->Open… и ищем библиотечку под названием Microsoft.Xna.Framework.dll , я ее нашел у себя по пути C:\Program Files (x86)\Microsoft XNA\XNA Game Studio\v3.0\References\Windows\x86\Microsoft.Xna.Framework.dll чего и вам желаю. Потом нас заинтересует вот эта кнопка:
articles: BoundingPryzm02.png

В появившемся справа дополнении окна мы запишем BoundingFrustum примерно так:
articles: BoundingPryzm03.png

Потом уверенно щелкаем пару раз на названии в списке и оказываемся на соответствующем классе в дереве, раскроем его:
articles: BoundingPryzm04.png

Обращаю внимание, здесь хорошо видно какой класс и какие интерфейсы наследует наш пациент (сразу запишем в карточку, что его тянет меряться с себе подобными IEquatable). Теперь вызовем у класса контекстное меню:

articles: BoundingPryzm05.png

Здесь нас интересует пункт Disassemble. Из-за всех наших экспериментов рефлектор должен принять примерно такой вид:
articles: BoundingPryzm06.png

Прокрутив вниз скроллер окна Disassembler вы увидите гиперссылку Expand methods. Вот собственно и все волшебство -  перед вами текст класса.
Небольшое лирическое отступление: в процессе работы над проектами довольно часто задаешься вопросом “Почему?!!!”, почему .NET или библиотечка от сторонних производителей ведет себя  так, а не иначе и здесь рефлектор просто вне конкуренции. Порой копания в нутрах фреймворка заставляют задуматься об индийско-китайском заговоре в рядах майкрософта. Не подумайте что я программнацист, среди коллег из азии есть очень достойные профессионалы, просто поневоле вспоминается анекдот как индийский программист проверял булеву переменную на истинность:
public void SomeMethod(bool isPragMahaghama)
{
	if (isPragMahaghama.ToString().Length == 4)
        {
        	// что то делаем …
        }
}

 

Теперь по образу и подобию нам понадобится класс Gjk, методы SupportMapping из BoundingBox и BoundingSphere – потому как очень многое в библиотеках Microsoft  sealed и internal. Выкидываем инициализацию по матрице, а тупо прописываем 8 угловых точек (единственно нужно проследить чтобы они шли в нужном порядке – это нужно для того чтобы Plane переменные корректно обрабатывали нахождение объекта по “ту” и по “сю” сторону от себя). Методы можно сделать похожими на эти:
	private Vector3 BoxSupportMapping(BoundingBox box, Vector3 closestPoint)
    {
        Vector3 result = new Vector3();
        result.X = (closestPoint.X >= 0f) ? box.Max.X : box.Min.X;
        result.Y = (closestPoint.Y >= 0f) ? box.Max.Y : box.Min.Y;
        result.Z = (closestPoint.Z >= 0f) ? box.Max.Z : box.Min.Z;
        return result;
    }
 
    private Vector3 SphereSupportMapping(BoundingSphere sphere, Vector3 v)
    {
        Vector3 result = new Vector3();
        float num2 = v.Length();
        float num = sphere.Radius / num2;
        result.X = sphere.Center.X + (v.X * num);
        result.Y = sphere.Center.Y + (v.Y * num);
        result.Z = sphere.Center.Z + (v.Z * num);
        return result;
    }

 

Для инициализации получившегося класса мы будем использовать 8 точек:

articles: BoundingPryzm07.png

Именно в такой последовательности (ааа… 7  и 8 поменяйте местами). Так вот, из них мы получаем 6 плоскостей, которые затем используются в хвост и в гриву для определения пересечений.

Теперь выкидываем матричный конструктор и добавляем свой:
    public SimplePryzm(Vector3[] corners)
    {
        this.planes = new Plane[6];
        this.cornerArray = new Vector3[8];
        if (corners.Length != 8)
            throw new Exception("Дайте углов!");
        corners.CopyTo(cornerArray,0);
        SetPlanes();
    }

 

Здесь самый важный момент это метод SetPlanes, на скорую руку (не взыщите) и с учетом рисунка предыдущего выглядит он так:

    private void SetPlanes()
    {
        planes[NearPlaneIndex] = new Plane(cornerArray[0], cornerArray[1],cornerArray[2]);
        planes[BottomPlaneIndex] = new Plane(cornerArray[5], cornerArray[1], cornerArray[2]);
        planes[TopPlaneIndex] = new Plane(cornerArray[4], cornerArray[0], cornerArray[3]);
        planes[RightPlaneIndex] = new Plane(cornerArray[7], cornerArray[2], cornerArray[3]);
        planes[LeftPlaneIndex] = new Plane(cornerArray[0], cornerArray[1], cornerArray[5]);
        planes[FarPlaneIndex] = new Plane(cornerArray[4], cornerArray[5], cornerArray[7]);
    }

 

Что в сухом остатке, кто не знал – теперь знает, что такое Reflector и чем его следует закусывать, у нас есть обещанный мной в запале BoundingFrustum с произвольной инициализацией. Если у кого созреет хороший алгоритм “обжимки” мешей такой конструкцией feel free to use.
P.S.: В файле кода я указал, но на всякий случай еще раз скажу здесь – если вы хотите использовать этот класс по серьезному советую проверить инициализацию плоскостей. С лучами и другими плоскостями все будет работать нормально, но видимо где-то я напутал с точками и при проверках пересечения с объемами могут быть глюки (не с той стороны плоскости определяется фигура).

958 Прочтений •  [SimpleBoundingPryzm, рефлектор и все, все, все…] [08.08.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• SimpleBoundingPryzm, рефлектор и вс... 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 | Донейт | Статистика | Команда | Техническая поддержка