GL_DST_COLOR k=(Rd,Gd,Bd)
GL_ONE_MINUS_DST_COLOR k=(1,1,1,1)- (Rd,Gd,Bd,Ad)
GL_DST_ALPHA k=(Ad,Ad,Ad,Ad)
GL_DST_ONE_MINUS_ALPHA k=(1,1,1,1)-(Ad,Ad,Ad,Ad)
GL_SRC_COLOR k=(Rs,Gs,Bs)
GL_ONE_MINUS_SRC_COLOR k=(1,1,1,1)- (Rs,Gs,Bs,As)
Misol:
Shaffof obyektlarnining natijasini amalga oshirishni taqdim etamiz. Shaffoflik koeffisienti rangning alfa-qismi bilan beriladi. 1 – shaffof bo‘lmagan obyekt deylik, 0 mutlaqo shaffof, ya’ni ko‘rinmaydigan deb hisoblaymiz. Amalga oshirish uchun quyidagi kod xizmat qiladi:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_SRC_ONE_MINUS_ALPHA);
Masalan, yarim shaffof uchburchakni quyidagi ko‘rinishda berish mumkin:
glColor3f(1.0, 0.0, 0.0, 0.5);
glBegin(GL_TRIANGLES);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(1.0, 0.0, 0.0);
glVertex3f(1.0, 1.0, 0.0);
glEnd();
Agar sahnada bir-birini yopib turadigan bir qancha shaffof obyektlar bo‘lsa, aniq natijani faqatgina quyidagi shartlar bajarilgan hollarda kafolatlash mumkin:
Barcha shaffof obyektlar shaffof bo‘lmagan obyektlardan keyin chiqadi.
Obyektlar shaffof bo‘lib chiqishida chuqurlik qisqarishi bo‘yicha tartiblangan bo‘lishi kerak. Bu degani, kuzatuvdan uzoqlashganlar birinchi bo‘lib chiqa boshlaydi.
OpenGL da buyruqlarga kelish tartibiga qarab ishlov beriladi, shu sababli keltirilgan talablarni amalga oshirish uchun tegishli tartibda glVertex*() buyrug‘ini chaqirish va kerakli joyga qo‘yish yetarli, lekin bu ham umumiy holda noto‘g‘ri.
To‘plovchi bufer.
To‘plovchi bufer (accumulation buffer) – bu OpenGL kushimcha buferlaridan biri. Unda vizuallashtirilgan tasvirni aniqlash mumkin, maxsus piksel operatsiyalarini ishlatgan xolda yig‘in buferi har xil maxsus samarali ishlatganda ishlatilishida keng qo‘llaniladi.
Tasvir quyidagi buyruqni tanlash orqali buferdan olinadi:
void glReadBuffer (enum buf)
buf argumenti o‘qish uchun buferni aniqlaydi. buf qiymati GL_BACK, GL_FRONT larga teng bo‘lib, o‘qish uchun mos buferlarni aniqlaydi. Ekranlashtirilmagan buferni GL_BACK bosh piksellar sifatida beradi. GL_FRONT – natijaning joriy tarkibiy oynasi. Buyruq qiymatga ega bo‘ladi, agarda dublikatlangan (ikkinchi nusxa) buferizasiyasi bo‘lsa. Aks holda faqat bitta bufer ishlatiladi, chiqarish oynaga mos (jiddiy aytganda, OpenGL ga qo‘shimcha bir to‘plam buferi bor. Ular sterio tasvirda ishlatiladi, lekin biz ularni xozir ko‘rib chiqmaymiz).
To‘plovchi bufer qo‘shimcha rang buferi hisoblanadi. U ko‘rinish natijalari uchun to‘g‘ridan to‘g‘ri ishlatilmaydi, lekin ular rang buferlaridan biriga natijadan so‘ng qo‘shiladi. Quyida keltirilgan, har xil amallarni qo‘llab, buferda tasvirni yig‘ish mumkin.
Keyin hosil bo‘lgan tasvirni to‘plovchi buferdan bitta rang buferiga quyidagi buyruq yordamida yozuv bo‘yicha o‘tkazish mumkin.
void glDrawBuffer (enum buf)
buf qiymati glReadBuffer buyrug‘idagi mos argument qiymatiga o‘xshash.
To‘plovchi bufer bilan barcha amallar quyidagi buyruq bilan nazorat qilinadi
void glAccum (enum op,GLfloat value)
op argumenti piksellar ustida amallarni belgilaydi va quyidagi qiymatlarni qabul qiladi:
Do'stlaringiz bilan baham: |