Java és a grafika
2008-12-28T13:29:58+01:00
2008-12-28T23:24:39+01:00
2022-07-25T18:26:18+02:00
  • (...).Amúgy ha végignézzük az elmúlt 20 év játékait, akkor alig lehet találni olyat, amiben sima scroll található (talán egy sincs).


    az általad tapasztalt állandó tearing jelenség mögött szerintem egy kikapcsolt állapotú vsync kapcsoló áll.

    Emiatt divat inkább 3D-s játékot csinálni, mert ott ez a jelenség nem jön elő, magyarul a PC 3D-ben erős, 2D-ben pedig nagyon gyenge.


    DX-ben pl. a 2d-s "részt" is a 3d-s "rész" csinálja.

    2: ezt nem a képkockák számának növelésével oldják meg, hanem az animáció időhöz kötésével.

    1: erre pl. nagyszerű megoldás a dupla pufferelés a vertical retrace bevárásával. ahol nem lehet ennyire mélyen turkálni ott tényleg csak trükkök maradnak az embernek (frissítendő rajzterület nagyságának minimalizálása stb.)
    Mutasd a teljes hozzászólást!
  • Nálam ez az applet amit példának hoztál fel nem fut olyan rosszul (szépnek sem mondanám).

    Igazából a PC azt a mozgást nem szereti, amikor valami a képernyő egyik pontjából a másikba szeretne eljutni egyenletes sebességgel. Szóval nem ajánlott egy jobbra-balra mozgó téglalapot csinálni.
    Ha van egy szines háttér, és ez előtt mozog egy figura ami nem téglalap, és még animált is, akkor már nem feltünő a "nem sima" mozgás. Szintén javit a dolgon, ha minél több képkockát rajzolsz másodpercenként. Én 30 képkockára szoktam belőni a programokat, de egy kissebb applet 80-100 képkockát is kirajzolhat gond nélkül (Ha a monitor mondjuk 75 Hz-es akkor elméletileg 75-öt kellene).

    Iletve ha tudnád hogy hol jár az elektronsugár ami a képet rajzolja a monitorban (nem tudom jávában le lehet e kérdezni, vannak nyelvek amikben igen), akkor ha megvárod hogy a képernyő (legalábbis az ablak) aljára ér és akkor rajzolod ki a képet, akkor ki tudnád küszöbölni az egyik nagy hibát, és nem "csikozódna" a kép.
    Nem kizárt, hogy vannak programozók, akik az összes ilyen problémát meg tudják oldani, csak sajnos nem divat appletet irni, igy kevesen lehetnek (mondjuk akik MegaDrive meg C64 emulátort irtak jávában azok már tudhatnak valamit).

    De ez a jelenség nem mindig jelentkezik, mondjuk egy 3D-s játékban egyáltalán nem. Ilyet mondjuk ritkán ir az ember jávában, de egy össze-vissza mozgó vonal már "tükör sima" tud lenni. Vagy ha álló háttér előtt mozognak dolgok. Illetve ahogy irtam, egy frankó időzitéssel, esetleg egy grafikus szűrővel csodákat lehet művelni. Gyakorlat kérdése az egész. (mondjuk 1-2 csúcskategóriás appletet énis megnéznék szivesen.)
    Mutasd a teljes hozzászólást!
  • Köszönöm, ez érdekes. Szóval a hibát meszűntetni nem, csak megkerülni lehet.
    A programjaid tényleg szépen futnak.
    Ahogy látom minél kisebb és minél lasabban mozog valami, annál jobb.
    Találtam közben egy példát egy elképesztően csúnya futásra is.
    Mutasd a teljes hozzászólást!
  • Ez a demo applet tényleg nem túl jól fest.

    Ennél sokkal szebb animációkat lehet szerencsére csinálni.
    Sajnos azonban bizonyos gondok mindig jelentkeznek majd, de nem a java nyelv miatt, szóval más nyelvekben is.

    1-A monitor "túl jó". Amelyik animáció mondjuk tévén nézve tükör sima, az akadozik, vibrál, csikos stb. Oka, hogy a monitor túl gyakran frissit, meg túl éles képet ad. Ha mondjuk csak 30 képet adna másodpercenként, meg mosná a pixeleket akkor lehetne sima scrollt csinálni. Meg a gyorsaság átka, hogy kirajzolsz egy téglalapot, még felénél tartasz, közben a videokártya megjeleniti a képet, és neked csak a fele téglalapod fog megjelenni a képen.
    Esetleg hardveres segitség javit ezen, mondjuk ha OpenGL-el csinálsz 2D-s animációt. Vagy vannak trükkök, lehet finomitani, de maga a jelenség mindig ott lesz, legfejlebb nem lesz feltünő.

    2-Elég nehéz PC-n pontosan időziteni, főleg Windows miatt, hogy mindenféle folyamatok futnak "össze-vissza". Emiatt lehet, hogy 30 képkockával fut a programod (ami bőven sok), de a képkockák között nem egyenlő idő telik el, igy "szaggat" az animáció. A képkockák számának növelésével próbálják ezt javitani, meg ezért van, hogy a profi játék is úgy tűnik "szaggat", miközben a képkockák száma elméletileg megfelelő.

    Amúgy ha végignézzük az elmúlt 20 év játékait, akkor alig lehet találni olyat, amiben sima scroll található (talán egy sincs). A legújabb csilli-villi játék végén is a stáblista akadozik, szaggat. Emiatt divat inkább 3D-s játékot csinálni, mert ott ez a jelenség nem jön elő, magyarul a PC 3D-ben erős, 2D-ben pedig nagyon gyenge.

    Az meg megint igaz, hogy a Java applet irása nem foglalkoztat túl sok embert, igy kevesen jutnak el arra a magas szintre, amivel felül lehet kerekedni a problémán. Ha meg kezdő vagy, akkor minden nyelven találkozol ezzel a dologgal az elején. Ha megnézzük a Flash animációk sem olyan simák, csak "mossák" össze-vissza, mint ahogy emulátorokon is próbálnak javitani a képeken. Nem tudom java appletekhez van e ilyen szűrő, készitett e bárki.

    Ja, ha nem gond mutatok két java appletet:
    Egy űrhajós-lövöldozős játék (JRE 1.6 szükséges)
    Mászkálós (Mario szerű) játék (JRE 1.6 szükséges)

    Ezeket én csináltam az ősszel-nyáron. Semmi különösebb időzitést nem használok, a grafikai trükkökből se nagyon, szóval ez még messze van attól a szinttől amit el lehet érni. Kicsit pixeles a kép, mert DOS-on nőttem fel, meg 320x200-as felbontáson és nekem ez tetszik (szóval direkt ilyen), meg lassabb gépeken is jól futnak. Meg talán a vibrálás /szaggatás is kevésbé jelentkezik, mint jobb felbontásban, bár komolyan ezt még nem teszteltem.
    Régebben akartam csinálni egy olyan scrollt, hogy egy szöveg fut keresztbe a képernyőn, na az elég nagy feladat, nem is sikerült úgy megcsinálni, hogy sima legyen a mozgása.
    Mutasd a teljes hozzászólást!
  • A frame rate-et maximalisra novelve nekem eleg akadozasmentes. Meg >>ez sem akadozik egy csoppet sem...
    Mutasd a teljes hozzászólást!
  • Helló!
    Találtam egy érdekes blogot, de hozzá tartozó példa applet még érdekesebb:
    http://today.java.net/today/2006/02/23/SmoothMovesDemo.html

    Ami eszembe jutott róla:
    Tényleg ez a legjobb minőségű animáció, amit Javaban el lehet érni? Nem mondható, hogy az író nem értene hozzá, mégis egy rakás trágyaként hat az egész. A kép képtelen akadozásmentesen mozogni, néha villog, stb. Néztem pár FX-es példát is, de ott is ez látható a mozgó objektumoknál.

    Van így az appletnek, de még inkább az FX-nek jövője? Vagy a Java végleg a szerver oldalra szorul?
    Mutasd a teljes hozzászólást!
abcd