Teksturani tayorlash.
Teksturadan foydalanish uchun, oldin xotiraga kerakli tasvirni joylashtirish va uni OpenGL ga uzatish kerak.
Grafikaviy ma’lumotlarni fayldan o‘qishni va ularni almashtirishini qo‘lda bajarish mumkin. Shu bilan birga GLAUX (undan foydalanish uchun qo‘shimcha ravishda glaux.lib ni bog‘lash kerak bo‘ladi) kutubxonasiga kiruvchi muhim amallarni o‘zi bajaradigan funksiyadan foydalanish mumkin. Bu funksiya
AUX_RGBImageRec* auxDIBImageLoad (const char *file)
bu yerda file – *.bmp yoki *.dib kengaytmali fayl nomi. Funksiya ko‘rsatkichni qayta ishlangan ma’lumotlar saqlanadigan xotira sohasiga qaytardi.
Xotirada tekstura obrazini hosil qilishda quyidagi talablarni hisobga olish kerak.
Birinchidan, teksturaning o‘lchamlari, ham gorizontal bo‘yicha, ham vertikal bo‘yicha o‘zida ikkining darajalarini aks ettirishi lozim. Bu talab teksturani tekstura xotirasida kompakt holda qo‘yilishini ko‘zda tutadi va uning samarali qo‘llanilishini ta’minlaydi. Faqat shunday teksturalar bilan ishlash noqulay, shuning uchun joylashtirilgandan keyin ularni almashtirish kerak. Tekstura o‘lchamlarini quyidagi buyruq yordamida o‘zgartirish mumkin:
void gluScaleImage (GLenum format, GLint widthin,
GL heightin, GLenum typein,
const void *datain,
GLint widthout,
GLint heightout, GLenum typeout,
void *dataout)
Format parametrining qiymati sifatida odatda ma’lumotlarni saqlash formatini belgilaydigan GL_RGB yoki GL_RGBA qiymati ishlatiladi. widthin, heightin, widhtout, heightout parametrlari kiruvchi va chiquvchi tasvirlarining o‘lchamlarini aniqlaydi, typein va typeout yordamida esa datain va dataout manzillarida joylashgan massiv elementlarining turi beriladi. Odatiy holga o‘xshash bu GL_UNSIGNED_BYTE, GL_ShORT, GL_INT va boshqa turlar bo‘lishi mumkin. Funksiya o‘z ishining natijasini dataout parametrini ko‘rsatadigan xotira sohasiga kiritadi.
Ikkinchidan, obyekt rasterizasiyadan keyin o‘lchamlari jihatidan unga qo‘yiladigan teksturadan kichkina bo‘lib qolishi holini ko‘zda tutish kerak. Obyekt qanchalik kichkina bo‘lsa, unga qo‘yiladigan tekstura ham shunchalik kichkina bo‘lishi kerak, shuning uchun ham teksturani detalizasiyalash pog‘onalari degan tushuncha kiritiladi (mipmap). Detalizasiyaning har bir pog‘onasi originalning ikki baravar kichiklashtirilgan nusxasi sifatidagi qandaydir tasvirni beradi. Bunday yondashuv obyektga tekstura qo‘yishni osonlashtiradi. Masalan, 2mx2n o‘lchamdagi tasvir uchun detalizasiyaning turli pog‘onalariga mos keluvchi max(m,n)+1 kichiklashtirilgan tasvirlarni qurish mumkin.
OpenGL ning ichki xotirasida tekstura obrazini yaratishning bu ikki pog‘onasini quyidagi buyruqlar yordamida olib borish mumkin:
void gluBuild2DMipmaps (GLenum target, GLint components,
GLint width, GLint height,
GLenum format, GLenum type,
const void *data)
bu yerda target parametri GL_TEXTURE_2D ga teng bo‘lishi kerak. components parametri teksturaning rang komponentlarini aniqlaydi va quyidagi asosiy qiymatlarni qabul qilishi mumkin:
Do'stlaringiz bilan baham: |