GL_CONSTANT_ATTENUATION,
GL_LINEAR_ATTENUATION,
GL_QUADRATIC_ATTENUATION
params parametri manbadan uzoqlashtirilganda yorug‘lik intensivligini kamayishini aniqlaydigan uchta koeffisientdan bittasini beradi. Faqat manfiy bo‘lmagan qiymatlar o‘rinli. Agar manba yo‘naltirilmagan bo‘lsa, unda kamayish quyidagi summaga teskari proporsional:
attconstant+attlinear*d+ attquadratic *d2,
bu yerda d – yorug‘lik manbai va u yoritadigan uch orasidagi masofa, attconstant, attlinear i attquadratic mos ravishda GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION va GL_QUADRATIC_ATTENUATION konstantalari bilan berilgan parametrlarga teng. Shart qo‘yilmaganda parametrlar uchlik bilan beriladi (1, 0, 0) va yorug‘lik kamayishi sodir bo‘lmaydi.
Manba holati o‘zgarganda quyidagi omilni hisobga olish zarur: OpenGL da yorug‘lik manbalari ko‘p hollarda ko‘pburchaklar va nuqtalarga o‘xshagan obyektlar hisoblanadi. Ularga nisbatan OpenGL da koordinatalar qayta ishlanishining asosiy qoidalari o‘rinli, ya’ni fazodagi holatni tavsiflaydigan parametrlar joriy model-ko‘rinishli matritsa bilan obyekt o‘zgartirilayotganda, ya’ni OpenGL ning mos buyruqlari chaqirilganda almashtiriladi. Shunday qilib, yorug‘lik manbaini sahna obyekti yoki kamera bilan bir vaqtda o‘zgartirib, uni shu obyektga bog‘lash mumkin. Yoki aksincha boshqa obyektlar ko‘chayotganda, joyida qoladigan stasionar yorug‘lik manbaini tuzish mumkin.
Umumiy qoida quyida keltirilgan:
Agar yorug‘lik manbai holati virtual kamera holatini belgilashdan oldin glLight*() buyrug‘i bilan berilgan bo‘lsa, unda manba koordinatalari (0,0,0) kuzatish nuqtasida joylashgan deb hisoblanadi va shunga muvofiq yorug‘lik manbai holati kuzatuvchi holatiga nisbatan aniqlanadi.
Agar holat kamera holati va obyektning model-ko‘rinishli matritsasi almashtirishlari orasidagi belgilanish orqali o‘rnatilsa, unda u qo‘zg‘almas holatga keltiriladi, ya’ni bu holda yorug‘lik manbai holati eng yuqori koordinatalarda beriladi.
Yorug‘likdan foydalanish uchun dastlab mos rejim glEnable(GL_LIGHTNING) buyrug‘ini chaqirish orqali o‘rnatiladi, keyin esa kerakli manba glEnable(GL_LIGHTi) buyrug‘i bilan yoqiladi.
Yana bir bor e’tiborimizni shunga qaratishimiz kerakki, yorug‘lik o‘chirilganda uchning rangi glColor*() buyrug‘i bilan beriladigan joriy rangga teng. Yorug‘lik o‘chirilganda uchning rangi yorug‘lik manbalari, normallar va material to‘g‘risidagi ma’lumotlardan kelib chiqib hisoblanadi.
Yorug‘lik o‘chirilganda vizualizasiya tezroq amalga oshadi, lekin bu holda ilovaning o‘zi uchlarning ranglarini hisoblashi kerak bo‘ladi.
Do'stlaringiz bilan baham: |