Model-ko‘rinishli almashtirishlar
Proeksiyaviy almashtirish va normallash
Chiqish sohasidagi almashtirishlar
Model-ko‘rinishli matrisa
Proeksiya matrisasi
Chiqish sohasi parametrlari (glViewport)
Ko‘rinishli koordinatalar
Oynali koordinatalar
Eng yuqori koordinatalar
3.5-rasm. OpenGL da koordinatalrni almashtirish.
Esda saqlang: OpenGL da obyektlar va kamerani almashtirishlar koordinata vektorlarini matritsaga ko‘paytirish orqali amalga oshiriladi. Bunda ko‘paytirish joriy matritsaga nisbatan glVertex* buyrug‘i yordamida koordinatalar aniqlangan vaqtda amalga oshiriladi.
Modelli-tasvir o‘zgartirishlar. Modelli-tasvir o‘zgartirishlarini koordinata o‘qlari buylab ko‘chirish, burish va masshtabni o‘zgartirish deb hisoblaymiz. Ushbu operatsiyalarni bajarish uchun obyektning har bir uchi bilan tegishli matritsani ko‘paytirish va ushbu uchlarning o‘zgartirilgan koordinatalarini olish etarli:
Bu yerda M – modelli-tasvir o‘zgartirish matritsasi. Matritsaning o‘zi quyidagi buyruqlar yordamida yaratilishi mumkin:
void glTranslate [f d] (GLtype x, GLtype y, GLtype z)
void glRotate [f d] (GLtype angle, GLtype x, GLtype y, GLtype z)
void glScale [f d] (GLtype x, GLtype y, GLtype z)
glTranlsate*() obyektni ko‘chirishga tayyorlaydi, o‘zining parametri qiymatlarini uning uchlari koordinatalariga qo‘shadi.
glRotate*() buyrug‘i obyektni (x,y,z) vektori atrofida angle (graduslarda o‘lchanadi) burchagi ostida soat strelkasiga teskari burilishini bajaradi.
glScale*() buyrug‘i (x,y,z) vektorlar o‘qi buyicha obyektni masshtablanishini bajaradi.
Obyekt holatini o‘zgartirishdan tashqari, kuzatuvchi holatini o‘zgartirish zarurati ham tug‘iladi. Buni quyidagi buyruq yordamida bajarish mumkin:
void gluLookAt (GLdouble eyex, GLdouble eyey,
GLdouble eyez, GLdouble centerx,
GLdouble centery, GLdouble centerz,
GLdouble upx, GLdouble upy,
GLdouble upz)
bu yerda (eyex,eyey,eyez) nuqtasi kuzatuvchi nuqtasini belgilaydi, (centerx, centery, centerz) chiqarish sohasi markazida proeksiyalanovchi sahna markazini beradi, (upx,upy,upz) vektori esa kamera burilishini aniqlab, y o‘qining musbat yo‘nalishini belgilaydi. Misol uchun agarda kamerani burish talab qilinmasa, (0,1,0) qiymati beriladi va sahnani (0,-1,0) qiymati bilan burish amalga oshiriladi.
Qisqacha aytganda, bu buyruq sahna obyektlarini ko‘chirish va burishni amalga oshiradi, lekin parametrlarni bunday ko‘rinishda berish qulayroq. Shuni ta’kidlash joizki, gluLookAt() buyrug‘ini chaqirish obyektlarni almashtirishdan oldin, ya’ni model-ko‘rinishli matritsa birlik matritsasiga teng bo‘lganda ma’noga ega.
Eslab qoling: umumiy holda OpenGL da matritsaviy almashtirishlarni teskari tartibda yozib borish kerak. Misol uchun, agar siz avval obyektni burib, keyin ko‘chirmoqchi bo‘lsangiz, oldin glTranslate() buyrug‘ini, keyin esa glRotate() buyrug‘ini chaqirasiz. Bundan keyin esa obyektning o‘zini belgilaysiz.
Do'stlaringiz bilan baham: |