Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Igors от Январь 06, 2012, 14:58



Название: Пиксельные координаты для зеркала [решено]
Отправлено: Igors от Январь 06, 2012, 14:58
Добрый день

Может это совсем просто и я не могу сообразить, а может это и не имеет решения. В общем - растерялся  :)

Есть имедж в котором известны 3D координаты x, y, z для каждого пикселя. Расчеты выполняются по пикселям, напр: взяли матрицу пикселей 4х4, обработали и.т.д. При этом конечно 3D координаты учитываются, напр расстояние между 2 соседними пикселями "на горизонте" может быть во много раз больше чем для 2 на переднем плане (следствие перспективы).

Все хорошо, но вот появляется зеркало. Для каждого пикселя зеркала известна 3D точка (x, y, z) которую зеркало отразит. В общем случае она может быть где угодно, видимой напрямую или нет, зеркало может быть как угодно выпуклым или вогнутым.  

Хотелось бы иметь "пиксельные координаты" для отраженных точек - чтобы использовать максимально имеющиеся расчеты для прямой видимости. Но как такие "пиксельные координаты" получить?

Спасибо


Название: Re: Пиксельные координаты для зеркала
Отправлено: popper от Январь 07, 2012, 11:04
Для каждого пикселя зеркала известна 3D точка (x, y, z) которую зеркало отразит.

Т.е. речь не идет о физическом зеркале, каждый "пиксель" которого отражает все точки полупространства по закону "угол падения равен углу отражения"?


Название: Re: Пиксельные координаты для зеркала
Отправлено: Igors от Январь 07, 2012, 15:40
Т.е. речь не идет о физическом зеркале, каждый "пиксель" которого отражает все точки полупространства по закону "угол падения равен углу отражения"?
Используется типовая модель

- один пиксель зеркала (сам видимый напрямую) отражает одну 3D точку которая может находиться где угодно, в том числе и бесконечно далеко (небо)

- отражаемая точка находится по правилу "угол падения равен углу отражения"


Название: Re: Пиксельные координаты для зеркала
Отправлено: popper от Январь 07, 2012, 18:38
Исходя из заданной формы поверхности зеркала в каждой точке (пикселе) зеркала можно рассчитать вектор нормали N. Также для каждого пикселя зеркала известен вектор V на ту 3D точку, которую он отражает. Затем можно найти угол альфа между V и N (в диапазоне 0...90 градусов). Зеркальная точка лежит в плоскости этих векторов под углом 180-альфа относительно линии нормали. Расстояние до зеркальной точки равно длине вектора V.


Название: Re: Пиксельные координаты для зеркала
Отправлено: Igors от Январь 07, 2012, 19:41
Исходя из заданной формы поверхности зеркала в каждой точке (пикселе) зеркала можно рассчитать вектор нормали N. Также для каждого пикселя зеркала известен вектор V на ту 3D точку, которую он отражает. Затем можно найти угол альфа между V и N (в диапазоне 0...90 градусов). Зеркальная точка лежит в плоскости этих векторов под углом 180-альфа относительно линии нормали. Расстояние до зеркальной точки равно длине вектора V.
Нормали к поверхности N всегда/везде определены. Также нет проблем с нахождением отражаемой точки (точек). Вопрос в том что делать со многими частями расчета которые используют пиксели (т.е. 2D). Пример:

- берем пиксель (строка столбец имеджа). Соседние пиксели на руках - находим расстояния до них уже в 3D. Получили R (радиус захвата точки) и.т.л. А вот как мне получить тот же радиус в "зазеркалье" ?


Название: Re: Пиксельные координаты для зеркала
Отправлено: popper от Январь 07, 2012, 22:45
но зеркальное отражение плоской фигуры в зеркале, поверхность которого не плоская, дает не плоскую фигуру.


Название: Re: Пиксельные координаты для зеркала
Отправлено: Igors от Январь 09, 2012, 14:14
Почитал теорию, посмотрел open-sources. Есть стандартное решение этой проблемы (хотя легче от этого не становится :))