Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.06.2009, 17:21
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 1  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Attention Нормали, полигоны и FOV


Вот, собственно, и вопрос =)
Если считать, что полигон виден, если его нормаль направлена в сторону камеры - все вроде бы понятно... НО!
с учетом FOV получается, что полигон (3) должен быть виден и при определенной сонаправленности нормалей камеры и полигона
Вопрос: как задать условие отображения полигона???

ЗЫ
делал так - брал камеру, создавал ее матрицу, получал обратную и ее (обратную) применял ко всем точкам полигонов. После этого высчитывал нормали полигонов
Далее с помощью Matrix3D.deltaTransformVector() проецировал нормаль на плоскость экрана.
когда камера направлена точно на центр полигона - все как надо, но если полигон находится в крайней части экрана - ... незнаю что и делать
заранее спасибо

ЗЗЫ
это не про papervision3D, я свой движок пытаюсь писать =))
__________________
...вселенская грусть


Последний раз редактировалось gloomyBrain; 07.06.2009 в 18:36.
Старый 07.06.2009, 17:37
alekslitvinenk вне форума Посмотреть профиль Отправить личное сообщение для alekslitvinenk Посетить домашнюю страницу alekslitvinenk Найти все сообщения от alekslitvinenk
  № 2  
Ответить с цитированием
alekslitvinenk
 
Аватар для alekslitvinenk

Регистрация: Oct 2005
Адрес: Москва
Сообщений: 491
Отправить сообщение для alekslitvinenk с помощью ICQ Отправить сообщение для alekslitvinenk с помощью AIM Отправить сообщение для alekslitvinenk с помощью Skype™
Полигон 3 у Вас не должен быть виден, его нормаль направлена в другое полупространство.

Старый 07.06.2009, 18:27
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 3  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
ну ок, если бы он был повернут чуть меньше - факт в том, что его нормаль направлена В ОДНУ сторону с нормалью камеры, НО он должен быть виден по смыслу
__________________
...вселенская грусть


Последний раз редактировалось gloomyBrain; 07.06.2009 в 18:49.
Старый 07.06.2009, 19:15
alekslitvinenk вне форума Посмотреть профиль Отправить личное сообщение для alekslitvinenk Посетить домашнюю страницу alekslitvinenk Найти все сообщения от alekslitvinenk
  № 4  
Ответить с цитированием
alekslitvinenk
 
Аватар для alekslitvinenk

Регистрация: Oct 2005
Адрес: Москва
Сообщений: 491
Отправить сообщение для alekslitvinenk с помощью ICQ Отправить сообщение для alekslitvinenk с помощью AIM Отправить сообщение для alekslitvinenk с помощью Skype™
зачем вам делать периферийное искажение ?
не усложняте так все себе...

Старый 07.06.2009, 19:20
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 5  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Я готов выслушать правильный способ =)
как сделать перспективное искажение, не сталкиваясь с подобной проблемой теста на отображение полигона???
__________________
...вселенская грусть

Старый 07.06.2009, 19:52
alekslitvinenk вне форума Посмотреть профиль Отправить личное сообщение для alekslitvinenk Посетить домашнюю страницу alekslitvinenk Найти все сообщения от alekslitvinenk
  № 6  
Ответить с цитированием
alekslitvinenk
 
Аватар для alekslitvinenk

Регистрация: Oct 2005
Адрес: Москва
Сообщений: 491
Отправить сообщение для alekslitvinenk с помощью ICQ Отправить сообщение для alekslitvinenk с помощью AIM Отправить сообщение для alekslitvinenk с помощью Skype™
Очень просто: если нормаль полигона направлена в то полупространство где находиться камера, то показываем полигон, если в проивоположную - не показываем.
Плоскость которя разделяет пространство на два полупространства для конкретного полигона проходит через его центр и расположена параллельно экрану.
Для оптических приборов(моделирование поведения камеры) FOV только ограничивает выводимую область сцены (чем дальше объект от камеры тем тем большая часть объекта будет видна).


Последний раз редактировалось alekslitvinenk; 07.06.2009 в 20:53.
Старый 07.06.2009, 22:04
Stargazer вне форума Посмотреть профиль Отправить личное сообщение для Stargazer Найти все сообщения от Stargazer
  № 7  
Ответить с цитированием
Stargazer

Регистрация: Nov 2008
Сообщений: 528
Мне тоже интересен этот вопрос, потому что благодаря нему я понял, почему у меня в самописном 3д иногда промелькивали ненужные плоскости.
Есть ли простой способ определить видимость? Или, действительно, нужно вычислять в 2 этапа?

Старый 07.06.2009, 22:18
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 8  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
а такой способ не проходит ?
я не совсем в теме, но если правильно понял там берeтся локальный треугольник и потому в какую сторону он 'закручен' в глобальных координатах делается вывод видна ли плоскость, выглядит просто и надежно
вот еще пост с комментами по нему

Старый 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.
Старый 08.06.2009, 02:11
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 10  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Чето-то ребятки вы перекручиваете... Проблема надуманная. Если полигон невидим, а вы подумайте как надо умудриться его поставить что-бы он стал невидим, и сразу станет ясно, что рассчет такой ситации - только лишняя нагрузка на медлительный flash процессор и быстрее будет визуализировать невидимы полигон, тем более что флеш тормозит в основном сильнее всего на отрисовке, а отрисовать невидимый полигон ему будет только в радость как быстро.

Создать новую тему Ответ Часовой пояс GMT +4, время: 05:57.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
3d

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.