Üdv mindenkinek!
Azzal a kérdéssel fordulok a tisztelt olvasókhoz, hogy tudnak-e valamilyen támpontot adni, merre induljak el, ha szeretnék grafikát programozni C-ben.
Amint a téma tárgyában is látható, kifejezetten csak C-ben szeretnék grafikát programozni, tehát nem valamilyen külső függvénykönyvtár segítségével. SDL-t próbáltam már, és úgy tudom C-ben íródott - vagyis annak ellenére, hogy a nyelvben nincs grafikus függvénykönyvtár, mégis lehetséges a kivitelezés - de hogyan?
Könyvet, weboldalt, bármiféle javaslatot szívesen fogadok, mert nagyon érdekelne a téma.
A válaszokért előre is köszönet!
- 2609 megtekintés
Hozzászólások
"vagyis annak ellenére, hogy a nyelvben nincs grafikus függvénykönyvtár, mégis lehetséges a kivitelezés - de hogyan"
Az SDL magas szintu lib. X alatt, Windows tudsz mas libbel alacsonyszintu grafikat csinalni (Intrinsics illetve GDI/GDI+). Vagy programozhatod kozvetlenul a hardvert. Mashogy ez nem megy. Az SDL is mas libekre alapoz, o sem tud csodat muvelni.
- A hozzászóláshoz be kell jelentkezni
Az SDL, amennyire tudom platformfüggetlen. Az X - amennyire tudom - nem az, vagyis, ha írok egy grafikus alkalmazást X alá, az nem fog úgy ahogy van Windows alatt futni. Arra esetleg tudsz választ adni, hogy ezt az SDL hogyan kivitelezi?
- A hozzászóláshoz be kell jelentkezni
Nem tudom pontosan, de nyilvan az SDL Windows eseten GDI/DIrectX hivasokkal mukodik, X alatt meg Xlib/Xt hivasokkal. Ennyi. Az a szolgaltatas amit nyujt, megvalosul minden platformon mashogy, az API ugyanaz, a melyen levo megvalositas platformfuggo.
Szerk:
"On Microsoft Windows, SDL uses a windib backend by default. A DirectX backend is also available. Older versions of SDL used DirectX 5, but SDL 1.2 (the current stable release) requires DirectX 7 by default. Sam Lantinga has stated that he plans to use DirectX 8 in future SDL releases[2].
On X11 platforms, including Linux and OpenVMS, SDL uses Xlib to communicate with the X11 system for graphics and events.
On Mac OS X, SDL uses Quartz."
Azaz minden platformon megvna, hogy mi az alatta levo backend, ami kore epiti az API-t, tkp. az SDL egy egyszeru, egyseges wrapper a kulonfele platformok grafikai alrendszerei kore. Persze itt jon egy hatrany is: csak olyan dolog lesz resze az SDL-nek, ami minden tamogatott platformon megvan (kozos nevezo).
- A hozzászóláshoz be kell jelentkezni
"szeretnék grafikát programozni C-ben"
http://en.wikipedia.org/wiki/OpenGL_Utility_Toolkit
Nekünk egyetemen ezt oktatják.
Bár ez is külső függvénykönyvtár... (de gondolom ismered) :S
- A hozzászóláshoz be kell jelentkezni
Igen ismerem. Az én célom viszont jelenleg az, hogy saját kóddal valósítsak meg néhány grafikai feladatot - pl.: pixel megjelenítése, háttérszín, kép betöltése - hogy jobban megértsem a mögöttes folyamatokat. Sajnos nem találtam semmilyen segédletet, leírást, könyve, ami erről szólna.:(
- A hozzászóláshoz be kell jelentkezni
ket modon jarhatsz el: hasznalod az oprendszer alacsonyszintu szolgaltatasait (GDI, Xlib, DirectX, Quartz, stb.), vagy hardvert programozol kozvetlenul. Persze modern oprendszerek alatt rajohetsz, hogy az utobbi modszer nem igazan jarhato, raadasul hardverfuggo.
- A hozzászóláshoz be kell jelentkezni
Milyen OS-en?
--
http://www.naszta.hu
- A hozzászóláshoz be kell jelentkezni
Lehetőleg platformfüggetlen megoldást keresek.
- A hozzászóláshoz be kell jelentkezni
Még egy OS-en belül csak-csak. De így? Nem kell 200 fős programozó csoportok munkáját felvállalni! Ha "csak" azt vállalod, hogy a saját kis sz@ros progid menni fog 3-4 OS alatt (ami nem mind MS :)), akkor már az is szép teher egy egészen egyszerű programnak is néha.
Inkább tanuld meg a Qt-t vagy az OpenGL-t rendesen. Ezek sem kis feladatok, de legalább értelmük van hosszú távon.
--
http://www.naszta.hu
- A hozzászóláshoz be kell jelentkezni
Ezek a lehetosegek jutnak az eszembe:
1. direktben programozod a videokartya regisztereit. ehhez minden videokartyara es minden platformra meg kell irni a szukseges kodot, amit vagy rendszergazdakent kell futtatni, vagy lehet, hogy kernel modban (kernel driver). Ez kb. lehetetlenul nagy munka. Probalkozasok erre pl: svgalib, vidix, directfb (google-ben/wikipedian megtalalod ezeket). Itt a 2D grafika is irgalmatlan nagy kihivas, sok esetben dokumentacio sincs sok kartyahoz, magyarul sehogy nem tudod kitalalni melyik regiszterbe mit kene irni, kiveve ha visszafejted a windows-os (vagy akarmilyen OS-re irodott) drivert
2. hasznalod a sok videokartyaba epitett szabvanyos API-val rendelkezo rutinokat, amit ugy hivnak VESA BIOS EXTENSION. Az x.org vesa drivere is ezt hasznalja es meg sok mas. Ezt se olyan konnyu hivogatni, ez is igen alacsony szintu dolog, de meg mindig konnyebb mint az elso opcio. Ez csak 2D grafikara jo.
Ennel a kettonel sokkal jobb azonban szerintem hasznalni az X megfelelo library hivasait (OpenGL, DGA, XVideo), illetve windows megfelelo library hivasait (DirectX), mert nem lassabb es sokkal kevesebb munka, sot ezek tudnak 3D-t is.
Szinten nem a satantol valo gondolat szerintem kezdetben ennel magasabb szintu librarykat hasznalni, mint az SDL (szerk: illetve bizonyos szempontbol meg magasabb szintu a Qt, Gtk, WxWidget) igy nem kell megirni az oprendszer library hivasokkal minden OS-re kulon a kodot, mert mar megtettek neked. Az emlitett SDL csak 2D grafikara jo (azt hiszem).
szerk: ahol azt irom csak 2D grafikara jo, az persze jo 3D grafikara is, de csak szoftverbol, hardveres gyorsitas nelkul
- Use the Source Luke ! -
- A hozzászóláshoz be kell jelentkezni
Az hiszem ilyesmire gondoltál:
elmélet:
http://www.inf.u-szeged.hu/oktatas/jegyzetek/KubaAttila/grafika_html/sz…
segédanyag (szam_graf_2006_c.pdf) és gyakorlat:
http://www.inf.u-szeged.hu/~tanacs/oktatas/szggraf09/szggraf09.html
másik, korábbi félévről gyakorlat (legjobban sikerült progik letölthetőek):
http://www.inf.u-szeged.hu/~cslaszlo/CG_0607fall.html#HalFam
Devcpp/gcc segítségével win és linux alatt (akár más alatt is) forduló és futó progikat lehet csinálni.
Saját progik példának: link
- A hozzászóláshoz be kell jelentkezni
A megvalósítás itt is a fentebb említett glut-tal történik, bár az elméleti anyag nagyon jó.
- A hozzászóláshoz be kell jelentkezni
http://www.opengl.org/resources/libraries/glut/
"GLUT is the OpenGL Utility Toolkit, a window system independent toolkit for writing OpenGL programs. It implements a simple windowing application programming interface (API) for OpenGL."
De nem muszáj glu-ot használni... OpenGL glut nélkül is kezelhető.
http://www.opengl.org/wiki/Getting_started
http://www.khronos.org/files/opengl-quick-reference-card.pdf
Mondjuk lehet kicsit félreértettem a topic nyitót, hogy ő nem 3D-t akar hanem szimplán valamilyen 2D grafikát csinálni tetszőleges oprendszer alatt. Ez utóbbival az a baj, hogy az adott oprendszer grafikus alrendszere és api-jai nem megkerülhetőek. A hardverhez való direkt hozzáférést nem engedik minden oprendszer alatt. Ha a grafikus kártya működésére kíváncsi, akkor a VESA szabvány doksijának tanulmányozását javaslom, kb az volt a legutolsó szabványos api, amin keresztül mindenféle vga programozható oprendszertől függetlenül (a videobios tartalmazza az api-t).
http://en.wikipedia.org/wiki/VESA_BIOS_Extensions
http://www.monstersoft.com/tutorial1/VESA_intro.html
http://web.archive.org/web/20070928061020/http://www.vesa.org/public/VB…
Kb dos alatt volt még értelme ilyet használni, azóta az oprendszerek által kínált api-n át lehet grafikázni.
Esetleg, ha platformfüggetlenséget akar próbálkozhat a java 3d-vel is.
- A hozzászóláshoz be kell jelentkezni
subscribe
- A hozzászóláshoz be kell jelentkezni
hat figyelj, csinalhatod az egeszet egy nagy pointerben teljesen kezzel [fb = malloc(640*480*32)], de az platformfuggetlenul nem fog neked sehol megjelenni, max ha kiexportalod bmp-be :p
roviden osszefoglalva lehetetlen kersz
--
NetBSD - Simplicity is prerequisite for reliability
- A hozzászóláshoz be kell jelentkezni
Nem kell exportalni, eleve dib formatumban kell a lefoglalt memoriat hasznalni.. :)
- A hozzászóláshoz be kell jelentkezni
Szerintem a low-level és a platform-független ellenkező irányba mutató igény - legalábbis hobbi szinten biztosan.
Ha egy image-et szeretnél megjeleníteni multiplatform, akkor talán vess egy pillantást a wxwidgets-re.
Üdv,
Dw.
"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."
- A hozzászóláshoz be kell jelentkezni
Inkább Qt.
--
http://www.naszta.hu
- A hozzászóláshoz be kell jelentkezni
No, hát köszönöm mindenkinek a válaszát. Sok helyről azt hallottam, hogy ide csak azért járnak az emberek, hogy oltogassák a másikat, ezért aggályaim voltak e fórummal kapcsolatban, de most már megnyugodtam.:)
Azt hiszem megkaptam azokat a válaszokat, amiket kerestem, most megpróbálom megemészteni az olvasottakat.
Utolsó kérdés: hogyan tudom beállítani, hogy a téma előtt ott legyen a [MEGOLDVA] felirat?
- A hozzászóláshoz be kell jelentkezni
Az eredeti, topikindító szerkesztésénél be tudod állítani a címet, és eléírod, hogy [MEGOLDVA]. Ennyi.
- A hozzászóláshoz be kell jelentkezni
Köszi!:)
- A hozzászóláshoz be kell jelentkezni
Ez nem nagyon fog menni. Az X programozásának
legalacsonyabb, de még értelmes szintjéhez minimum az Xlib
kell. Nagyon sokat dob a komfortérzeten az Xt könyvtár.
Ezekkel az eszközökkel mindent meg tudsz csinálni, sok-sok
munkával. Az eredmény meglehetősen hordozható lesz, ha
a C nyelvű részben ügyelsz a kompatibilitásra.
Hozzáteszem: néha szükség van egyéb könyvtárakra is, pl
nagyon jó szálgálatot szokott tenni a libjpeg, de sokszor
nem árt egy olyan rendszer sem mint a Qt (bár ez erősen
C++ aspektusú, ahogy itt kivettem a hozzászólásokból). Ha
szeretsz a dolgok mélyére ásni és egy gyors, kőstabil,
kiforrott rendszer kell, használj (open)motifot. Ez
utóbbihoz tudok kód példákat adni, illetve van egy
minimális mintaprogramom az ftp szerveremen, azt is
letöltheted, abban van pixelkezelés.
protokol: ftp
domain: meditor.hu
user: public
passwd: nyomj egy üres entert
cd ./xwin_demo
és itt van egy tar.gz
Én így csinálnám.
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni
"de nekem csak olyan enter-em van, amire van irva/rajzolva valami, ures nincs!" :-)
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Hát az már baj. A szerverem szűri a dizájnos billentyűzeteket.
> Sol omnibus lucet.
- A hozzászóláshoz be kell jelentkezni