Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Математика

Математика Методы математического моделлирования, программирование математических концепций, роль математики в создании игр

Ответ
 
Опции темы
Старый 14.04.2012, 22:17   #1
unself
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
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 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
unself
AnyKey`щик
 
Регистрация: 30.12.2011
Сообщений: 12
Написано одно полезное сообщение
Ответ: Перспективная (центральная) проекция

Когда мы говорим о подобие треугольников, мы имеем ввиду отношение сходственных сторон, то есть:
scrY / objYCoord = focalLength / objZCoord
а эта запись
scrY / focalLength = objYCoord / objZCoord
говорит лишь о том, что тангенсы углов равны. Я понимаю, что зная тангенс (котангенс) угла можно легко вычислить длину катета, но тогда с самого начала следовало говорить об этом

Нашел интересную статью по этому поводу.
(Offline)
 
Ответить с цитированием
Старый 15.04.2012, 12:16   #4
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: Перспективная (центральная) проекция

А тебе не кажется что прямоугольные треугольники, у которых тангенсы углов равны, подобны?
Теорема с подобием треугольников более общая, поэтому я доказал через неё.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 15.04.2012, 12:30   #5
unself
AnyKey`щик
 
Регистрация: 30.12.2011
Сообщений: 12
Написано одно полезное сообщение
Ответ: Перспективная (центральная) проекция

Теперь мне понятно. Это лишь два разных подхода к решению данной задачи (один через коэффициент подобия, другой через тангенс угла подобных треугольников).
(Offline)
 
Ответить с цитированием
Старый 18.04.2012, 14:52   #6
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: Перспективная (центральная) проекция

Райкастинг делаешь?
Если да, то у меня есть один исходник. Правда на блице.
__________________
Ибо как сказал Бгдн:
(Offline)
 
Ответить с цитированием
Старый 18.04.2012, 21:37   #7
unself
AnyKey`щик
 
Регистрация: 30.12.2011
Сообщений: 12
Написано одно полезное сообщение
Ответ: Перспективная (центральная) проекция

Сообщение от Gector Посмотреть сообщение
Райкастинг делаешь?
В точку Пишу на С++ в связке с OpenGL. Остановился на отрисовке пола и потолка, никак алгоритм не придумаю. Подумал, что Mode7 мне поможет, но пока все с трудом дается. Выкладывай, будет очень кстати
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (29.05.2012)
Старый 19.04.2012, 22:46   #8
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: Перспективная (центральная) проекция

почитай про Wolfenstein
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 19.04.2012, 23:48   #9
unself
AnyKey`щик
 
Регистрация: 30.12.2011
Сообщений: 12
Написано одно полезное сообщение
Ответ: Перспективная (центральная) проекция

Почитал и уже очень давно. Кстати, пол и потолок в этой игре не рендерился.
(Offline)
 
Ответить с цитированием
Старый 20.04.2012, 01:14   #10
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: Перспективная (центральная) проекция

да) Я делал на мидлет паскале, можешь код посмотреть
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 12.05.2012, 22:30   #11
unself
AnyKey`щик
 
Регистрация: 30.12.2011
Сообщений: 12
Написано одно полезное сообщение
Ответ: Перспективная (центральная) проекция

Наткнулся на очередной способ построения проекции. На этот раз формула выводится согласно теоремы Фалеса:
вписанный угол, опирающийся на диаметр окружности, является прямым.
А далее все та же формула:
scale = focalLength / focalLength + objZCoord
Найдутся такие, кто смог разобраться?
(Offline)
 
Ответить с цитированием
Старый 17.05.2012, 22:40   #12
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: Перспективная (центральная) проекция

Это статья по немного другой теме - о том, как по готовому изображению посчитать расстояние от объекта до камеры. Приводится в пример компьютерная игра, потому что в ней параллельные линии действительно параллельны, а в жизни - не очень и камера не идеальная
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 20.05.2012, 11:27   #13
unself
AnyKey`щик
 
Регистрация: 30.12.2011
Сообщений: 12
Написано одно полезное сообщение
Ответ: Перспективная (центральная) проекция

Да, я знаю о чем эта статья, я лишь указал источник =)
Имеенно о теореме Фалеса упоминается в некоторых англоязычных источниках как о способе построении проекции. В википедии сказано, что в зарубежной литературе часто под этой теоремой понимается частный случай вписанных треугольников, когда прямой угол лежит на радиусе окружности. Хотя, более общую теорему о секущих прямых, на мой взгляд, применить в этом случае гораздо проще.
(Offline)
 
Ответить с цитированием
Старый 29.05.2012, 19:10   #14
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: Перспективная (центральная) проекция

Сообщение от unself Посмотреть сообщение
В точку Пишу на С++ в связке с OpenGL. Остановился на отрисовке пола и потолка, никак алгоритм не придумаю. Подумал, что Mode7 мне поможет, но пока все с трудом дается. Выкладывай, будет очень кстати
im so slowww только сейчас заглянул.

Вот тема:
http://forum.boolean.name/showthread.php?t=16685
__________________
Ибо как сказал Бгдн:
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 15:44.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com