Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Проекция и камера


dmk ©   (04.01.17 12:43

Привет! Подскажите пожалуйста, как в формуле проекции учесть наклон камеры?
Использую такую:

X := (P.x * fov / P.z) + cx;
Y := (P.y * fov / P.z) + cy;


Получается просто горизонт:
http://hostingkartinok.com/show-image.php?id=42189f5c31f415e0e66ac15bed3aa8e9

Вращать, двигать объект возможность есть, но нужно повернуть именно камеру.


Pavia ©   (05.01.17 12:32[1]

Какой наклон?

Вначале вращаем весь мир в соответствии с камерой, а затем уже проецируем.

http://courses.graphicon.ru/files/courses/cg/2012/lectures/cg2012_08_opengl.pdf


dmk ©   (05.01.17 15:03[2]

>Вначале вращаем весь мир
1. У меня не OpenGL. Свой аналог типа DirectX. Пока простенький.
2. Вращать весь мир накладно по производительности.


dmk ©   (05.01.17 15:05[3]

Хотя судя по формуле проекции придется каждую точку сцены пересчитать для проекции :(


Pavia ©   (05.01.17 16:27[4]

1. DirectX от OpenGL отличается только системой умножения матриц. Домножение с лева или с права.
2. Весь мир вращается только один раз на кадр. Для этого однотипные преобразования накапливаются в матрице. Так называемая матрица проецирования.
После умножения всех координат на матрицу все значения делятся на w, которая равна z+NearPlane.
Вот это деление называется перспективным преобразованием или перспективным делением.

Накладно да, но не так накладно как всё остальное. По большей части это векторные преобразования. :( Жаль что не целиком. Из-за свойств перспективы координату надо рассчитывать для каждой точке! Поэтому рассчитывают только для части, а далее линейно интерполируют между 10-20 точками.

По поводу умножения на матрицу. К примеру исключить транспонирование при хранении матрицы или взять быструю формулу с минимальным числом умножений 12.

Intel одно время специально публиковала алгоритм быстрого умножения матрицы на матрицу и матрицы на вектор оптимизированные под их процессор.
4*3 тактов на чтение вектора и 16*3 на чтение матрицы 4*6 такта на умножение =84
3*50 тактов деление = 150


ЯЧтсия   (09.01.17 14:48[5]

Удалено модератором


Pavia ©   (20.01.17 10:57[6]

Нашёл ссылку тут по лучше расписано.
http://graphicon.ru/oldgr/courses/cg99/notes/lect10/ogl_vvol.htm


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо