Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Функционирование матричного аппарата графических АПИ

Функционирование матричного аппарата графических АПИ

ASDFD12Постоялецwww2 янв. 201822:10#0
Высказывание о том что двигатель не двигает корабль, а двигает вселенную и так же в компьютерной графике.
Матрица модели - преобразовывает локальные координаты вершин модели в мировые путем вращение, масштабирование и перемещение.
Матрица вида. В статьях говорится что допустим надо переместить камеру на 10 единиц влево,  вместо этого перемещаем мир на 10 единиц вправо, а камера ВСЕГДА находится в начале  мировых координат.
1. Так ли это - камера всегда в точке (0,0,0) и смотрит вдоль оси Z мировых координат.
Матрица проекции.
Рассмотрим случай перспективной проекции.
Перспективное проектирование в декартовой системе координат путем матричного умножения не возможно.
По этому для всех матричных преобразований используется гомогенная система координат. Для представление положение 4 координата w=1, для направления w=0.
2. То есть когда мы посредством графического АПИ заводим координаты вершин, во внутренней реализации библиотеки АПИ эти координаты преобразовываются в гомогенные? И независимо от координаты Z, параметр w=1 например координата (1,1,100)  -> (1,1,100,1) , а координата (1,1,200) -> (1,1,200,1)?
3. Где находится плоскость проекцирование ? Можно ли ее задавать произвольной? Тут я думаю что камера все же ВСЕГДА находится в точке (0,0,0) и смотрит вдоль -Z. А плоскость проекцирование задается уравнением Z= С, где С - расстояние от камеры до плоскости проекцирование. Реально ли задать произвольную плоскость проекцирования - из принцыпа матричного умножения выходит 4 столбец дает возможность это сделать. Но как из уравнения плоскости отсечения построить этот 4ый вектор столбец. Поправьте. 
Матрица проекцирования на плоскость XOY. 
1 0 0 0
0 1 0 0
0 0 0 1/c
0 0 0 1
Произвольная точка вектор-строка (x,y,z,1)
После проекцирование получим (x,y,0, z/c + 1) , где с - расстояние от камеры до плоскости проекцирование.
4. Чтобы перейти к декартовым координататам нужно вектор-строку поделить на (z/c + 1). Допустим k= (z/c +1) => тогда возврат от гомогенных в декартовые
(x/k, y/k, 0 ,1 ) - операция обратного преобразование координат необратима - мы при обратном восстановлении получаем проекцию точки на плоскость XOY?

ASDFD12Постоялецwww2 янв. 201822:14#1
"Но как из уравнения плоскости отсечения построить этот 4ый вектор столбец." Здесь опечатка, имелось ввиду плоскости проекцирование)
MrShoorУчастникwww2 янв. 201822:27#2
ASDFD12
> 1. Так ли это - камера всегда в точке (0,0,0) и смотрит вдоль оси Z мировых
> координат.
Примерно так. То есть когда ты вычисляешь матрицу камеры - ты передаешь в функцию точку наблюдения EyePos. Так вот, если эту точку умножить на полученную матрицу, то должно выйти (0,0,0)

> 2. То есть когда мы посредством графического АПИ заводим координаты вершин, во
> внутренней реализации библиотеки АПИ эти координаты преобразовываются в
> гомогенные? И независимо от координаты Z, параметр w=1 например координата
> (1,1,100)  -> (1,1,100,1) , а координата (1,1,200) -> (1,1,200,1)?
Да. Только в русской литературе гомогенные координаты обычно называют однородными.

> 3. Где находится плоскость проекцирование ? Можно ли ее задавать произвольной?
Тут не совсем понятен сам вопрос. Однородные координаты в 3д описывают прямую. На этой прямой нужно как-то выбрать точку. Вот GPU выбирает эту точку так, чтобы w=1. Т.е. он делит (x,y,z,w) / w.

> Поправьте. 
> Матрица проекцирования на плоскость XOY. 
Не правильно там у тебя. Не 1/с а просто 1. И в 4 столбце 4 строке будет 0. В w после умножения на матрицу проекции попадает прямиком Z в пространстве вида. Короче вот тебе годный мануал по выводу матрицы проекции:
https://triplepointfive.github.io/ogltutor/tutorials/tutorial12.html
Почитай, разберись, сам выведи себе матрицу проекции.

Правка: 2 янв. 2018 22:29

ASDFD12Постоялецwww4 янв. 201811:26#3
3. Где находится плоскость проекцирование ? Можно ли ее задавать произвольной?
Расстояние плоскости проекцирование от камеры зависит от угла обзора, так чтобы k*tg(@/2) =1, где k - расстояние , @ - угол обзора.
Нормаль плоскость проекцирование ВСЕГДА параллельна оси Z. Задать ее с произвольной нормалью невозможно. Так ли это?
MrShoorУчастникwww4 янв. 201812:20#4
ASDFD12
Статью читал? Разобрался как выводят матрицу проекции? Сам вывести можешь? Если нет - то снова читай статью, что я тебе дал.

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр