Uchlar va primitivlar
Uchlar (nuqta) OpenGL ning grafik primitivlari hisoblanadi va nuqtani, kesmaning oxiri, ko‘pburchakning burchagi va boshqalarni tavsiflaydi. Qolgan barcha primitivlar uchlarni tayinlash orqali shakllantiriladi. Masalan, kesma ikkita uchlar orqali ifodalanadi.
Har bir uch bilan birga uning atributlari ham mavjud. Asosiy atribut sifatida uchning fazodagi holati, uchning rangi va vektor normallarini olish mumkin.
Uchlarning fazodagi holati Uchlarning holati ikki, uch yoki to‘rt o‘lchovli (bir jinsli koordinatalar) fazoda uning koordinatalarini tayinlash orqali belgilanadi. Bu glVertex* buyrug‘ini bir qancha variantlari yordamida amalga oshiriladi:
void glVertex [2 3 4][s i f d] (type coords)
void glVertex[2 3 4][s i f d]v (type *coords)
Har bir buyruq uchlarning to‘rtta koordinatasini tayinlaydi: x, y, z, w. glVertex2* buyrug‘i x va y qiymatlarini qabul qiladi. Bunday holatda z koordinatasi 0 ga teng, w koordinatasi – 1 ga teng.
Vertex3* buyrug‘i x, y, z koordinatalarini qabul qiladi va w koordinatasiga 1 qiymatini kiritadi.
Vertex4* barcha to‘rtta koordinatalarni tayinlash imkonini beradi.
Uchlar rangi, normallar va teksturlar koordinatalarini birlashtirish uchun mavjud ma’lumotlarning joriy qiymatlari ishlatiladi. Ushbu qiymatlar ixtiyoriy vaqtda tegishli buyruqni chaqirish yordamida o‘zgartirilishi mumkin.
Uchlar rangi
Uchlarning joriy rangini tayinlash uchun quyidagi buyruqlar ishlatiladi:
void glColor[3 4][b s i f] (GLtype components)
void glColor[3 4][b s i f]v (GLtype components)
Dastlabki uchta parametr rangning R, G, B komponentlarini tayinlaydi, oxirgi parametr notiniqlik koeffisienti (alfa-qism deb ataluvchi)ni belgilaydi. Agarda buyruqning nomlanishida ‘f’ (float) tipi ko‘rsatilgan bo‘lsa, unda barcha parametrlar qiymatlari [0,1] kesma oralig‘ida joylashishi kerak, bunday holda alfa-qism qiymati 1.0 ga tenglashtirilishi o‘rnatiladi. ‘ub’ (unsigned byte) tipi qiymat [0,255] kesmada joylashishi kerakligi ko‘zda tutadi.
Uchlarga turli xil ranglarni tayinlash mumkin, agarda mos rejim yoqilgan bo‘lsa. Unda primitiv sirti bo‘ylab ranglarning chiziqli interpolyasiyasi amalga oshiriladi.
Interpolyasiya jarayonini boshqarish uchun quyidagi buyruqdan foydalaniladi
void glShadeModel (GLenum mode)
chaqiruv GL_SMOOTH parametr bilan berilsa, interpolyasiya qo‘shiladi (tanlangan parametr asosida), GL_FLAT parametr berilsa esa ajratadi, o‘chiradi.
Normal
Normallarni ifodalash uchun quyidagi buyruqlardan foydalaniladi
void glNormal3[b s i f d] (type coords)
void glNormal3[b s i f d]v (type coords)
Yorug‘lik hisobini to‘g‘ri olish uchun normal vektori yagona uzunlikka ega bo‘lishi zarur. glEnable(GL_NORMALIZE) buyrug‘i maxsus buyruqlarni qo‘shishi mumkin, bunda tayinlanayotgan normal avtomatik normallashadi.
Avtomatik normallash rejimi modelli kengayish-torayish almashtirilishi ishlatilganda yoqilgan bo‘lishi kerak, chunki bu holda normal uzunligi model-matritsasiga ko‘paytirilganda o‘zgaradi. Ammo ushbu rejimni joriy qilish OpenGL ning vizuallashtirish mexanizmi ishini sekinlashtiradi, xuddi shunday vektorlarni normallash hisoblashning sezilarli qiyinchiliklariga olib keladi (kvadrat ildiz olish va b.). Shuning uchun birdaniga yagona normalni berish ma’qul.
Eslatib o‘tish kerakki,
void glEnable (GLenum mode)
void glDisable (GLenum mode)
buyruqlari OpenGL konveyerining u yoki bu ish rejimini o‘chirilishi yoki yoqilishini ta’minlaydi. Ushbu buyruqlar ko‘p hollarda qo‘llaniladi va ularning parametrlari har bir aniq holatlar uchun qaraladi.
Do'stlaringiz bilan baham: |