GL_AMBIENT_AND_DIFFUSE glMaterial*() buyrug‘ini pname GL_AMBIENT va GL_DIFFUSE qiymati hamda params bir xil qiymatlari bilan ikki marta chaqirishga ekvivalent.
Bundan kelib chiqadiki, glMaterial[i f]() buyrug‘ini chaqirish faqat materialning ko‘zguli akslanish darajasi o‘rnatilishi uchungina mumkin bo‘ladi. glMaterial[i f]v() buyrug‘i qolgan parametrlarni berish uchun ishlatiladi.
face parametri bu material beradigan yoqlar turini aniqlaydi va GL_FRONT, GL_BACK yoki GL_FRONT_AND_BACK qiymatlarini qabul qilishi mumkin.
Agar sahnada obyektlarning materiallari faqat bitta parametr bilan farqlansa, glEnable() ni GL_COLOR_MATERIAL parametri bilan chaqirib kerakli rejimni o‘rnatish tavsiya etiladi, keyin esa quyidagi buyruqdan foydalaniladi:
void glColorMaterial (GLenum face, GLenum pname)
bu yerda, face parametri yuqorida ko‘rsatilgan ma’noga ega, pname parametri esa barcha sanab o‘tilgan qiymatlarni qabul qilishi mumkin. Bundan keyin pname aniq obyektning materiali xossalari yordamida olingan qiymatlar glColor*() buyrug‘ini chaqirish orqali o‘rnatiladi va bu ko‘p resurslarni talab qiladigan glMaterial*() buyrug‘i chaqirilishini oldini oladi hamda dastur samaradorligini oshiradi.
Material xossalarini aniqlashga misol:
float mat_dif[]={0.8,0.8,0.8};
float mat_amb[] = {0.2, 0.2, 0.2};
float mat_spec[] = {0.6, 0.6, 0.6};
float shininess = 0.7 * 128;
…
glMaterialfv (GL_FRONT_AND_BACK,GL_AMBIENT, mat_amb);
glMaterialfv (GL_FRONT_AND_BACK,GL_DIFFUSE, mat_dif);
glMaterialfv (GL_FRONT_AND_BACK,GL_SPECULAR, mat_spec);
glMaterialf (GL_FRONT,GL_ShININESS, shininess);
Yorug‘lik manbalarining tavsifi.
Obyekt materialining xossalarini aniqlash faqat sahnada yorug‘lik manbalari bo‘lgandagina o‘rinli. Aks holda barcha obyektlar qora rangda (materialning tarqoq rangida) bo‘ladi. Sahnaga yorug‘lik manbaini quyidagi buyruq yordamida qo‘shish mumkin:
void glLight [i f] (GLenum light, GLenum pname,
GLfloat param)
void glLight[i f] (GLenum light, GLenum pname,
GLfloat *params)
light parametri o‘z-o‘zidan yorug‘lik manbaini belgilaydi. U GL_LIGHTi ko‘rinishdagi maxsus belgili nomlar to‘plami bilan tanlanadi, i bu yerda 0 dan odatda sakkizdan katta bo‘lmaydigan GL_MAX_LIGHT o‘zgarmaslari orasida yotadi.
pname va params parametrlari glMaterial*() buyrug‘iga o‘xshash ma’noga ega. pname parametri qiymatlarini qarab chiqamiz:
Do'stlaringiz bilan baham: |