forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   3D в 2D проекции (http://forum.boolean.name/showthread.php?t=16988)

Eugenes 30.06.2012 14:28

3D в 2D проекции
 
Суть проблемы: игра происходит только в двух измерениях, но для отображения используются 3D модели. Необходимо рассчитывать столкновения не исходя из реальной 3D коллизии, а того, как видит объекты игрок. Поясню: предположим, у нас астероид неровной формы - передняя часть его шире, чем задняя. Ставим его и корабль игрока в одинаковые координаты по оси Z. Однако, положение центра астероида относительно центра корабля будет зависеть от размеров и формы астероида.

Предположим, корабль сталкивается с астероидом в задней части последнего - т.е. игрок видит, что корабль залетает за астероид и только там останавливается. Пока вижу решение - подбирать координату по Z для каждого объекта индивидуально, но это слишком трудоемкий процесс. Есть ли способ, который бы спроецировал 3D объект в 2D проекцию и позволил бы рассчитать столковение?

Заранее спасибо за ответы :)

polopok 30.06.2012 15:29

Ответ: 3D в 2D проекции
 
так как ты используешь 3д среду ,используй linePick от твоего корабля до астероида(ов) ,получишь координаты из pick-а дистанцию проверяешь ,как-то так ...

Eugenes 30.06.2012 16:57

Ответ: 3D в 2D проекции
 
Цитата:

Сообщение от polopok (Сообщение 231954)
так как ты используешь 3д среду ,используй linePick от твоего корабля до астероида(ов) ,получишь координаты из pick-а дистанцию проверяешь ,как-то так ...

т.е., если я правильно понимаю, LinePick показывает первый попавшийся объект, который пересекает линия с координатами x y z и x+dx y+dy z+dz?
Т.е. я ставлю минимальные значение dx, dy, dz, и если какой-то объект попадает на пересечение, то значит корабль с ним столкнется? И dz=0, т.к. у меня просчитываются только плоские столкновения, я правильно понял?

polopok 30.06.2012 21:13

Ответ: 3D в 2D проекции
 
LinePick . почитай в справке ...
там ещё радиус проверки можно задать .

ANIK123 01.07.2012 00:06

Ответ: 3D в 2D проекции
 
может EntityPick? выдает ближаишее энтити, и если мы "словим" столкновение то тогда еще и LinePick во все стороны пустить дабы проверить нет ли еще столкновений кроме уже только что произошедшего

и еще: почему не используешь физику? можно запрсто заставить физ обьекты "существовать" только в двух или даже одной осях)))
xEntitySetLinearFactor(модель_с_физ_телом, 1.0f, 1.0f, 0.0f); - и все, по оси z никуда не свалит)

polopok 01.07.2012 08:40

Ответ: 3D в 2D проекции
 
Можно и так ,а можно и формулами

Eugenes 01.07.2012 10:41

Ответ: 3D в 2D проекции
 
Цитата:

Сообщение от ANIK123 (Сообщение 232016)
xEntitySetLinearFactor(модель_с_физ_телом, 1.0f, 1.0f, 0.0f); - и все, по оси z никуда не свалит)

А это команда какого движка? Есть ли такая команда для ODE? (его планирую использовать)

Hartmann1 01.07.2012 11:41

Ответ: 3D в 2D проекции
 
Цитата:

Сообщение от ANIK123 (Сообщение 232016)
может EntityPick? выдает ближаишее энтити, и если мы "словим" столкновение то тогда еще и LinePick во все стороны пустить дабы проверить нет ли еще столкновений кроме уже только что произошедшего

Eugenes
После EntityPick LinePick делать ненужно, это одно и тоже практически. Более того, в EntityPick тоже нет необходимости. Надо поставить коллизию игрока с объектами в режим "эллипсоид-треугольники" + режим поведения "остановка" ( см. Collisions ), чтобы после столкновения игрок не сьехал в сторону и не нарушил условие "Z = 0" ( либо вручную корректировать позицию по Z после UpdateWorld() ). Ну и подобрать оптимальный радиус ( EntityRadius ) для игрока.

Цитата:

Сообщение от Eugenes (Сообщение 232041)
А это команда какого движка? Есть ли такая команда для ODE? (его планирую использовать)

Это функция Xors3D, отдельный движок, т.к. ты его не юзаешь, забудь.
Ну а раз ты физический движок решил заюзать, то проверяй коллизии через него, а не через блиц. ( Collisions, LinePick, EntityPick, CameraPick это все одна и та же подсистема блица, если юзаешь физ. движок, то они тебе не понадобятся )


Часовой пояс GMT +4, время: 09:03.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot