A grafika programozás alapjai A grafika programozás...

16
A grafika programozás alapjai Alkalmazott Informatikai Intézeti Tanszék MŰSZAKI INFORMATIKA Dr.Dudás László 0. A grafika programozás módozatai A képernyő koordinátarendszere A graphics.h header-fájl fontosabb függvényei Mintaprogram

Transcript of A grafika programozás alapjai A grafika programozás...

Page 1: A grafika programozás alapjai A grafika programozás ...ait.iit.uni-miskolc.hu/~dudas/SztEAok/CgrafikaI.pdf · Mód van a monitor és a meghajtókártya alkotta grafikus hardver

A grafika programozás alapjai

Alkalmazott Informatikai Intézeti Tanszék MŰSZAKI INFORMATIKA Dr.Dudás László 0.

A grafika programozás módozatai

A képernyő koordinátarendszere

A graphics.h header-fájl fontosabb függvényei

Mintaprogram

Page 2: A grafika programozás alapjai A grafika programozás ...ait.iit.uni-miskolc.hu/~dudas/SztEAok/CgrafikaI.pdf · Mód van a monitor és a meghajtókártya alkotta grafikus hardver

Grafika programozás módozatai

A ma már csak ablakban elérhető szöveges (text) üzemmód helyett a

monitorokat grafikus üzemmódban használjuk.

Szöveges üzemmód:

80 oszlop, 25 sor, beállított kódtábla karakterei.

Grafikus üzemmód:

Képpontonkénti (pixelenkénti) rajzolás. Egy képernyőpont a

színmélységtől függő számú szín egyikével gyújtható ki.

Minden rajzi elem kapcsolódó képpontok együtteseként jelenik meg.

abcd

Alkalmazott Informatikai Intézeti Tanszék MŰSZAKI INFORMATIKA Dr.Dudás László 1.

Page 3: A grafika programozás alapjai A grafika programozás ...ait.iit.uni-miskolc.hu/~dudas/SztEAok/CgrafikaI.pdf · Mód van a monitor és a meghajtókártya alkotta grafikus hardver

A C programozási nyelv használatával elérhető módozatok:

● alapvetően 2D vonalas grafika DOS szinten, a graphics.h könyvtár

függvényeivel,

● alapvetően 2D vonalas grafika Windows ablakban, a graphics.h

könyvtár függvényeivel,

● 2D grafika Windows környezetben a Canvas függvényeivel,

● 3D árnyalt grafika Windows környezetben, OpenGL, DirectX grafikus

könyvtárakkal.

Alkalmazott Informatikai Intézeti Tanszék MŰSZAKI INFORMATIKA Dr.Dudás László 2.

Page 4: A grafika programozás alapjai A grafika programozás ...ait.iit.uni-miskolc.hu/~dudas/SztEAok/CgrafikaI.pdf · Mód van a monitor és a meghajtókártya alkotta grafikus hardver

Grafika létrehozása a képernyőmemóriába való írást jelenti. A

képernyőmemória tartalma alapján a videoelektronika a

képernyőképet másodpercenként 60-130 alkalommal újrarajzolja,

frissíti.

A grafikának ilyen hardverközeli programozása helyett mi a magasszintű

C függvényeket használjuk.

Mozgást, animációt a kettő, vagy több képernyőnyi képernyőmemóriák

tartalmának megjelenítését váltva jeleníthetünk meg. (Double Buffer)

0111100010010001001000111100

Videokártya RAM

Alkalmazott Informatikai Intézeti Tanszék MŰSZAKI INFORMATIKA Dr.Dudás László 3.

Page 5: A grafika programozás alapjai A grafika programozás ...ait.iit.uni-miskolc.hu/~dudas/SztEAok/CgrafikaI.pdf · Mód van a monitor és a meghajtókártya alkotta grafikus hardver

A képernyő koordinátarendszere

(0;0) (getmaxx();0)

(getmaxx();getmaxy()) (0;getmaxy())

P(x;y)

x

y

(graphics.h használata esetén)

Alkalmazott Informatikai Intézeti Tanszék MŰSZAKI INFORMATIKA Dr.Dudás László 4.

Page 6: A grafika programozás alapjai A grafika programozás ...ait.iit.uni-miskolc.hu/~dudas/SztEAok/CgrafikaI.pdf · Mód van a monitor és a meghajtókártya alkotta grafikus hardver

Monitortípusok, meghajtókártyák, meghajtóprogramok,

módok

A monitornak, a meghajtókártyának (vezérlőkártya) és a

meghajtószoftvernek (interfész) egymáshoz illeszkednie kell! Ezt a

beállítást elvégzi az operációs rendszer.

A C magasszintű grafikus függvényeit, melyek a <graphics.h> header-

fájlban találhatók, a különféle monitorokhoz, ill. meghajtókártyákhoz a

meghajtószoftverek illesztik.

Mód van a monitor és a meghajtókártya alkotta grafikus hardver

típusának automatikus meghatározására, detektálására.

Egy adott grafikus hardver többféle módon beállítható a felbontás, a

színek száma szempontjából. Ezt a beállítást a grafikus mód (Gm)

változó mutatja.

Alkalmazott Informatikai Intézeti Tanszék MŰSZAKI INFORMATIKA Dr.Dudás László 5.

Page 7: A grafika programozás alapjai A grafika programozás ...ait.iit.uni-miskolc.hu/~dudas/SztEAok/CgrafikaI.pdf · Mód van a monitor és a meghajtókártya alkotta grafikus hardver

A graphics.h fájl fontosabb függvényei

Lehetőségek:

grafikus rendszer vezérlése,

rajzolás

kifestés, kitöltés,

szövegkiírás,

képernyőrész, ill. ablakkezelés,

lapozás

színkezelés

hibakezelés

állapotlekérdezés.

Lásd még: http://www.cs.colorado.edu/~main/cs1300/doc/bgi/index.html

Alkalmazott Informatikai Intézeti Tanszék MŰSZAKI INFORMATIKA Dr.Dudás László 6.

Page 8: A grafika programozás alapjai A grafika programozás ...ait.iit.uni-miskolc.hu/~dudas/SztEAok/CgrafikaI.pdf · Mód van a monitor és a meghajtókártya alkotta grafikus hardver

Grafikus rendszer kezelése:

detectgraph(); Grafikus hardver detektálás (DOS)

initgraph(); Grafikus mód beállítás (DOS)

initwindow(); Grafikus mód beállítás (Windows, CodeBlocks)

closegraph(); Grafikus mód lezárása

setgraphmode(); Más grafikus mód beállítása, ablaktörlés.

initwindow();

closegraph();

Alkalmazott Informatikai Intézeti Tanszék MŰSZAKI INFORMATIKA Dr.Dudás László 7.

Page 9: A grafika programozás alapjai A grafika programozás ...ait.iit.uni-miskolc.hu/~dudas/SztEAok/CgrafikaI.pdf · Mód van a monitor és a meghajtókártya alkotta grafikus hardver

Rajzolás:

moveto(); moverel(); Grafikus kurzor pozicionálása

putpixel(); Pont rajzolása

line(); lineto(); linerel(); Szakaszrajzolás

drawpoly(); Sokszögrajzolás

circle(); arc(); Kör, körcikk rajzolás

ellipse(); Ellipszisrajzolás

rectangle(); Téglalaprajzolás

setlinestyle(); Vonaljellemző beállítás

stb.

Alkalmazott Informatikai Intézeti Tanszék MŰSZAKI INFORMATIKA Dr.Dudás László 8.

Page 10: A grafika programozás alapjai A grafika programozás ...ait.iit.uni-miskolc.hu/~dudas/SztEAok/CgrafikaI.pdf · Mód van a monitor és a meghajtókártya alkotta grafikus hardver

Kifestés, kitöltés:

setfillstyle(); Kitöltőminta+szín kiválasztás

setfillpattern(); Kitöltőminta+szín megadás.

bar(); Kitöltött téglalap rajzolás

fillpoly(); Kitöltött sokszög rajzolás

fillellipse(); Kitöltött ellipszis rajzolás

pieslice(); Tortaszelet rajzolás

sector(); Elliptikus szektor rajzolás

bar3d(); Téglatest rajzolás

Alkalmazott Informatikai Intézeti Tanszék MŰSZAKI INFORMATIKA Dr.Dudás László 9.

Page 11: A grafika programozás alapjai A grafika programozás ...ait.iit.uni-miskolc.hu/~dudas/SztEAok/CgrafikaI.pdf · Mód van a monitor és a meghajtókártya alkotta grafikus hardver

Szövegkiirás:

outtext(); outtextxy(); Szövegkiirás

settextjustify(); Szövegigazítás beállítás

settextstyle(); Karaktertípus, irány, méret (.chr kell)

Képernyőrész, ill. ablakkezelés:

imagesize(); Képernyőrész helyfoglalása

getimage(); Képernyőrész elmentése

setviewport(); Ablak létrehozás+vágás

