Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Нахождение уравнения плоскости, если известны... (http://www.flasher.ru/forum/showthread.php?t=137107)

gr_crd 04.03.2010 17:52

Нахождение уравнения плоскости, если известны...
 
Допустим есть камера - плоскость на которую проецируются точки.
Координата камеры известна C(cx,cy,cz);
Также есть угол поворота камеры вокруг осей OZ OY OX:

Например, камера расположена в точке (cx=100,cy=-20,cz=-350);
Повернута: camrotz = 30; camroty = 25; camrotx = 15; градусов.


А теперь вопрос:

Как найти уравнение той плоскости, которая образуется при данных параметрах камеры? Эт вообще реально в данном случае? :confused:

gloomyBrain 04.03.2010 18:15

Конечно реально =)
Уравнение плоскости - это вектор поворота (Ax + By + Cz) + величина сдвига по этому вектору (D).
На пальцах - берем лист бумаги и протыкаем его стержнем от авторучки. Стержень это наш вектор поворота. Он же - нормаль к плоскости. Теперь подвигаем лист бумаги туда-сюда - вот Вам величина сдвига

ЗЫ
А вообще Вам просто надо
1) получить матрицу камеры
2) инвертировать ее
3) умножить инвертированную матрицу на вектора проецируемых вершин
4) умножить вектора на матрицу проекции Matrix3D.projectVector()
5) вы получите x и y точек проекции

gr_crd 04.03.2010 18:36

(Ax + By + Cz) + D
D - на пальцах понятно))
где x y z - координаты вектора поворота, так?

а где A B C что?


1. матрица есть
2. всмысле перемножить все элементы на -1 или трансформировать ее в единичную?
3. да это так и происходит
4. я делаю без нативной Matrix3D.
5. ээм да я их и так получаю.

просто мне нужно сделать Z-отсечение. Т.к. если кака-я то из точек уходит за пределы камеры она должна проецироваться на плоскость камеры иначе будут страшные глюки.
Когда использовал стандартную камеру, то если координата Z точки превышала 0 то для проекции я использовал точку -1 и все было нормально и работало на ура.

Но как только сделал произвольную камеру - это здесь уже не прокатывает т.к. точки я не перемещаю, а перемещаю камеру => координата z любой точки остается прежней - но перемещается камера - так вот нужно узнать расстояние от точки до этой плоскости камеры, если оно меньше 0 тогда проецировать на плоскость камеры а не за ее пределы - собственно говоря и есть z-отсечение... (думаю что это так и есть))

вот...

gloomyBrain 04.03.2010 18:48

Инвертировать матрицу - это не умножить на -1
Цитата:

так вот нужно узнать расстояние от точки до этой плоскости камеры
и в чем проблема? если z точки > 0 - рисуем, если нет - не рисуем. Имеется ввиду точка, уже умноженная на инвертированную матрицу камеры

ABC - это величина по XYZ соответственно. То есть вектор (10, 21, 32) - это (10X + 21Y + 32Z)

gr_crd 04.03.2010 18:58

Цитата:

Имеется ввиду точка, уже умноженная на инвертированную матрицу камеры
ааа блин это же просто все уже и так почти готово)) какже сразу не дошло...
биг спс!


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

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