преобразование в трехмерные координаты
От: adders Россия  
Дата: 01.02.07 21:52
Оценка:
есть двумерная картинка обозначаем оси X,Y на картинке нарисоваа плоскость. известны все 4 точки этой плоскости.
мне необходимо преобразовать ее в обьемную плоскость. т.е. добавить еще одну координату Z — в глубину.


есть обратное преобразование из трехмерных координат можно спроецирвоать на плоскость экрана. в этом случае преобрахование осуществляется по формулам

sx = xSize/2+x*dist/(z+dist),
sy = ySize/2-y*dist/(z+dist).

Здесь используются обозначения:

Размер экрана — xSize на ySize пикселов.
sx, sy координаты проекции точки на экране
x, y, z 3D координаты точки,
dist расстояние от камеры (она находится в точке (0,0,-dist)) до начала координат,
u, v координаты в текстуре (u — по горизонтали, v — по вертикали).
Re: преобразование в трехмерные координаты
От: piAnd Россия  
Дата: 01.02.07 23:59
Оценка:
Здравствуйте, adders, Вы писали:

A>есть двумерная картинка обозначаем оси X,Y на картинке нарисоваа плоскость. известны все 4 точки этой плоскости.

A>мне необходимо преобразовать ее в обьемную плоскость. т.е. добавить еще одну координату Z — в глубину.
Если правильно понял, даны 4 центральные проекции с координатами sx, sy (заданы в плоскости экрана), а соответствующие им 4 точки в трехмерном пространстве не заданы.
A>sx = xSize/2+x*dist/(z+dist),
A>sy = ySize/2-y*dist/(z+dist).
Вот в этой системе двух ур-ий выделены неизвестные, которых 3-и штуки => задача имеет оо число решений. Чтоб решить надо знать хотябы одну 3D переменную x, y или z.
Re[2]: преобразование в трехмерные координаты
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 02.02.07 06:25
Оценка:
Здравствуйте, piAnd, Вы писали:

A>Вот в этой системе двух ур-ий выделены неизвестные, которых 3-и штуки => задача имеет оо число решений. Чтоб решить надо знать хотябы одну 3D переменную x, y или z.


В подтверждение сказанному добавлю: в DirectX, когда ставится задача преобразования координат 2D -> 3D (например, при клике мышкой), вычисляется луч и список полигонов, которые он пересекает. Т.е. луч — это максимум что можно получить.
Re: преобразование в трехмерные координаты
От: Tilir Россия http://tilir.livejournal.com
Дата: 02.02.07 09:10
Оценка:
Здравствуйте, adders, Вы писали:

A>есть двумерная картинка обозначаем оси X,Y на картинке нарисоваа плоскость. известны все 4 точки этой плоскости.

A>мне необходимо преобразовать ее в обьемную плоскость. т.е. добавить еще одну координату Z — в глубину.

Давайте для устранения "разрухи в головах" начнём сначала.

Преобразование трёхмерных координат в плоскость экрана делается (по крайней мере в OpenGL) матрицей проекции. То странное преобразование, которое вы написали, правильного проекционного преобразования в общем случае не произведёт, а скорее всего приведёт к сложноотлавливаемым глюкам и некорректности отображения.

Проекции наиболее часто бывают ортогональными или перспективными.

Ортографическая матрица проекции имеет достаточно простой вид


| f1 0  0  0  |
| 0  f2 0  0  |
| 0  0  f3 0  |
| c1 c2 c3 1  |


Где коэффициенты вычисляются из большого количества параметров — расстояние до точки, проецируемый объём и т.д.

Перспективная проекция сложнее, там матрица примерно такая:


| f1 0  0  0  |
| 0  f2 0  0  |
| c1 c2 c3 -1 |
| 0  0  f3 0  |


Ответ на вопрос, сможете ли вы обратить проекцию, зависит от наличия обратной матрицы у конкретного вида производимого вами проекционного преобразования,

Рекомендуемая литература (в частности, там можно найти и формулы для вычисления коэффициентов): Muska and Lipman Premier-Trade "Mathematics for Game Developers", 2004
Re[2]: преобразование в трехмерные координаты
От: Аноним  
Дата: 04.02.07 19:55
Оценка:
Здравствуйте, Tilir, Вы писали:

T>Здравствуйте, adders, Вы писали:


A>>есть двумерная картинка обозначаем оси X,Y на картинке нарисоваа плоскость. известны все 4 точки этой плоскости.