clearviewport(); Ablak törlés háttérszínre

putimage(); Képernyőrész kirakása

stb.

Alkalmazott Informatikai Intézeti Tanszék MŰSZAKI INFORMATIKA Dr.Dudás László 10.

Page 12: A grafika programozás alapjai A grafika programozás ...ait.iit.uni-miskolc.hu/~dudas/SztEAok/CgrafikaI.pdf · Mód van a monitor és a meghajtókártya alkotta grafikus hardver

Lapozás:

setactivepage(), Érvényes lap kijelölése

setvisualpage(), Látható lap kijelölése

cleardevice(), Képernyő törlése

Színkezelés:

setcolor(), Vonalszín megadása

setbkcolor(), Háttérszín megadása

Hibakezelés:

graphresult(), Hibakódot ad

grapherrormsg(), Hibaszöveget ad a kódhoz

Alkalmazott Informatikai Intézeti Tanszék MŰSZAKI INFORMATIKA Dr.Dudás László 11.

Page 13: A grafika programozás alapjai A grafika programozás ...ait.iit.uni-miskolc.hu/~dudas/SztEAok/CgrafikaI.pdf · Mód van a monitor és a meghajtókártya alkotta grafikus hardver

Állapotlekérdezés: Minden beállítható érték lekérdezhető. A fontosabbak:

getgraphmode(); A mód kódszámát adja

getmaxmode(); A max. mód számát adja

getdrivername(); A grafikus hardver nevét adja

getx(); gety(); A grafikus kurzor aktuális pozícióját adja

getmaxx(); getmaxy(); A képernyő felbontását adja

getcolor(); Az akt. vonalszínt adja

getpixel(); Egy adott pont színét adja

getmaxcolor(); A használható legnagyobb színkódot adja

getbkcolor(); A háttérszín kódját adja.

Alkalmazott Informatikai Intézeti Tanszék MŰSZAKI INFORMATIKA Dr.Dudás László 12.

Page 14: A grafika programozás alapjai A grafika programozás ...ait.iit.uni-miskolc.hu/~dudas/SztEAok/CgrafikaI.pdf · Mód van a monitor és a meghajtókártya alkotta grafikus hardver

Mintaprogram

Készítsünk az alábbi ábrához hasonló ábrát rajzoló programot!

Alkalmazott Informatikai Intézeti Tanszék MŰSZAKI INFORMATIKA Dr.Dudás László 13.

Page 15: A grafika programozás alapjai A grafika programozás ...ait.iit.uni-miskolc.hu/~dudas/SztEAok/CgrafikaI.pdf · Mód van a monitor és a meghajtókártya alkotta grafikus hardver

#include <stdio.h>

#include <graphics.h>

int main( ) /* a CodeBlocks C program főfüggvénye */

{

int i,R,MaxX,MaxY;

initwindow( 640 , 480 , " WinBGIm Demo " ); /* 1024 , 768 is mûködik */

setbkcolor(LIGHTGRAY); /* háttérszín elõválasztás: világosszürke*/

cleardevice(); /* háttér törlése háttérszínre */

setlinestyle(SOLID_LINE,0,THICK_WIDTH); /* vonalstílus beállítása */

MaxX= getmaxx(); MaxY= getmaxy(); /* ablakméret lekérdezése */

for (i=1; i<=10; i++)

{

setcolor(i+5); /* aktuális vonalszín beállítása */

line(0,0,(MaxX / 10)*i, MaxY); /* szakaszrajzolás */

R= (MaxY-10) / (2*i); /* körsugár beállítása */

circle(MaxX-R, MaxY / 2, R); /* körrajzolás */

ellipse(MaxX / 2, MaxY / 8, 0, 360, MaxX / (4*i), MaxY / 8); /* ellipszis rajzolás */

}

while( !kbhit() ); /* várakozás billentyűlenyomásig */

closegraph( ); /* grafikus üzemmód/ablak bezárása */

return( 0 );

}

Alkalmazott Informatikai Intézeti Tanszék MŰSZAKI INFORMATIKA Dr.Dudás László 14.

Page 16: A grafika programozás alapjai A grafika programozás ...ait.iit.uni-miskolc.hu/~dudas/SztEAok/CgrafikaI.pdf · Mód van a monitor és a meghajtókártya alkotta grafikus hardver

Alkalmazott Informatikai Intézeti Tanszék MŰSZAKI INFORMATIKA Dr.Dudás László 15.

A CodeBloks fejlesztőkörnyezetben futtatott program képe