|
3D-программирование Вопросы, касающиеся программирования 3D мира |
30.06.2012, 14:28
|
#1
|
AnyKey`щик
Регистрация: 30.06.2012
Сообщений: 12
Написано 0 полезных сообщений (для 0 пользователей)
|
3D в 2D проекции
Суть проблемы: игра происходит только в двух измерениях, но для отображения используются 3D модели. Необходимо рассчитывать столкновения не исходя из реальной 3D коллизии, а того, как видит объекты игрок. Поясню: предположим, у нас астероид неровной формы - передняя часть его шире, чем задняя. Ставим его и корабль игрока в одинаковые координаты по оси Z. Однако, положение центра астероида относительно центра корабля будет зависеть от размеров и формы астероида.
Предположим, корабль сталкивается с астероидом в задней части последнего - т.е. игрок видит, что корабль залетает за астероид и только там останавливается. Пока вижу решение - подбирать координату по Z для каждого объекта индивидуально, но это слишком трудоемкий процесс. Есть ли способ, который бы спроецировал 3D объект в 2D проекцию и позволил бы рассчитать столковение?
Заранее спасибо за ответы
|
(Offline)
|
|
30.06.2012, 15:29
|
#2
|
ПроЭктировщик
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений (для 71 пользователей)
|
Ответ: 3D в 2D проекции
так как ты используешь 3д среду ,используй linePick от твоего корабля до астероида(ов) ,получишь координаты из pick-а дистанцию проверяешь ,как-то так ...
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
30.06.2012, 16:57
|
#3
|
AnyKey`щик
Регистрация: 30.06.2012
Сообщений: 12
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: 3D в 2D проекции
Сообщение от polopok
так как ты используешь 3д среду ,используй linePick от твоего корабля до астероида(ов) ,получишь координаты из pick-а дистанцию проверяешь ,как-то так ...
|
т.е., если я правильно понимаю, LinePick показывает первый попавшийся объект, который пересекает линия с координатами x y z и x+dx y+dy z+dz?
Т.е. я ставлю минимальные значение dx, dy, dz, и если какой-то объект попадает на пересечение, то значит корабль с ним столкнется? И dz=0, т.к. у меня просчитываются только плоские столкновения, я правильно понял?
|
(Offline)
|
|
30.06.2012, 21:13
|
#4
|
ПроЭктировщик
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений (для 71 пользователей)
|
Ответ: 3D в 2D проекции
LinePick . почитай в справке ...
там ещё радиус проверки можно задать .
|
(Offline)
|
|
01.07.2012, 00:06
|
#5
|
Знающий
Регистрация: 29.11.2010
Сообщений: 244
Написано 31 полезных сообщений (для 49 пользователей)
|
Ответ: 3D в 2D проекции
может EntityPick? выдает ближаишее энтити, и если мы "словим" столкновение то тогда еще и LinePick во все стороны пустить дабы проверить нет ли еще столкновений кроме уже только что произошедшего
и еще: почему не используешь физику? можно запрсто заставить физ обьекты "существовать" только в двух или даже одной осях)))
xEntitySetLinearFactor(модель_с_физ_телом, 1.0f, 1.0f, 0.0f); - и все, по оси z никуда не свалит)
__________________
Intel Core i3-4005U (1.7 ГГц), 4 ГБ ОЗУ, nVidia GeForce 940M 4 ГБ, Win8.1
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
01.07.2012, 08:40
|
#6
|
ПроЭктировщик
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений (для 71 пользователей)
|
Ответ: 3D в 2D проекции
Можно и так ,а можно и формулами
|
(Offline)
|
|
01.07.2012, 10:41
|
#7
|
AnyKey`щик
Регистрация: 30.06.2012
Сообщений: 12
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: 3D в 2D проекции
Сообщение от ANIK123
xEntitySetLinearFactor(модель_с_физ_телом, 1.0f, 1.0f, 0.0f); - и все, по оси z никуда не свалит)
|
А это команда какого движка? Есть ли такая команда для ODE? (его планирую использовать)
|
(Offline)
|
|
01.07.2012, 11:41
|
#8
|
AnyKey`щик
Регистрация: 24.06.2012
Сообщений: 16
Написано 5 полезных сообщений (для 6 пользователей)
|
Ответ: 3D в 2D проекции
Сообщение от ANIK123
может EntityPick? выдает ближаишее энтити, и если мы "словим" столкновение то тогда еще и LinePick во все стороны пустить дабы проверить нет ли еще столкновений кроме уже только что произошедшего
|
Eugenes
После EntityPick LinePick делать ненужно, это одно и тоже практически. Более того, в EntityPick тоже нет необходимости. Надо поставить коллизию игрока с объектами в режим "эллипсоид-треугольники" + режим поведения "остановка" ( см. Collisions ), чтобы после столкновения игрок не сьехал в сторону и не нарушил условие "Z = 0" ( либо вручную корректировать позицию по Z после UpdateWorld() ). Ну и подобрать оптимальный радиус ( EntityRadius ) для игрока.
Сообщение от Eugenes
А это команда какого движка? Есть ли такая команда для ODE? (его планирую использовать)
|
Это функция Xors3D, отдельный движок, т.к. ты его не юзаешь, забудь.
Ну а раз ты физический движок решил заюзать, то проверяй коллизии через него, а не через блиц. ( Collisions, LinePick, EntityPick, CameraPick это все одна и та же подсистема блица, если юзаешь физ. движок, то они тебе не понадобятся )
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:02.
|