Windows.h grafika C++ / C esetén

Windows.h grafika C++ / C esetén
2011-07-30T22:33:36+02:00
2011-08-08T09:52:10+02:00
2022-11-22T17:55:36+01:00
subdiaz
Sziasztok,

játékot programozok C++ környezetben, de C nyelven (tehát ha valamit "véletlenül" C++ nyelven írok az sem olyan nagy gond). Szeretnék színeket, ESETLEG 3D-t, és hangot. Na meg az sem ártana, ha nem karakteres, hanem pixelgrafikus lenne.

A színes karakterekkel már jól állok, találtam egy kódrészletet, ami elmenti az aktuális rendszerszínt (előtér és háttér), majd felülírja, és végül visszatölti az eredetit. Tud szürkét, feketét, fehéret, és RGB 3 színét, mindezt elő és háttérszínben. Ebből elkezdtem írni egy "környezetet" millió függvénnyel, hogy bármilyen 2D-s színes karakteres játékot / programot tudjak írni később.

Viszont nem tudom, hogyan tudnék pixelgrafikát csinálni, anélkül, hogy használnék STL-t (cpp) vagy DX-et ill. OPEN GL-t. Vannak például OPEN GL alá készült környezetek, mint
1
és
2
Az utóbbihoz még 3D videókártya sem kell, CPU-ról dolgozik teljesen, az előbbi meg egy 3D kártyás OPEN GL-re írt akármi.

Én valami olyat szeretnék, hogy windows.h-ból, vagy dos.h-ból lehessen pixeleket kirajzolni, nagyon sok (mondjuk 256) színnel. Nagyon megköszönném, ha valaki írna szemléletes rövid példát.

Ezen a videón:
3
egy srác csinált egy 2D-s SZÍNES (!!!) pixelgrafikus játékot, C++-ban, windows.h-s dolgokkal, minden egyéb nélkül. Ahogy látom ablakos és nem konzolos programja van, és ablakoshoz nem értek, ott vannak valami plusz dolgok. Tudja valaki hogy lehet windows.h használatával ablakos programban pixelgrafikát, cpp alatt?

A hang dologgal is megszenvedtem. Vannak bonyolult könyvtárak, amik segítenek pl. mp3-at lejátszani. Nekem nem ez kell. Valami dos.h vagy windows.h szerű dolog. Valaki tud valami leírást vagy tippet adni ehhez? Van egy "beep" nevű dolog, sokféleképpen előcsalható, még printf-fel is. Ez annyira klassz, hogy időtartamot és frekvenciát is lehet állítgatni, tehát egy egész dallamot, zenét össze lehet belőle hozni (bénát, de nekem tetszene). Az alaplapi hangszórót használja, nem a hangkártyánál lévőt. Egyedül egy nagyon régi gépemen működik, de ott sem az alaplapi hangszóró szól, hanem az oprendszerben a beállított dallam egyszer lejátszódik, magyarul fújhatom a frekvenciát és az időtartamot valaki tudja hogy kell a beep-et rendesen használni, hogy alaplapról szóljon, és legyen frekvencia+időtartam állítgatás (=dallam)?

A 3d ahogy nézegettem mindenféleképpen nagyon összetett dolog, azzal talán még várok.

Köszönöm a segítséget!
És ha valaki tud magyarnyelvű és érthetőbb leírást a dos.h és a windows.h könyvtárakról, azt is megköszönném, sok jó dolog van bennük.

(lehet hogy át kéne térnem a Borland régi-régi C-jeire, azokban van grafika is, hang is kiegészítésképp)

SZERK: ha valakinek kell a színes karakteres "környezetem", akkor szóljon, ha kész lesz odaadom / elküldöm / feltöltöm, vagy még az elkészülte előtt, leírom azt az 5 sort ami a lényege az egésznek, és elmagyarázom hogy kell használni
Mutasd a teljes hozzászólást!
Igazán semmi közöm hozzá, de én a helyedben nem foglalkoznék egy percig sem 'windows.h-s' rajzolással. Olyan problémákkal fogsz küszködni, amik már 10 éve nem is léteznek, az eredmény meg sokkal több munkával is sokkal kevesebb lesz (ha valami speciális oka van, nem csak ad hoc döntés, esetleg valaki valahol ezt tanította neked, hogy milyen menő - akkor bocs.)

A fentebb írt SDL tényleg jó ötlet, mondjuk egy Visual Studio express-el kb 10 sorból van egy ablakod, és lekérhetsz az ablak framebuffer-jére egy memóriaterületet, amibe azt rajzolhatsz, amit akarsz és nem 256 színnel, hanem 24 bit-en (16,5 millió). Az SDL rajzoló fv-it is használhatod, de van benne input, képbetöltés, hang, meg miegymás, minden, ami kellhet egy 2d-s játéknak. Ráadásul OpenGL-t is lehet benne használni, ami még tovább mutat. Mindezt multiplatformon tudja. Linuxon is menne, sőt a google natív 'nemtommilyében' még böngészőben is futhat
(elvileg )

