Показать сообщение отдельно
Старый 08.06.2009, 01:45
MonkDead вне форума Посмотреть профиль Отправить личное сообщение для MonkDead Посетить домашнюю страницу MonkDead Найти все сообщения от MonkDead
  № 9  
Ответить с цитированием
MonkDead
 
Аватар для MonkDead

Регистрация: Dec 2007
Сообщений: 204
Что надо сделать:
1) Рассчитать угол обзора по отношению к области вывода
Код AS3:
var halfWidth:Number = viewPort.width / 2;
var halfHeight:Number = viewPort.height / 2;
var focalLength:Number - фокальный радиус(расстояние);
var angle:Number = focalLength / Math.sqrt(halfWidth * halfWidth + halfHeight * halfHeight + focalLength * focalLength);
2) Сравнить нормаль камеры с нормалью полигона, скалярным произведением и сравнить с углом области вывода;
Код AS3:
if(dots(нормаль камеры и полигона) < angle)
{
     // Полигон виден.
}
else
{
     // Полигон не виден.
}
Вот и все, дальше оптимизируйте как вам надо и все будет нормально.

Цитата:
я не совсем в теме, но если правильно понял там берeтся локальный треугольник и потому в какую сторону он 'закручен' в глобальных координатах делается вывод видна ли плоскость, выглядит просто и надежно
Самый медленный метод, много расчетов и самое главное много доступов к данным.

Есть еще один способ, если у вас нет понятия viewPort(области вывода).
1) Повернуть нормаль полигона на FOV/2 к камере.
2) Сравнить нормали скалярным произведением, если больше 0 значит видим полигон.


Последний раз редактировалось MonkDead; 08.06.2009 в 02:02.