C++ da grafika

Oldin menga kimdir grafik interfeysli qandaydir dastur tuzganmisan? - deb so'rasa, men grafikani yaxshi bilmayman, grafika bilan do'stlashmayman deb aytar edim. Lekin, ba'zida pythonda PIL kutubxonasida tajribalar o'tkazardim. Unda tezlik juda pastligiga, man grafika bilan ishlashga (form application larni nazarda tutmayapman), juda ham optimal dastur tuzish kerak va bunga meni aqlim yetmaydi deb o'ylar rdim. Chunki meni tajribalarimda rasm chizilishiga 1-2 sekund vaqt ketardi, lekin o'yinlarda (ba'zi videolarda ham), 1 sekundda 23-24 marta kadrlar almashadi. (Bu faqat meni qurilmalarimda bo'lishi ham mumkin, bu har-hil sozlamalar va qurilma konfiguratsiyasiga ham bog'liq).

Lekin universitetda (TATU) 1 kursda C++ dan grafikani o'tishdi. Oldimda 2 hil yo'l ko'rindi:

1) Visual Studioda grafikalik vazifalarni bajarish

2) Dev- C++ da vazifalarni bajarish.

Kompyuterim konfiguratsiyasini hisobga olgan holda, Dev- C++ da bajarishni ma'qul ko'rdim. (Lekin Visual Studio ham meni qurilmamda yaxshi ishlarkan)

Visual Studini o'zini grafika bilan ishlovchi komponentlarini tushunish oson, ortiqcha hech nima o'rnatip ham o'tirilmaydi. Shuning uchun ham, Dev-C++ haqida gaplashamiz.

Dev- C++ da tuzilgan dasturni foydalanuvchilarga taqdim etishdan oldin yaxshilab o'ylap ko'ring. Agar taqdim etish qaroriga kelgan bo'lsangiz, fikringizdan qaytguningizgacha qaytadan o'ylab ko'ring. Dev-C++ da grafika bilan ishlash, shunchaki qiziqishga va universitetda berilgan vazifalarni bajarishga grafika bo'yicha tajribani oshirishga xizmat qilishi mumkin.

Universitetda Dev- C++ ga grafika bilan ishlashga kutubxonalarni o'rnatish ham bosh og'rig'i bo'ldi. U grafika komponentlar Borland C++ muhitidan chopib olingan olib, Dev-C++ uchun moslangan ekan.

Shunaqa bosh og'rig'i bo'lmasligi uchun, man Dev- C++ ni ichiga barcha kutubxonalarni joylashtirib, bitta SFX arxiv yasadim. Undan dev-cpp ni o'rnatsangiz, barcha kutubxonalari tayyorligicha o'rnatiladi. Uni quyidagi havoladan ko'chirib olishingiz mumkin:

Yuklab olish

hech qanday muammo yuzaga kelmasligi kerak. Dasturga kiramiz. "Файл" -> "Создать" -> "Проект" ga kiramiz. U yerda "basic" qismidan "console graphics application" tanlanadi.

Loyiha nomini lotinchada yozishni maslahat beraman.

Loyiha ochilganidan keyin, tayyor kod chiqadi. Kompilyatorni 32 bit, debug rejimi tanlanib, kompilyatsiya qilinadi.

Agar o'xshasa, oddiy koptok butun ekran bo'ylap devorlarga urilib yurganini guvohi bo'lasiz. Aks holda, grafika kutubxonalari ishlamayapti (

E'tibor bergan bo'lsangiz, chizilayotgan kadrlar odamni asabini buzadi. Bu dasturchini o'ziga bilinmasligi mumkin, lekin ko'pchilikga bunday ko'z oldida o'chirip, qayta chizilayotgan grafika yoqmaydi. Ko'proq rasm chizilganida, bu ayniqsa sezilarli.

Kodni 13 qatorida

circle(b.x, b.y, b.r);

kodini o'rniga

for(int i=0; i<30; i++)
    {
     circle(b.x, b.y, b.r+i);
 }

Yozib ko'ring. Bunda aylanani ichkarisidan bitta bittalab chizib chiqilishi ko'zga ko'rinmasada, chetdagi aylanalar o'chirilip, qayta chizilishi haddan tashqari xunuk ko'rinadi. Bu effektni sal kamaytirish yo'li bor. Buni double buffering deyishadi. nazariyasini o'qishni istamasangiz, amaliyotga to'g'rida to'g'ri o'ting.

Nazariya: Tasavvur qiling, dastur qiladigan ishni juda katta tezlikda qo'lsa qilyapsiz. Bunda siz bitta qog'oz olib, qandaydir odamga uni ko'zini oldida rasm chizyapsiz va ko'zini oldida o'chirip, qaytadan chizyapsiz. Bu holatda ko'rvotgan odamga albatta g'alati tuyuladi. Uni sal qulayroq qilish usuli - Ikkita varoq ishlatish. Tasavvur qiling, A va B varoqlar bor. Siz A varoqga rasm chizib, foydalanuvchiga berasiz va B varoqga chizishni boshlaysiz. B ga rasm chizib bo'lip, A varoq bilan B ni almashtirasiz. Endi B varoqga chizyapsiz, foydalanuvchi B varoqga qarayapti. Shunday qilib, foydalanuvchi faqatgina tayyor chizilgan rasmlarni ko'radi. O'chirish, chizish ishlari esa ko'rinmaydi. Agar buni tushunmagan bo'lsangiz, hechqisi yo'q. Dasturda realizatsiyasini ko'ring:

Amaliyot: while sikli tepasiga int toifasida o'zgaruvchi e'lon qilamiz. Misol uchun p. Bu varoq raqami.

int p = 0;

while sikli ichida chiziladigan varaqni tanlaymiz va p ni 1 bo'lsa 0, 0 bo'lsa 1 ga aylantiramiz.:

setactivepage(p);
p = 1 - p;
setvisualpage(p);

Bunda setactive page funksiyasi chizilayotgan varaqni tanladi, setvisualpage esa ko'rinayotgan varaqni tanladi.


Qo'shimcha: Liniyalar qalinroq bo'lishi uchun siklga kirmasdan turib ularni qalinlashtirishni maslahat beraman:

setlinestyle(0, 1, 3);

Man Dev- C++ dan umuman qoniqmagandim, double buffering dan foydalanganimdan keyin, atrofimdagilarga sal yaxshiroq ko'rinishni boshlagan bo'sayam, menga baribir yoqmadi. Lekin dev-cpp grafikasi chopilgan bo'sayam. o'rganish uchun juda qulay ekan. Aynan talabalar o'rganishi uchun mos keladigan boshqa hech nimaga yaramaydigan kutubxona ekan.

Bu kutubxonada oddiyroq o'yin ham tuzdim. Kelajakda shu o'yin haqida yozishim mumkin, lekin bu kutubxonaga qiziqish qolmagan. Undan keyin, Androidga o'yin tuzish uchun boshqa kutubxonani o'rgandim. Kelajakda u kutubxona haqida ham maqola yozishim mumkin.


coderuz

Muallif haqida

Ibrohimov Oybek Ulug'bekovich Creative dasturchi ;-)


Blogdagi so‘nggi maqolalar:


Birinchi bo‘ling!

Iltimos, fikr bildirish uchun saytga kiring yoki ro‘yxatdan o‘ting!