есть двумерная картинка обозначаем оси 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 — по вертикали).
Здравствуйте, 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.
Здравствуйте, piAnd, Вы писали:
A>Вот в этой системе двух ур-ий выделены неизвестные, которых 3-и штуки => задача имеет оо число решений. Чтоб решить надо знать хотябы одну 3D переменную x, y или z.
В подтверждение сказанному добавлю: в DirectX, когда ставится задача преобразования координат 2D -> 3D (например, при клике мышкой), вычисляется луч и список полигонов, которые он пересекает. Т.е. луч — это максимум что можно получить.
Здравствуйте, adders, Вы писали:
A>есть двумерная картинка обозначаем оси X,Y на картинке нарисоваа плоскость. известны все 4 точки этой плоскости. A>мне необходимо преобразовать ее в обьемную плоскость. т.е. добавить еще одну координату Z — в глубину.
Давайте для устранения "разрухи в головах" начнём сначала.
Преобразование трёхмерных координат в плоскость экрана делается (по крайней мере в OpenGL) матрицей проекции. То странное преобразование, которое вы написали, правильного проекционного преобразования в общем случае не произведёт, а скорее всего приведёт к сложноотлавливаемым глюкам и некорректности отображения.
Проекции наиболее часто бывают ортогональными или перспективными.
Ортографическая матрица проекции имеет достаточно простой вид
Ответ на вопрос, сможете ли вы обратить проекцию, зависит от наличия обратной матрицы у конкретного вида производимого вами проекционного преобразования,
Рекомендуемая литература (в частности, там можно найти и формулы для вычисления коэффициентов): 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>Где коэффициенты вычисляются из большого количества параметров — расстояние до точки, проецируемый объём и т.д.
T>Перспективная проекция сложнее, там матрица примерно такая:
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. а если я знаю все размеры знаю что плоскость квадратной формы.
можно ведь смоделировать плоскость. вот как это можно сделать.
T>Ответ на вопрос, сможете ли вы обратить проекцию, зависит от наличия обратной матрицы у конкретного вида производимого вами проекционного преобразования,
А если вопрос поставить так: Мы имеем 2х мерную проекцию полигона (или скажем квадрангла) на экран, т.е. есть уже четыре 2D координаты, причём мы знаем Z величину каждой из 2D координат. Остаётся только построить выражение, по которому в любой точки (X,Y) можно было быстро найти значение Z для данного полигона. Вот это как можно сделать красиво?
D>А если вопрос поставить так: Мы имеем 2х мерную проекцию полигона (или скажем квадрангла) на экран, т.е. есть уже четыре 2D координаты, причём мы знаем Z величину каждой из 2D координат. Остаётся только построить выражение, по которому в любой точки (X,Y) можно было быстро найти значение Z для данного полигона. Вот это как можно сделать красиво?
Знаем экранные координаты углов — знаем лучи из глаза к ним.
Знаем их Z — находим по лучу остальные координаты в пространстве.
Дальше можно найти координаты всех внутренних точек полигона.
Знаем координаты углов в пространстве — можем координаты любой точки нашего четырехугольника представить как сумму координат одного угла и линейной комбинации двух векторов, ведущих из этого угла в сосдение вершины. Решаем систему уравнений, все находится.