forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   If объект находится по центру экрана (http://forum.boolean.name/showthread.php?t=8664)

ELIAS 14.07.2009 11:32

If объект находится по центру экрана
 
Как можно узнать, 3д-объект находиться по центру экрана или нет. У меня алгоритм в котором объекты выезжают из-за краёв вида и движутся в другую сторону(в другой край). Но мне нужно чтобы они останавливались в тот момент когда для пользователя они находятся в центре экрана! Вот нужна функция которая бы этим занималась, что возвращала 1 если по середине экрана и 0 если нет.

(Объкты разных форм и разых размеров, на разном расстоянии от камеры)

Не знаю как это замутить...camera pick что ли...вообщем нужна ваша помощь.

h1dd3n 14.07.2009 11:34

Ответ: If объект находится по центру экрана
 
А что ты понимаешь под "объект стоит посередине экрана"? Его центр? или же край?

ELIAS 14.07.2009 11:57

Ответ: If объект находится по центру экрана
 
Цитата:

А что ты понимаешь под "объект стоит посередине экрана"? Его центр? или же край?
Центр. Именно центр визуальный, а не относительно которого выполняются все операции с объектом. Впрочем в моём случае все объекты - прямоугольные квады, достаточно легко передвинуть его привязочный цетр в визульный центр объекта.

H@NON 14.07.2009 12:49

Ответ: If объект находится по центру экрана
 
тебе нужно перевести 3д координаты в координаты экрана и сверять их с центром экрана. Юзай команды CameraProject, ProjectedX(), ProjectedY()

ABTOMAT 14.07.2009 14:38

Ответ: If объект находится по центру экрана
 
Простой способ:
Спроецировать координаты твоего квада на экран
CameraProject()
ProjectedX()
ProjectedY()
По теореме Пифагора проверить расстояние от центра экрана (GraphicsWidth() Shr 1, GraphicsHeight() Shr 1) до твоего объекта на экране (ProjectedX(), ProjectedY()) Если расстояние получится меньше N, то объект - в центре экрана, иначе - не в центре.
Сложный способ:
По теореме косинусов определить косинус угла альфа между вектором направления камеры и между вектором камера - квад. Косинус, равный 0 означает, что твоя камера направлена точно на квад (он в центре экрана). Косинус 1 означает, что камера смотрит точно перпендикулярно. Кроме того надо сделать проверку на знак синуса, ибо если камера повернётся в пределах 90° - 270°, то тут тоже косинус будет 0-1. Затем придумать порог N Є (0;1), при косинусе меньше которого объект считать в центре экрана.

Рекомендую использовать простой способ :crazy:
Сложный способ пригодится, когда нет возможности использовать камеру (например, чтобы определить, направил ли бот оружие на какой-то объект) Чё-то не туда меян понесло, для твоего случая хватит и CameraProject, ProjectedX(), ProjectedY()

И да, теорема Пифагора, теорема косинусов.


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

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