Преобразование 3D координат в 2D координаты
Пожалуйста подскажите формулы преобразования 3D координат в 2D координаты. Заранее благодарен!
Цитата: _Taurus_
Пожалуйста подскажите формулы преобразования 3D координат в 2D координаты. Заранее благодарен!
Зачем же формулы? Есть готовые решения. По идее в институте проходят афинные преобразования в пространстве.
http://foxweb.net.ru/files/?cat=8§ion=7
Спасибо за ответ. Но мне нужны именно сами формулы. :(
Цитата: _Taurus_
Спасибо за ответ. Но мне нужны именно сами формулы. :(
Сарказма не понял, ибо формулы записаны в исходниках.
Код на скачивание 2dax-nmz8
А поиск не работает?
Цитата: _Taurus_
Пожалуйста подскажите формулы преобразования 3D координат в 2D координаты. Заранее благодарен!
Первый раз о таких слышу? :) О чем идет речь, о проекции? Сформулируйте вопрос в более развернутом виде - что вы подразумеваете под преобразованием 3D->2D.
Есть правда одни, но это не то:
X = X/Z
Y = Y/Z
Может я не ТАМ или не ТАК ищу???
Если честно, формул таких и не встречал, а если бы встретил, то представляю что это за монстр будет, если учитывать смещение, поворот, масштабирование, проекцию и т.д. :)
Эти формулы конечно можно вывести в явном виде, но зачем?
Для этого существует замечательная вещь - матричная алгебра. Базовых матриц преобразований - по пальцам пересчитать, перемножая их в определенном порядке получаете нужный результат.
Нужно сделать проекцию - перемножаем на матрицу проекции, поворот - на матрицу поворота...
Когда я сам в школе решил изучить 3D-графику, то начинал с этого
А насчет матриц, попробую. В принципе это оно. Просто не очень хочется выводить эти формулы (Долгое и кропотливое занятие). Думал может кто знает... :) Спасибо что проявили интерес.
x=x0-(x0-x)*m
y=y0-(y0-y)*m/2
z задается через y.
m - коэффициент масштаба:
m1 = (Yконечное-Yначальное)/высота_рабочей_области
m2 = (Хконечное-Хначальное)/ширина_рабочей_области
m = 1/max(m1,m2)
В итоге получается диметрия.
Да, еще, я месяца 2-3 назад задавала этот вопрос на этом форуме, либо в разделе Графика, либо в разделе Microsoft Visuаl C++. Мне ответили, поищи еще там.
f(z) = (z1 - z2) / (z1 - z);
x' = x * f(z);
y' = y * f(z);
z' = z - z2.
где (x,y,z) - входные координаты, (x',y',z') - выходные координаты. z1(const) - z-координата точки наблюдателя; z2(const) - z-координата плоскости проецирования.
Т.к. плоскость проецирования в нашем случае - экран, то она может принимать значение 0.
Затрудняюсь ответить... на экране получается изображение, которое получилось бы, если бы мы строили изометрию на листке бумаги по всем правилам. Что касается точки налюдателя и прочих заморочек, я для этого использую OpenGL
Например, эти формулы хорошо работают в моем графическом движке - геометрия объектов в аспекте перспективных преобразований получается довольно неплохая.
на досуге изучу твои формулы, посмотрю, что получится
В книге «Введение в программирование трехмерных игр с DirectX 9.0» есть целая глава посвященная этой теме: "Выбор объектов". Но там чегото както сложно описывается, с первого раза не понятно, но с другой стороны сорс код есть. Книга есть много где в сетке.
думаю, автор уже нашел ответ, но просто ссылка 5 или 6-ая в гугле...
сам случайно зашел, давно не прогал графику, а тут вспомнить понадобилось... кхм, кароче по теме:
screenX = xSize/2 + xSize/2 * a/c
screenY = ySize/2 - ySize/2 * b/c
В случае стандартной камеры переход от обычной системы координат к системе координат камеры очевиден:
a = x / (xSize/2)
b = y / (ySize/2)
c = (z + dist) / dist
это отсюда http://www.enlight.ru/faq3d/
а вообще советую начать с изучения ассемблера, если не поймете его, либо этот фак - графика не ваше призвание
если все же не хочется особо понимать, а что-нибудь красивое сделать хочется, вам сюда: http://pmg.org.ru/nehe/index.html
дерзайте ;)
(ЗЫ еще и зарегался на скорую руку не так))))) )
Если на данном этапе жизненного пути Вас интересует какой-то ассемблер, это еще не значит, что все "должны с него начать". Не пишите глупостей.