Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2008, 20:07   #1
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию collision detection

Где можно про collision detection подробно почитать?
книги / статьи в интернете?
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 29.12.2008, 11:35   #2
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Может вы скажете что собираетесь сталкивать. Самое простое это заключить фигуру в круг/сферу или прямоугольник(и)/параллелепипед(ы) и работать с ними.

Последний раз редактировалось Kostia; 29.12.2008 в 11:48.
Kostia вне форума Ответить с цитированием
Старый 29.12.2008, 22:19   #3
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Для сферических поверхностей лучше способ типа "смерть кощея" - фигура в сфере сфера в кубе.
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 30.12.2008, 09:25   #4
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
фигура в сфере сфера в кубе.
ЧТо-то не улкадывающиеся в мое сознание. Это вообще как?
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 30.12.2008, 10:08   #5
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Цитата:
Сообщение от ROD Посмотреть сообщение
ЧТо-то не улкадывающиеся в мое сознание. Это вообще как?
запятую между сферами надо поставить.

Со сферами и кубами понятно.

Проверяется столкновение объектов мира: например персонажей с персонажами, стрелой с персонажем, мечом с персонажем (оружием в общем), персонажа с неживыми объектами игрового мира(камни, скалы) и т.д.

В качестве ограничивающих объемов используются куб и сфера.

Почему коллизия(правильнее назвать "объект коллизции") в конкретной реализации определяется как две матрицы 4x4 (однородные координаты)?
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 10.01.2009, 20:53   #6
Lihonosov
Новичок
Джуниор
 
Регистрация: 11.12.2007
Сообщений: 2
По умолчанию

Только начал изучать OpenGL. Подскажите на правильном ли я пути реализования Collision Detection:
Например, есть комната, в ней стол, нужно реализовать, чтобы не проваливаться сквозь стены и не проходить сквозь стол.
Решил с помощью Bounding Box:
Т.е. есть у меня структуры:
Цитата:
struct Point
{
GLfloat x;
GLfloat y;
GLfloat z;
};

struct Stol //стол, статический, т.е. е перемещается
{
Point c; //центр объекта
GLfloat r[3]; //радиусы по осям
};

struct Viewer //наблюдатель, который перемещается
{
Point c;
GLfloat r[3];
};
которые инициализируются:

Цитата:
Stol.c.x=0.0f;
Stol.c.y=0.95f;
Stol.c.z=1.0f;
Stol.r[0]=0.45f;
Stol.r[1]=0.3f;
Stol.r[2]=0.75f;

Viewer.c.x=0.0f;
Viewer.c.y=0.0f;
Viewer.c.z=0.0f;
Viewer.r[0]=0.1f;
Viewer.r[1]=0.1f;
Viewer.r[2]=0.1f;
В обработчике клавиш:
Цитата:
if (keys['A'])
{
x+=0.01f;
Viewer.c.x=x; //обновление кординамы объекта
if(TestCollisions(Viewer,Stol))
{
x-=0.01f;
}
}
Сама функция:
Цитата:
int TestCollisions(Viewer a, Stol b)
{
if(abs(a.c.x-b.c.x)>(a.r[0]+b.r[0])) return 0;
if(abs(a.c.y-b.c.y)>(a.r[1]+b.r[1])) return 0;
if(abs(a.c.z-b.c.z)>(a.r[2]+b.r[2])) return 0;
return 1;
}
В фунцкии рисования сцены:
Цитата:
...
glTranslatef(x,y,z);
glRotatef(xrot,1.0f,0.0f,0.0f); // Вращение по оси X на xrot
glRotatef(yrot,0.0f,1.0f,0.0f); // Вращение по оси Y по yrot
...
Все хорошо, до того пока не повернуть сцену (glRotatef(...)).
Вопрос в том, как быть при повороте сцены, как обновлять координаты стола?
Надеюсь я достаточно изложил суть моей проблемы
Если есть боле простой способ как это реализовать, то пожалуйста подскажите.
P.s. C++/WinAPI/OpenGL

Последний раз редактировалось Lihonosov; 10.01.2009 в 21:16.
Lihonosov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц