| /
|/
+---
[1 cos(45) 0]
[0 sin(45) 1]
отображение трехмерного объекта на экран
Помогите преобразовать трехмерные координаты в двумерные, плз! Нужно, чтобы на экране получилась изометрия. OpenGL не предлагать.
А почему не предлагать? Вы проблему не опишете по-подробнее? В чем задача состоит?
Ее будешь умножать на вектор. Для проекции.
Не все так просто, как кажется. Что касается penGL, я сама бы рада им воспользоваться, но нельзя по условию задачи. С осями не все так просто: нужна не перспектива, и изометрия или диметрия: ось Х по горизонтали, ось Z вверх, а ось Y под углом к оси Х.
x' = ( x * FOV ) / z + xRes / 2
y' = ( y * FOV ) / z + yRes / 2
FOV - угол обзора камеры (не помню, сколько по стандарту, но думаю градусов 60)
xRes - расширение по оси X
yRes - расширение по оси Y
1. ось x сонаправлена с x', поэтому в первая строка выглядит так:
[1 0 0];
2. ось y под углом 45 град. к обоим направлениям, причем по оси x' со знаком минус. Также эта ось смотрит в экран (ось z'):
[-sin(45) sin(45) 1]. Это дело можно нормализовать, разделив на 2
3. ось z противоположено направлена y':
[0 -1 0].
Получиться матрица 3x3, дополнив ее до размера 4x4 можно делать преобразования смещения в однородных координатах. Возможно где-то и ошибся, надо проверять...
Цитата: ~ArchimeD~
не понял смысла задания и вообще смысла слов "изометрия"...
FOV - угол обзора камеры ...
FOV - угол обзора камеры ...
"изометрию" достаточно понятно описали в предыдущем топике, а "фокус" в нее никак не клеется.
vAC Соглассен через матрицу преобразования. В данном случаи она называется проекционной. Так как проецирует 3 мерное изоброжение на плоскость.
V'=M*V
Матрицу вы составили неправельно. Это будет косоугольная проекция
Код:
Для изометрии все углы проекции базистных векторов равны и равны 120°
Код:
|
|
+
/ \
/ \
[cos(30) -cos(30) 0]
[-sin(30) -sin(30) 1]
|
+
/ \
/ \
[cos(30) -cos(30) 0]
[-sin(30) -sin(30) 1]
Спасибо всем большое!
x1 = x + cos(A)*y
y1 = z + sin(A)*y
Ето без учета розметов обекта, екрана и того что обект вверх ногами получится.