Конференция "Media" » Проекция и камера
 
  • dmk © (04.01.17 12:43) [0]
    Привет! Подскажите пожалуйста, как в формуле проекции учесть наклон камеры?
    Использую такую:

    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
 
Конференция "Media" » Проекция и камера
Есть новые Нет новых   [134427   +38][b:0][p:0.001]