|
Математика Методы математического моделлирования, программирование математических концепций, роль математики в создании игр |
14.04.2012, 22:17
|
#1
|
AnyKey`щик
Регистрация: 30.12.2011
Сообщений: 12
Написано одно полезное сообщение
|
Перспективная (центральная) проекция
С математикой у меня туго, но я прикладываю максимум усилий, чтобы ее понять
Возник вопрос по формуле перспективной проекции, а именно:
scrX = (objXCoord * focalLength) / objZCoord
scrY = (objYCoord * focalLength) / objZCoord
|
Ссылаясь на свойство подобия треугольников, авторы чудесным образом опускают все объяснения. Тогда я решил, что все тайное становится явным и начал изучать подобие треугольников из школьного курса. С доказательством признаков подобия треугольников вопросов не возникло.
Но в школьном курсе говорится о коэффициенте подобия (обозначается через K), тогда следует, что форма записи должна выглядеть следующим образом (что на мой взгляд логичнее):
// находим коэффициент подобия
k = focalLength / objZCoord
// умножаем каждую координату объекта на коэффициент подобия
scrX = objXCoord * k
scrY = objYCoord * k
|
Некоторые источники вовсе предлагают делить все на координату Z:
scrY / focalLength = objYCoord / objZCoord
|
Что в тригонометрических терминах обозначается как тангенс угла (отношение катетов). Вот именно это меня совсем запутало. Я решил, что не постесняюсь спросить, как же все-таки авторы получили ее в таком виде?
|
(Offline)
|
|
15.04.2012, 00:29
|
#2
|
Мастер
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений (для 790 пользователей)
|
Ответ: Перспективная (центральная) проекция
у тебя два треугольника подобны. (большой и маленький) Отношение двух сторон маленького - scrY / focalLength равно отношению соответственных сходственных двух сторон большого objYCoord / objZCoord
UPD:
scrY = y_screen
focalLength = dist
objYCoord = y_world
objZCoord = z_world
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
Последний раз редактировалось Igor, 15.04.2012 в 12:25.
|
(Offline)
|
|
15.04.2012, 11:45
|
#3
|
AnyKey`щик
Регистрация: 30.12.2011
Сообщений: 12
Написано одно полезное сообщение
|
Ответ: Перспективная (центральная) проекция
Когда мы говорим о подобие треугольников, мы имеем ввиду отношение сходственных сторон, то есть:
scrY / objYCoord = focalLength / objZCoord
|
а эта запись
scrY / focalLength = objYCoord / objZCoord
|
говорит лишь о том, что тангенсы углов равны. Я понимаю, что зная тангенс (котангенс) угла можно легко вычислить длину катета, но тогда с самого начала следовало говорить об этом
Нашел интересную статью по этому поводу.
|
(Offline)
|
|
15.04.2012, 12:16
|
#4
|
Мастер
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений (для 790 пользователей)
|
Ответ: Перспективная (центральная) проекция
А тебе не кажется что прямоугольные треугольники, у которых тангенсы углов равны, подобны?
Теорема с подобием треугольников более общая, поэтому я доказал через неё.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
|
(Offline)
|
|
15.04.2012, 12:30
|
#5
|
AnyKey`щик
Регистрация: 30.12.2011
Сообщений: 12
Написано одно полезное сообщение
|
Ответ: Перспективная (центральная) проекция
Теперь мне понятно. Это лишь два разных подхода к решению данной задачи (один через коэффициент подобия, другой через тангенс угла подобных треугольников).
|
(Offline)
|
|
18.04.2012, 14:52
|
#6
|
Легенда
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений (для 5,072 пользователей)
|
Ответ: Перспективная (центральная) проекция
Райкастинг делаешь?
Если да, то у меня есть один исходник. Правда на блице.
__________________
Ибо как сказал Бгдн:
|
(Offline)
|
|
18.04.2012, 21:37
|
#7
|
AnyKey`щик
Регистрация: 30.12.2011
Сообщений: 12
Написано одно полезное сообщение
|
Ответ: Перспективная (центральная) проекция
Сообщение от Gector
Райкастинг делаешь?
|
В точку Пишу на С++ в связке с OpenGL. Остановился на отрисовке пола и потолка, никак алгоритм не придумаю. Подумал, что Mode7 мне поможет, но пока все с трудом дается. Выкладывай, будет очень кстати
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
19.04.2012, 22:46
|
#8
|
Мастер
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений (для 790 пользователей)
|
Ответ: Перспективная (центральная) проекция
почитай про Wolfenstein
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
|
(Offline)
|
|
19.04.2012, 23:48
|
#9
|
AnyKey`щик
Регистрация: 30.12.2011
Сообщений: 12
Написано одно полезное сообщение
|
Ответ: Перспективная (центральная) проекция
Почитал и уже очень давно. Кстати, пол и потолок в этой игре не рендерился.
|
(Offline)
|
|
20.04.2012, 01:14
|
#10
|
Мастер
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений (для 790 пользователей)
|
Ответ: Перспективная (центральная) проекция
да) Я делал 3д на мидлет паскале, можешь код посмотреть
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
|
(Offline)
|
|
12.05.2012, 22:30
|
#11
|
AnyKey`щик
Регистрация: 30.12.2011
Сообщений: 12
Написано одно полезное сообщение
|
Ответ: Перспективная (центральная) проекция
Наткнулся на очередной способ построения проекции. На этот раз формула выводится согласно теоремы Фалеса:
вписанный угол, опирающийся на диаметр окружности, является прямым.
|
А далее все та же формула:
scale = focalLength / focalLength + objZCoord
|
Найдутся такие, кто смог разобраться?
|
(Offline)
|
|
17.05.2012, 22:40
|
#12
|
Мастер
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений (для 790 пользователей)
|
Ответ: Перспективная (центральная) проекция
Это статья по немного другой теме - о том, как по готовому изображению посчитать расстояние от объекта до камеры. Приводится в пример компьютерная игра, потому что в ней параллельные линии действительно параллельны, а в жизни - не очень и камера не идеальная
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
|
(Offline)
|
|
20.05.2012, 11:27
|
#13
|
AnyKey`щик
Регистрация: 30.12.2011
Сообщений: 12
Написано одно полезное сообщение
|
Ответ: Перспективная (центральная) проекция
Да, я знаю о чем эта статья, я лишь указал источник =)
Имеенно о теореме Фалеса упоминается в некоторых англоязычных источниках как о способе построении проекции. В википедии сказано, что в зарубежной литературе часто под этой теоремой понимается частный случай вписанных треугольников, когда прямой угол лежит на радиусе окружности. Хотя, более общую теорему о секущих прямых, на мой взгляд, применить в этом случае гораздо проще.
|
(Offline)
|
|
29.05.2012, 19:10
|
#14
|
Легенда
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений (для 5,072 пользователей)
|
Ответ: Перспективная (центральная) проекция
Сообщение от unself
В точку Пишу на С++ в связке с OpenGL. Остановился на отрисовке пола и потолка, никак алгоритм не придумаю. Подумал, что Mode7 мне поможет, но пока все с трудом дается. Выкладывай, будет очень кстати
|
im so slowww только сейчас заглянул.
Вот тема:
http://forum.boolean.name/showthread.php?t=16685
__________________
Ибо как сказал Бгдн:
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:31.
|