![]() |
|
||||||||||
|
|
|
|||||
|
Вот, собственно, и вопрос =) Если считать, что полигон виден, если его нормаль направлена в сторону камеры - все вроде бы понятно... НО! с учетом FOV получается, что полигон (3) должен быть виден и при определенной сонаправленности нормалей камеры и полигона Вопрос: как задать условие отображения полигона??? ЗЫ делал так - брал камеру, создавал ее матрицу, получал обратную и ее (обратную) применял ко всем точкам полигонов. После этого высчитывал нормали полигонов Далее с помощью Matrix3D.deltaTransformVector() проецировал нормаль на плоскость экрана. когда камера направлена точно на центр полигона - все как надо, но если полигон находится в крайней части экрана - ... незнаю что и делать заранее спасибо ЗЗЫ это не про papervision3D, я свой движок пытаюсь писать =))
__________________
...вселенская грусть Последний раз редактировалось gloomyBrain; 07.06.2009 в 18:36. |
|
|||||
|
Полигон 3 у Вас не должен быть виден, его нормаль направлена в другое полупространство.
|
|
|||||
|
ну ок, если бы он был повернут чуть меньше - факт в том, что его нормаль направлена В ОДНУ сторону с нормалью камеры, НО он должен быть виден по смыслу
__________________
...вселенская грусть Последний раз редактировалось gloomyBrain; 07.06.2009 в 18:49. |
|
|||||
|
зачем вам делать периферийное искажение ?
не усложняте так все себе... |
|
|||||
|
Очень просто: если нормаль полигона направлена в то полупространство где находиться камера, то показываем полигон, если в проивоположную - не показываем.
Плоскость которя разделяет пространство на два полупространства для конкретного полигона проходит через его центр и расположена параллельно экрану. Для оптических приборов(моделирование поведения камеры) FOV только ограничивает выводимую область сцены (чем дальше объект от камеры тем тем большая часть объекта будет видна). Последний раз редактировалось alekslitvinenk; 07.06.2009 в 20:53. |
|
|||||
|
Регистрация: Nov 2008
Сообщений: 528
|
Мне тоже интересен этот вопрос, потому что благодаря нему я понял, почему у меня в самописном 3д иногда промелькивали ненужные плоскости.
Есть ли простой способ определить видимость? Или, действительно, нужно вычислять в 2 этапа? |
|
|||||
|
Регистрация: Dec 2007
Сообщений: 204
|
Что надо сделать:
1) Рассчитать угол обзора по отношению к области вывода 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); if(dots(нормаль камеры и полигона) < angle) { // Полигон виден. } else { // Полигон не виден. } Цитата:
Есть еще один способ, если у вас нет понятия viewPort(области вывода). 1) Повернуть нормаль полигона на FOV/2 к камере. 2) Сравнить нормали скалярным произведением, если больше 0 значит видим полигон.
__________________
http://www.infinity3d-engine.com Последний раз редактировалось MonkDead; 08.06.2009 в 02:02. |
|
|||||
|
Чето-то ребятки вы перекручиваете... Проблема надуманная. Если полигон невидим, а вы подумайте как надо умудриться его поставить что-бы он стал невидим, и сразу станет ясно, что рассчет такой ситации - только лишняя нагрузка на медлительный flash процессор и быстрее будет визуализировать невидимы полигон, тем более что флеш тормозит в основном сильнее всего на отрисовке, а отрисовать невидимый полигон ему будет только в радость как быстро.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 05:57. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| 3d |
|
|