![]() |
3D в 2D проекции
Суть проблемы: игра происходит только в двух измерениях, но для отображения используются 3D модели. Необходимо рассчитывать столкновения не исходя из реальной 3D коллизии, а того, как видит объекты игрок. Поясню: предположим, у нас астероид неровной формы - передняя часть его шире, чем задняя. Ставим его и корабль игрока в одинаковые координаты по оси Z. Однако, положение центра астероида относительно центра корабля будет зависеть от размеров и формы астероида.
Предположим, корабль сталкивается с астероидом в задней части последнего - т.е. игрок видит, что корабль залетает за астероид и только там останавливается. Пока вижу решение - подбирать координату по Z для каждого объекта индивидуально, но это слишком трудоемкий процесс. Есть ли способ, который бы спроецировал 3D объект в 2D проекцию и позволил бы рассчитать столковение? Заранее спасибо за ответы :) |
Ответ: 3D в 2D проекции
так как ты используешь 3д среду ,используй linePick от твоего корабля до астероида(ов) ,получишь координаты из pick-а дистанцию проверяешь ,как-то так ...
|
Ответ: 3D в 2D проекции
Цитата:
Т.е. я ставлю минимальные значение dx, dy, dz, и если какой-то объект попадает на пересечение, то значит корабль с ним столкнется? И dz=0, т.к. у меня просчитываются только плоские столкновения, я правильно понял? |
Ответ: 3D в 2D проекции
LinePick . почитай в справке ...
там ещё радиус проверки можно задать . |
Ответ: 3D в 2D проекции
может EntityPick? выдает ближаишее энтити, и если мы "словим" столкновение то тогда еще и LinePick во все стороны пустить дабы проверить нет ли еще столкновений кроме уже только что произошедшего
и еще: почему не используешь физику? можно запрсто заставить физ обьекты "существовать" только в двух или даже одной осях))) xEntitySetLinearFactor(модель_с_физ_телом, 1.0f, 1.0f, 0.0f); - и все, по оси z никуда не свалит) |
Ответ: 3D в 2D проекции
Можно и так ,а можно и формулами
|
Ответ: 3D в 2D проекции
Цитата:
|
Ответ: 3D в 2D проекции
Цитата:
После EntityPick LinePick делать ненужно, это одно и тоже практически. Более того, в EntityPick тоже нет необходимости. Надо поставить коллизию игрока с объектами в режим "эллипсоид-треугольники" + режим поведения "остановка" ( см. Collisions ), чтобы после столкновения игрок не сьехал в сторону и не нарушил условие "Z = 0" ( либо вручную корректировать позицию по Z после UpdateWorld() ). Ну и подобрать оптимальный радиус ( EntityRadius ) для игрока. Цитата:
Ну а раз ты физический движок решил заюзать, то проверяй коллизии через него, а не через блиц. ( Collisions, LinePick, EntityPick, CameraPick это все одна и та же подсистема блица, если юзаешь физ. движок, то они тебе не понадобятся ) |
Часовой пояс GMT +4, время: 09:03. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot