Лекция 6::Задача 0
- Forums:
Spherical environment
Да се реализира сферичен заден план, зададен чрез текстура. Готови текстури можете да намерите в google, например, може да ползвате тази. Естествено, първо трябва да я превърнете в .BMP формат и да я сложите във data/ директорията на fmiray. След което, създайте наследник SphericalEnvironment на абстрактния клас Environment и реализирайте getEnvironment() метода, като в него вземете сферичните координати на вектора Dir, и, чрез подходящо скалиране, за да влезнат в обхвата [0,0]..[W,H] (където W и H са размерите на картинката), вземете цвета от Bitmap текстурата (ползвайте метода getPixel на Bitmap). Вероятно ще трябва да смените знака на dir.y (по подобие на CubemapEnvironment), с цел небето все пак да ни се пада отгоре :). Крайният резултат трябва да изглежда нещо такова: пример.
Заб. по време на разработката, изключете glossiness-а на сферата (т.е. сложете параметъра да е 1, а не 0.96). Така ще си спестите чакането по време на рендериране.
Comments
Не мога да компилирам.
Използвам Dev-cpp. В момента не мога да компилрам програмата.
Като компилирам ми дава:
Permission denied
ld returned 1 exit status
D:\Evgeni\3D\fmiray\HW6\Makefile.win [Build Error] [fmiray.exe] Error 1
Някакви идеи?
EDIT: Оправих се. Просто бях забравил да затворя прозореца, като компилирах предишния път. Ще оставя поста тук, в случай че някой срещне подобен проблем.
P.S. Като (ако) направя тази задача, мога ли да се заема с някоя от другите групи (1-ва да речем) и ще получа ли някакви точки, ако успея да я реша?
Можеш да ги направиш за
Можеш да ги направиш за собствено удоволствие (особено ако решиш да си поиграеш да направиш някоя идейна и красива сцена с тях, т.е. да си пуснеш въображението на воля, и да участваш в Best of homeworks), но точките за домашно са фиксирани, т.е. макс 4.
Имам проблем със задачата. На
Имам проблем със задачата. На мен обкръжението ми излиза прекалено "квадратно" (всъщност "кубично"). Пратих кода на вашата поща, а ето и снимка: http://i292.photobucket.com/albums/mm2/evgenidb/SCR.jpg
Ако може - помогнете.
Нещо не ми стана ясна
Нещо не ми стана ясна връзката между U, V и сферичните координати. Примерно при зададени x,y,z (от dir), мога да намеря rho, phi и theta, но после как да намеря U,V ? Или може би съм тръгнал в грешна посока (формула)...
Изнамерих една друга формула, която ползва само размерите на картинката и координатите на вектора, но с нея пък се получава "разтягане" на текстурата по y-координатата.
Еdit: също така пробвах и да взема U,V както в Sphere геометрията, но пък там ми се получава сякаш обектите са "под" сферата - в топката се вижда отражения на цялата текстура, но то е сякаш високо над обектите, а зад тях се вижда половин черен екран и горната част на екрана вече е част от текстурата.
Ами връзката е следната
Ами връзката е следната (нямаш 3 ъгъла -- само два са!):
ако си представиш точката (x, y, z) зададена от dir (което е точка върху единичната сфера, защото dir е нормиран), то теб те интересуват "географските" координати на тази точка (тоест като географска дължина и географска ширина). Тези координати после ги ползваш за да вземеш цвета от правоъгълна "географска" карта, която е текстурата. Проблемът е само в това, че при трансформирането на координатите до сферични, u и v ще са ти в някакви граници (примерно от -PI до PI), и целта на задачката е да измислиш подходящо отместване и скалиране на тези координати, че да ги вкараш в границите [0..W) и [0..H), където WxH е размера на картинката, която ползваме за сферична текстура.
Погледни и слайдовете за UV координати в пета лекция. Описаното там просто трябва да го приложите за конкретната задача.