Uchlar massivlari
Agar uchlar soni ko‘p bo‘lsa va ularning har birini glVertex*() buyrug‘i bilan chaqirmaslik uchun
void glVertexPointer (GLint size, GLenum type, GLsizei stride, void* ptr)
buyrug‘idan foydalanib, massivlarga birlashtirish qulayroq. Bu buyruq uchlarning koordinatalari va saqlash uslubini belgilaydi. Bu yerda size uchlarning koordinatalar sonini ko‘rsatadi (2,3,4 bo‘lishi mumkin), type ma’lumotlarning turini belgilaydi (GL_ShORT, GL_INT, GL_FLOAT, GL_DOUBLE). Ba’zan bitta massivda boshqa uchlarning atributlarini saqlash qulayroq, shunda stride parametri bitta uchning koordinatasidan ikkinchisining koordinatasigacha kuchishini belgilaydi. Agar stride nolga teng bulsa, bu degani koordinatalar ketma ket joylashgan. Ptr parametrida ma’lumotlar joylashgan manzil ko‘rsatiladi.
Shunga o‘xshab quyidagi buyruqlardan foydalanib normal, ranglar va uchlarni boshqa atributlarining massivlarini aniqlash mumkin:
void glNormalPointer ( GLenum type, GLsizei stride, void *pointer )
void glColorPointer (GLint size, GLenum type, GLsizei stride, void *pointer)
Bu massivlarni keyinchak ham ishlatish uchun quyidagi buyruqni chaqirish kerak:
void glEnableClientState (GLenum array)
shu buyruq bilan keyingi parametrlar qo‘llaniladi:
GL_VERTEX_ARRAY, GL_NORMAL_ARRAY, GL_COLOR_ARRAY.
Massiv bilan ishlashni tugatgandan sung void glDisableClientState (GLenum array) buyrug‘ini qo‘llaymiz.
Massivning ichini qurish uchun
void glArrayElement (GLint index)
buyrug‘i ishlatiladi.
Bu buyruq index nomerga ega massiv elementlaridan foydalanib uchlarning atributlarini OpenGL ga yuboradi. Uning o‘rniga odatta
void glDrawArrays (GLenum mode, GLint first, GLsizei count)
buyrug‘i ishlatiladi. U mode parametri bilan aniqlanadigan count primitivlarni chizadi. Bunda u first dan first+count-1 gacha indeksli massiv elementlaridan foydalanadi. Bu glArrayElement() buyrug‘ini chaqirish bilan teng.
Agarda uch bir necha massivga kirsa uning koordinatalarini qaytarish o‘rniga massivda indeksini qo‘llash qulayroq.
Buning uchun
void glDrawElements (GLenum mode, GLsizei count, GLenum type, void *indices)
buyrug‘i ishlatiladi, bu yerda indices-uchlarning raqamlar massivi. Type bu massivning elementlarini turini belgilaydi GL_UNSIGNED_BYTE, GL_UNSIGNED_ShORT, GL_UNSIGNED_INT, count esa ularning sonini belgilaydi.
Massivlarning qo‘llanishi OpenGL serveriga ma’lumotlarning jo‘natilishini optimal holatga keltiradi va shu bilan birga uch o‘lchamli sahnani chizishni tezlashtiradi. Bunday uslub primitivlarni aniqlash uchun juda tez va katta hajmli ma’lumotlarni vizualizasiyalash uchun juda qulay.
Do'stlaringiz bilan baham: |