Én kezdő cpp-s grafikázóknak mindig ezt ajánlom, mert könnyű, és nem avult el már nagyonnagyon régen.
Mutasd a teljes hozzászólást!

  • amúgy találtam egy ilyet is:

    bme-s oldal

    itt érdemes lapozgatni, van grafika, hang, meg miegymás, kérdés hogy mennyire nehéz működésre bírni, pl. ha nincs graphics.h fájlom, mennyire nehéz integrálni, de a leírás eléggé jónak néz ki
    Mutasd a teljes hozzászólást!
  • Még egy kérdés: komoly nagy programoknál (win alatt) van egy .exe, amit futtatni kell, de mellette még van millió más fájl. Hogyan lehet olyan programot csinálni, ami fordítás után is sok fájlból áll?

    Mondjuk van lehetőség rá, hogy bizonyos c és h fájlokat külön fordítunk le, és azok összedolgoznak? Fájlkezelést ismerem, tehát olyat tudok csinálni, hogy van mondjuk egy hiscores.dat, (tökmind1 mi a kiterjesztése) és oda írogatok meg olvasok dolgokat. Bizonyos módon lehet képeket vagy zenefájlokat is kezelni, de én nem erre gondoltam, hanem hogy a kód ne egy exe fájlban legyen, hanem több külön fájlban, amik kommunikálnak egymással.

    Így kicsit jobban nézne ki utána a program.
    Mutasd a teljes hozzászólást!
  • Lehet, hogy a DLL-re gondolsz? (Az a gond, hogy nem ismered a programozás alapfogalmait, így nem is tudod precízen leírni a kérdésed.)
    Mutasd a teljes hozzászólást!
  • bme-vik mérnökinfós vagyok, most jön a 3. félév, szóval ismerek egy-két dolgot...

    Dll-eket nem szoktam használni, valószínűleg az is ilyen mint amit kérdeztem. Nagyon sok programot írtam már, de fordítás után mindegyik egyetlen fájlból állt, egy futtatható fájlból (meg esetleg még olyan fájlok, amiket a program használt: adatfájlok, képek, hiscores, stb.). Én arra gondoltam, hogy lenne egy exe, de ez nem tartalmazna mindent, ami a futáshoz kell, hanem lennének még más fájlok is. Ezek szerint gondolom a dll-ek ilyenek. Hogyan lehet dll-t csinálni mondjuk MS Visual Studio / Win / C ill. C++ esetén?

    (illetve volt még millió más kérdésem is feljebb)
    Mutasd a teljes hozzászólást!
  • Ha a BME-re jársz, akkor nem értem miért gond az OpenGL/D3D használata. SZVSZ világszinten elismert előadó van a BME-n. Várd meg szerintem amíg odajutsz a tananyaggal ezt a bohóckodást meg ne erőltesd. Ezt és ezt nézegesd inkább.

    Ha teljesen ki akarod hagyni a grafikus API-t az OpenCL/CUDA részt nézd, de az nem a kezdő szint, hogy saját renderelőt fejlessz.

    A hang pedig nem tudom mitől bonyolult. Szerintem ez pofonegyszerű.
    Mutasd a teljes hozzászólást!
  • Mondjuk az nekem megdöbbentő, hogy egyetemre jársz "sok programot" írtál már, de ennyire alapszintű dolognak, mint a dll készítése nem tudsz utánanézni és megoldani. Komoly elvérzés lesz itt, ha nem szeded össze magad.
    Mutasd a teljes hozzászólást!
  • A többi kérdésemre is szeretnék választ kapni. Egyébként meg sem prog1-ből, sem prog2-ből nem volt szó dll-ekről, mivel nem tudtam mire jók, nem is tudtam utánanézni konkrétan a dll-eknek. A többi kérdésre nekem most fontosabb a válasz.

    Egyébként meg ez még nem ad okot arra, hogy bármikor is elvéreznék. Pont ez nem tetszett így 2 félév után, hogy az elején, amikor az ember még tapasztalatlan, behülyítenek, hogy ezt is meg azt is tudnod kéne már, és mindenre azt mondják az előadók, hogy nehéz. Semmi sem nehéz, kivéve ha elhitetik veled. Továbbá, ez a "mivan még numerikus integrálást sem tudsz assembly-ben pedig már három hete ide jársz, igaz nem azt a nyelvet tanuljuk" dolgok nem tetszenek.

    Igen, vannak akik annyira keveset tudnak, vagy nem tanulnak elég sokat, hogy nem valók a BME-re. Őket ki is rúgták, vagy nagyon rosszul állnak. Én nem sorolnám magam közéjük, szerencsére. De attól még hogy nem tudom, hogyan lehet dll-eket létrehozni, simán lehettem prog1-ből, prog2-ből, bsz-ből, anal-ból négyes-ötös.
    Mutasd a teljes hozzászólást!
  • 3. félévben Java-val majd fogtok ablakba pixeleket rajzolni, ha vársz egy kicsit, akkor viszonylag fájdalom mentesen megúszod ezt a részét.

    Ha nem akarsz várni, akkor két lehetőséged van:
    1. Maradsz DOS-ban Borland C-vel, és tudod használni a dos.h-t, és graphics.h-t, amit linkeltél.
    2. Windows-on maradsz, és használod a windows-os dolgokat:
    Konzol kezeléshez (kurzor mozgatás, karakter szín állítás): Console Functions.
    Ablakos grafikához először is ablakot kellene tudni csinálni. Ha ezt közvetlenül Win32-vel szeretnéd (kb amit windows.h-nak hívsz), nézd meg Charles Petzold: Programming Windows, Fifth Edition könyvét. Ez eléggé macerás, és simán elmehet az egésztől a kedved. De legalább rájössz, hogy a nyelven kívül még más is van.
    Vagy keresel valami könyvtárat, ami elfedi előled a macerás részét a dolognak, ilyen pl. az SDL. Sok helyen OpenGL-ről, meg C++-ról lesz szó, de lehet vele pixel szinten C-ből is szöszölni. Ránézésre ez a tutorial erről szól: link.
    Mutasd a teljes hozzászólást!
  • Pont arról szólt, amit írtam, hogy hiába végzed el jelesre az iskolát, ha alapoknak sem tudsz utánajárni. Ez a szakma arról szól, hogy folyamatosan utána kell járni dolgoknak, nem arról, hogy az iskolában megtanítják egyszer és 50 év múlva is ugyanazt használod.

    Egyébként, ha ennyire mindent magad akarsz írni programozhatnál c64-et is. Ezt nem hülyeségből mondom, tanulságos. Ma már más módszerekkel programozunk.
    Mutasd a teljes hozzászólást!
  • Igazán semmi közöm hozzá, de én a helyedben nem foglalkoznék egy percig sem 'windows.h-s' rajzolással. Olyan problémákkal fogsz küszködni, amik már 10 éve nem is léteznek, az eredmény meg sokkal több munkával is sokkal kevesebb lesz (ha valami speciális oka van, nem csak ad hoc döntés, esetleg valaki valahol ezt tanította neked, hogy milyen menő - akkor bocs.)

    A fentebb írt SDL tényleg jó ötlet, mondjuk egy Visual Studio express-el kb 10 sorból van egy ablakod, és lekérhetsz az ablak framebuffer-jére egy memóriaterületet, amibe azt rajzolhatsz, amit akarsz és nem 256 színnel, hanem 24 bit-en (16,5 millió). Az SDL rajzoló fv-it is használhatod, de van benne input, képbetöltés, hang, meg miegymás, minden, ami kellhet egy 2d-s játéknak. Ráadásul OpenGL-t is lehet benne használni, ami még tovább mutat. Mindezt multiplatformon tudja. Linuxon is menne, sőt a google natív 'nemtommilyében' még böngészőben is futhat
    (elvileg )

    Én kezdő cpp-s grafikázóknak mindig ezt ajánlom, mert könnyű, és nem avult el már nagyonnagyon régen.
    Mutasd a teljes hozzászólást!
  • Ha tényleg ki akarod hagyni az összes segédkönyvtárat, és mindent te szeretnél csinálni, akkor elég jól kellene ismerni a WinApi-t és a GDI-t. (Hangot még soha nem csináltam, de nyilván azt is lehet valahogy.) Nem olyan nagy ördöngösség, és ekkor csak a windows.h kell. Szerintem jó móka, sokat lehet belőle tanulni (én mondjuk lustaságból használtam a math.h-t is ).
    Mutasd a teljes hozzászólást!
  • Tudnál mondani néhány alapvető példát windows.h / winapi / gdi esetén pixelgrafikára és színekre, amiket mint mondtad, eddig is sokat használtál? Esetleg valami saját oldalad linkjét amin vannak példaprogramjaid?
    Mutasd a teljes hozzászólást!
  • Az, hogy sokat használtam, egy kicsit erős túlzás. Általában akkor használtam, hanem akartam hardware-es gyorsítást, és gyakorolni akartam a 3D modellezés számításait.
    Nade, íme egy pár kulcsszó az elinduláshoz:

    -GDI tutorial
    -BeginPaint
    -CreateCompatibleDC
    -CreatePen
    -CreateBitmap
    -SetPixel
    -COLORREF
    -stb.

    Rengeteg tutorial van a neten.
    Abban egyetértek Tromtrommal, ha kezdő vagy, és a grafika a lényeg, akkor nem érdemes vele foglalkozni. Ha azonban meg akarod ismerni a windows lelkivilágát, akkor én teljes jóindulattal tudom javasolni a használatát.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd