Компьютер графикаси



Download 15,78 Mb.
bet64/128
Sana14.07.2022
Hajmi15,78 Mb.
#795608
1   ...   60   61   62   63   64   65   66   67   ...   128
Bog'liq
1 O\'quv qo\'llanma Kompyuter grafikasi (1) (2)

#include


/* GLUT kutubxonasini bog‘lash*/
/* oynaning dastlabki eni va balandligi (o‘lchamlari)*/
GLint Width = 512, Height = 512;
/* kubning hajmi */
const int CubeSize = 200;
/* ushbu funksiya ekranga chiqarilayotgan barcha ma’lumotlarni boshqaradi */
void Display(void)
{
int left, right, top, bottom;
left = (Width - CubeSize) / 2;
right = left + CubeSize;
bottom = (Height - CubeSize) / 2;
top = bottom + CubeSize;
glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
glColor3ub(255,0,0);
glBegin(GL_QUADS);
glVertex2f(left,bottom);
glVertex2f(left,top);
glVertex2f(right,top);
glVertex2f(right,bottom);
glEnd();
glFinish();
}

/* ushbu funksiya oyna o‘lchami o‘zgargan holatini chaqirish uchun chaqiriladi */


void Reshape(GLint w, GLint h)
{
Width = w; Height = h;
/* ko‘rsatish sohasi o‘lchamini o‘rnatamiz */
glViewport(0, 0, w, h); // x, y, balandlik, kenglik

/* ortografik proeksiya */


glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, w, 0, h, -1.0, 1.0); // chap, o‘ng, quyi, yuqori, yaqin, uzoq
}

/* klaviaturadan kelgan ma’lumotlarni qayta ishlovchi funksiya */


void Keyboard( unsigned char key, int x, int y )
{
#define ESCAPE '\033'
if( key == ESCAPE )
exit(0); }

/* ilovaning asosiy sikli */


main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowSize(Width, Height);
glutInitWindowPosition(10,10);
glutCreateWindow("Qizil maydonga misol");
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutKeyboardFunc(Keyboard);
glutMainLoop();
}

Ushbu dastur hajmi kichik bo‘lishiga qaramay OpenGL va GLUT kutubxonalarini qo‘llaydigan, istalgan tizimda ishlaydigan va kompilyasiya qilinadigan to‘liq tugallangan dastur.


GLUT kutubxonasi foydalanuvchi bilan teskari aloqa (callback function) deb nomlanuvchi funksiya yordamida o‘zaro aloqani quvvatlaydi. Agarda foydalanuvchi sichqonchani siljitsa, klaviatura tugmasini bossa yoki oyna o‘lchamini o‘zgartirsa, hodisa yuz beradi va foydalanuvchining tegishli (hodisalarga ishlov berish (teskari aloqaga ega funksiya)) funksiyasi chaqiriladi.
Yuqoridagi misolda keltirilgan main funksiyasini batafsil ko‘rib chiqamiz. U uchta qismdan tarkib topgan – OpenGL chizishi kerak bo‘lgan oynani inisiallash (faollashtirish), teskari aloqali funksiyalarni va hodisalarga ishlov berishning asosiy davrini sozlash.
Oynani inisiallash (faollashtirish) kadrning tegishli buferlari, boshlang‘ich holati va oyna o‘lchami, shuningdek oyna sarlavhasini sozlashdan tarkib topadi.
glutInit (&argc, argv) funksiyasi GLUT kutubxonasining o‘zini dastlabki inisiallashuvga tayyorlaydi.
glutInitDisplayMode (GLUT_RGB) buyrug‘i kadr buferini inisiallashtiradi va to‘liq rangli (palitrasiz) RGB rejimiga to‘g‘rilaydi.
glutInitWindowSize (Width, Height) oynaning boshlang‘ich o‘lchamini tayinlash uchun ishlatiladi.
glutCreateWindow ("Qizil maydonga misol") oyna sarlavhasini kiritadi va oynani ekranda vizuallashtiradi.
Shunda quyidagi buyruqlar
glutDisplayFunc (Display);
glutReshapeFunc (Reshape);
glutKeyboardFunc (Keyboard);
Display(), Reshape() va Keyboard() funksiyalari oynani qayta chizish, oyna o‘lchamlarini o‘zgartirish, klaviatura klavishini bosganda chaqiriladigan funksiyalar sifatida qayd qiladi.
Barcha hodisalarni nazorat qilish va kerakli funksiyalarni chaqirish glutMainLoop () funksiyasining cheksiz davri ichida bajariladi.
Ko‘rishimiz mumkinki, GLUT kutubxonasi OpenGL tarkibiga kirmaydi, ya’ni OpenGL va oynali nimtizimning orasidagi keltirilgan eng kichik interfeysdir. OpenGL ilovasi aniq bir platformalar uchun maxsus API (Win32, X Window va b.) yordamida yozilishi mumkin, ular esa o‘z navbatida yanada kengroq imkoniyatlarni taqdim etadi. GLUT kutubxonasi bilan ishlash A ilovada batafsil berilgan.
OpenGL buyruqlarini chaqirish hodisalarni qayta ishlovchida sodir bo‘ladi. Ular keyingi bo‘limlarda kengroq qarab chiqiladi. Hozir esa, ekranda chizishga javob beradigan kodga ega bo‘lgan Display funksiyasiga e’tibor qaratamiz.
Display funksiyasiga tegishli quyidagi buyruqlar ketma-ketligi
glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
glColor3ub(255,0,0);
glBegin(GL_QUADS);
glVertex2f(left,bottom);
glVertex2f(left,top);
glVertex2f(right,top);
glVertex2f(right,bottom);
glEnd();
oynani tozalaydi va rang hamda to‘rtta burchak uchlari koordinatalarini berib ekranga kvadrat chiqaradi.
D.1 ilovasida sichqoncha tugmasini bosganda ekranda har xil rangdagi tasodifiy to‘g‘ri to‘rtburchakni chizadigan yana bir murakkab bo‘lmagan dastur keltirilgan.



Download 15,78 Mb.

Do'stlaringiz bilan baham:
1   ...   60   61   62   63   64   65   66   67   ...   128




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish