2010-11-15 3 views
2

Я сделал быстрый поиск для обнаружения столкновений для OpenGl, однако большинство вещей возвращаются с 2D-примерами с использованием CGRectIntersectsRect. Использую ли я CGRectIntersectsRect для 3D-обнаружения? Я делаю базовую игру в 3D-лабиринт, и я просто хочу остановить людей, проходящих через стены, которые только квадраты (сделаны из треугольников), в отличие от импортированных объектов (да, я новичок в этом).Обнаружение столкновений OpenGL 3D

Спасибо, Саймон

+0

Обновление: Я на самом деле написал свою собственную обычную коллизионную процедуру :) – Burf2000

ответ

5

Вы будете бороться.

Рассмотрим только с помощью Unity3D, что позволит вам получить доступ к NVIDIA PhysX, который является тип решения 3D физики вы хотите.

С другой стороны, начало с нуля с этим! http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.4.5881&rep=rep1&type=pdf

И наоборот, стать экспертом в что-то вроде этогоhttp://www.ode.org/, которые затем можно использовать предположительно с OpenGL, http://www.ogre3d.org/about/features и т.д.

Вот важное уточнение в отношении комментариев на «изображения»:

Изображения полностью не связаны с обнаружением столкновений. OpenGL совершенно не имеет отношения ни к какому пути к обнаружению столкновений или физике любого рода. У изображений нет абсолютно никакой связи с обнаружением столкновений. Между OpenGL и коллизиями отсутствует связь. Абсолютно ничего.

+0

Спасибо за информацию, я ушел от использования Unity и SIO2 2.0 из-за затрат, это учебный проект для меня. Я проверю ваши ссылки :) – Burf2000

2

OpenGL является чистой библиотека визуализации и не обеспечивает обнаружение столкновений. Вам придется сворачивать самостоятельно или использовать стороннюю библиотеку обнаружения столкновений.

Функция CGRectIntersectsRect выглядит так, как будто она исходит из библиотеки Cocos и выполняет двумерное обнаружение столкновений между прямоугольниками. Если фактический игровой процесс в вашей игре ограничен 2D, эта функция может быть все, что вам нужно, но если игрок перемещается в трех измерениях, этого будет недостаточно.

+0

Игрок может двигаться только вперед/назад и поворачиваться и т. Д. Таким образом, нет движения доступа Y. Есть ли хорошие шансы на эту работу? – Burf2000

+0

Если вы вращаетесь только под углом 90 градусов, вы можете использовать 'CGRectIntersectsRect' с прямоугольниками с координатами X и Z. В противном случае, забудьте об этом. – Zecc

+0

Если я правильно понимаю, вам нужно нарисовать отдельное изображение для обнаружения столкновения: просто использование вашего окна 3D-дисплея не будет работать. В любом случае, попытка использовать OpenGL для обнаружения конфликтов - это взлом - это не то, для чего он предназначен, поэтому в лучшем случае это будет неудобно и хрупко. – comingstorm

0
  1. OpenGL не делает обнаружение столкновений, по крайней мере, не умышленно. Вы можете использовать некоторые функции для обнаружения столкновения спрайтов, но я не уверен, что это относится к последней версии OpenGL ES на iPhone.

  2. CGRectIntersectsRect от Core Graphics, это простая проверка конверта, которую вы можете сделать, чтобы избежать более точной и дорогостоящей проверки, когда явно не требуется. Он работает только в 2D.

  3. Столкновения в 3D сложны. Возможно, вы могли бы начать с проецирования аватара на пол и проверить полученный многоугольник (или даже прямоугольник) для столкновения с линиями стены? Звучит проще.

Смежные вопросы