3.8. OpenGL da ishlash usullari
Ushbu paragrafda biz OpenGL yordamida, to‘g‘ridan-to‘g‘ri quvvatlanishi kutubxona standartida mavjud bo‘lmagan qiziqarli vizual effektlarni yaratishni ko‘rib chiqamiz.
Pog‘onalilikni bartaraf qilish.
Pog‘onalilikni (antialiasing) bartaraf qilish masalasidan boshlaymiz. Pog‘onalilik effekti (aliasing) buferning chekli (qoida sifatida, katta bo‘lmagan) ruxsati hisobiga kadr buferida primitivlarni rasterizasiyalashdagi xatoliklar natijasida yuzaga keladi. Ushbu muammoga hal qilish bo‘yicha bir necha yondashushlar mavjud. Masalan, olingan tasvirga filtrlashni qo‘llash mumkin. Shuningdek ushbu effektni, har bir primitiv ko‘rinishini tekislash, rasterizasiyalash bosqichida bartaraf qilish mumkin. Bu yerda biz barcha sahnani butun holi uchun o‘xshash umumiy dalillar bilan bartaraf qilish imkonini beruvchi usulni ko‘rib chiqamiz.
Har bir kadr uchun sahnani bir necha marta chizish zarur, har bir o‘tishda kamera boshlang‘ich holatiga nisbatan ozroq suriladi. Kameralarning joylashishi, masalan, doira hosil qilish mumkin. Agarda kamerani surilishi nisbatan kam bo‘lsa, unda diskretizasiya xatolari har xil bo‘lishi mumkin, va, olingan tasvirni o‘rtacha ko‘rinishga olib kelguncha biz tekis tasvirni olamiz.
Kuzatuvchi joyini ko‘chirish osonroq, lekin undan oldin ko‘chirish joyini shunday hisoblash kerakki, ekranga uzatilgan koordinatalar qiymati, piksellar yarmidan oshmasligi lozim.
Barcha hosil bo‘lgan tasvirlarni to‘plovchi buferda 1/n koeffisienti bilan saqlaymiz, bu yerda n-har bir kadr uchun o‘tish yo‘laklari soni. Bunday yo‘laklar qancha ko‘p bo‘lsa, unumdorlik shuncha pasayadi, lekin natija yaxshilanadi.
for(i=0; i/* odatda samples_count 5 dan 10 gacha bo‘lgan chegarada yotadi */
{
ShiftCamera(i); /* kamerani ko‘chiramiz */
RenderScene();
if (i==0)
/* birinchi iteratsiyada tasvirni yuklaymiz */
glAccum(GL_LOAD,1/(float)samples_count);
else
/* avval mavjud bo‘lganlarga qo‘shamiz */
glAccum(GL_ACCUM,1/(float)samples_count);
}
/*Olingan natijani orqaga boshlang‘ich buferga yozamiz */
glAccum(GL_RETURN,1.0);
Shuni aytish joizki, barcha sahna uchun pog‘onalilikni bartaraf qilish, qoida sifatida vizuallashtirish unumdorligining pasayishiga jiddiy ta’siri bilan bog‘liq. Negaki, har bir sahna bir necha marotaba chiziladi. Zamonaviy tezlashtiruvchilar odatda tasvir resamplingi deb ataluvchiga asoslangan boshqa usullarni apparatli amalga oshiradi.
Do'stlaringiz bilan baham: |