A>>мне необходимо преобразовать ее в обьемную плоскость. т.е. добавить еще одну координату Z — в глубину.

T>Давайте для устранения "разрухи в головах" начнём сначала.


T>Преобразование трёхмерных координат в плоскость экрана делается (по крайней мере в OpenGL) матрицей проекции. То странное преобразование, которое вы написали, правильного проекционного преобразования в общем случае не произведёт, а скорее всего приведёт к сложноотлавливаемым глюкам и некорректности отображения.


T>Проекции наиболее часто бывают ортогональными или перспективными.


T>Ортографическая матрица проекции имеет достаточно простой вид


T>

T>| f1 0  0  0  |
T>| 0  f2 0  0  |
T>| 0  0  f3 0  |
T>| c1 c2 c3 1  |

T>


T>Где коэффициенты вычисляются из большого количества параметров — расстояние до точки, проецируемый объём и т.д.


T>Перспективная проекция сложнее, там матрица примерно такая:


T>

T>| f1 0  0  0  |
T>| 0  f2 0  0  |
T>| c1 c2 c3 -1 |
T>| 0  0  f3 0  |

T>


T>Ответ на вопрос, сможете ли вы обратить проекцию, зависит от наличия обратной матрицы у конкретного вида производимого вами проекционного преобразования,


T>Рекомендуемая литература (в частности, там можно найти и формулы для вычисления коэффициентов): Muska and Lipman Premier-Trade "Mathematics for Game Developers", 2004

спасибо. за информацию. но мне кажется я не ясно спросил совета решения задачи
Вы предлагаете мне преобразовывать из трехмерных координат в трехмерные. разные перспективные преобразования. но

вопрос вот в чем.::

как можно преобразовать из обычной двумерного изображения. к примеру нарисована в перспективе плоскость (эта плоскость похожа на параллелограмм). плоскость в трехмерном изображении.
Re[3]: преобразование в трехмерные координаты
От: Аноним  
Дата: 04.02.07 20:03
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Здравствуйте, piAnd, Вы писали:


A>>Вот в этой системе двух ур-ий выделены неизвестные, которых 3-и штуки => задача имеет оо число решений. Чтоб решить надо знать хотябы одну 3D переменную x, y или z.


N>В подтверждение сказанному добавлю: в DirectX, когда ставится задача преобразования координат 2D -> 3D (например, при клике мышкой), вычисляется луч и список полигонов, которые он пересекает. Т.е. луч — это максимум что можно получить.


спасибо за ответы.
хорошо.
т.е. вообще не возможно преобразовать плоскость из 2D -> 3D. а если я знаю все размеры знаю что плоскость квадратной формы.
можно ведь смоделировать плоскость. вот как это можно сделать.
Re[2]: преобразование в трехмерные координаты
От: Dimonka Верблюд  
Дата: 05.02.07 10:40
Оценка:
Здравствуйте, Tilir, Вы писали:


T>Перспективная проекция сложнее, там матрица примерно такая:



| f1 0  0  0  |
| 0  f2 0  0  |
| c1 c2 c3 -1 |
| 0  0  f3 0  |


T>Ответ на вопрос, сможете ли вы обратить проекцию, зависит от наличия обратной матрицы у конкретного вида производимого вами проекционного преобразования,


А если вопрос поставить так: Мы имеем 2х мерную проекцию полигона (или скажем квадрангла) на экран, т.е. есть уже четыре 2D координаты, причём мы знаем Z величину каждой из 2D координат. Остаётся только построить выражение, по которому в любой точки (X,Y) можно было быстро найти значение Z для данного полигона. Вот это как можно сделать красиво?
Re[3]: преобразование в трехмерные координаты
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 05.02.07 11:16
Оценка:
D>А если вопрос поставить так: Мы имеем 2х мерную проекцию полигона (или скажем квадрангла) на экран, т.е. есть уже четыре 2D координаты, причём мы знаем Z величину каждой из 2D координат. Остаётся только построить выражение, по которому в любой точки (X,Y) можно было быстро найти значение Z для данного полигона. Вот это как можно сделать красиво?

Знаем экранные координаты углов — знаем лучи из глаза к ним.
Знаем их Z — находим по лучу остальные координаты в пространстве.

Дальше можно найти координаты всех внутренних точек полигона.
Знаем координаты углов в пространстве — можем координаты любой точки нашего четырехугольника представить как сумму координат одного угла и линейной комбинации двух векторов, ведущих из этого угла в сосдение вершины. Решаем систему уравнений, все находится.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.