Hello,
szuksegunk lenne egy olyan programra, amelyik ms-os nagysagrendu ideig kepes kepet felvillantani. Ehhez keressuk a megfelelo programozasi nyelvet. Voltak probalkozasok java-ban, ezzel nem mukodott. Aztan jott a Pascal, de egy bizonyos kuszob alatt ez sem mukodik. Ehhez Assembly kell? Vagy mukodhet mas?
D.
- 4875 megtekintés
Hozzászólások
Milyen hw-en kell történnie?
- A hozzászóláshoz be kell jelentkezni
Ebben asszem szeles a valasztek :) Van ketmagos inteltol kezdve PII-ig minden.
--------------------------
Debian etch, 2.6.18-3
- A hozzászóláshoz be kell jelentkezni
A megjelenítésre gondoltam. Mi az a hw, ami ms-es ideig tud megjeleníteni????!!!!
- A hozzászóláshoz be kell jelentkezni
Bocs. Marha faradt vagyok. Milyen hardware parameter kell? Videokartya, monitor?
--------------------------
Debian etch, 2.6.18-3
- A hozzászóláshoz be kell jelentkezni
Azért kérdeztem, mert nem a processzortól függ (bármely proci képes rá), hanem a megjelenítő eszköztől (monitor?). A monitornál eleve egy nagyságrenddel feljebb számolhatsz csak. Tehát a ms időzítés és megjelenítési tartomány ugrott. Másrészt ez nem időzítés és programozási nyelv kérdése, hanem ez egyszerűen egy valósidejű programozási feladat, amihez eleve kell vagy egy valósidejű operációs rendszer. Vagy ha VGA kártya + monitor, akkor el kell azt érned, hogy a képfrissítési ciklus végén tudjál képkockát váltani, Vertical Retrace interrupt, vagy ha tudja a hw, akkor megadod neki, hogy a következő képkockát hol van. Amúgy Real Time java-val megoldható ;-)
- A hozzászóláshoz be kell jelentkezni
OpenGL-el C++-ban szerintem megoldható, aztán már csak egy DVI-os minőségi videókártya kell és egy 2ms válaszidejű TFT.
- A hozzászóláshoz be kell jelentkezni
Kosz a tippet. Valszeg akkor a monitor lesz a szuk keresztmetszet. Ha van meg esetleg egyeb otlet, megkoszonnem.
--------------------------
Debian etch, 2.6.18-3
- A hozzászóláshoz be kell jelentkezni
Számoljunk egy kicsit:
Ha 100Hz-el hajtasz crt monitort akkor 10mS 1 kép cseréje
Ha 1000Hz akkor 1mS!!!!!
A TFT mindíg ugyanannyi idő alatt cserél képet akármennyivel is hajtod
A feladatot lehetetlen megoldani
- A hozzászóláshoz be kell jelentkezni
tudat alatti reklámozás csúnya dolog!
- A hozzászóláshoz be kell jelentkezni
Nem az a cel :) Bar az egyebkent sem muxik...
--------------------------
Debian etch, 2.6.18-3
- A hozzászóláshoz be kell jelentkezni
Én nem ezt hallotam/olvastam, de fene sem tudja mennyire hihetek ezeknek a forrásoknak (slashdotnak nem, meg wikinek sem, meg scifi channelnek sem :) akkor lehet tényleg nem igaz? mind1)
Azte lehet/szabad tudni mire kell? Érdekes probléma lehet, ha ilyen funkció kell neki.
- A hozzászóláshoz be kell jelentkezni
google -> priming
Kozelebbit en sem tudok. Nem vagyok erintve csak beszeltunk rola.
--------------------------
Debian etch, 2.6.18-3
- A hozzászóláshoz be kell jelentkezni
Primingre a legegyszerűbb sztem gif animációt csinálni.
Nem 1-2 ms-ról szól, hanem nagyrészt 40ms-tól felfelé.
A mozi meg 25 fps-sel pont ennyi.
Persze az fps növelhető simán, de 40ms alatt IMHO minek?
- A hozzászóláshoz be kell jelentkezni
Nem tudom fejbol hany ms-nak kell lennie, de asszem ilyen 40-50 korulit mar vagy java-val vagy pascallal sikerult elerni de vmiert nem volt jo.
--------------------------
Debian etch, 2.6.18-3
- A hozzászóláshoz be kell jelentkezni
Aztan jott a Pascal, de egy bizonyos kuszob alatt ez sem mukodik.
Nnamost, nemertem a kerdest. Egyebkent az ilyen rovid kepfelvillantas sokmindentol fugg. Peldaul a monitortol is igen, a kepfrissitesi frekvenciatol, meg a monitor<->videokartya kombinaciojatol.
Peldaul egy 75Hz-n mukodo monitornal 1000/75 = 13,3333 ezredmasodperc a legrovidebb ido, ami alatt meg tudsz jeleniteni valamit. Ez alatt a teljes frame-et ertem. Rovidebb ideig is kirakhatsz valamit, de akkor csak annyit ersz el, hogy a teljes kep nem fog latszodni, mert egyszeruen a monitornak nincs ideje kirajzolni, mar le is torolted.
Egyebkent ha olyat probalsz, hogy:
begin
kirakomakepet();
Delay(100);
letorlomakepet();
end;
Akkor ez tenyleg nem fog mukodni. Egyebkent Pascalban pl. OS-fuggo, hogy a Delay(); mennyi ideig var. Turbo Pascalban alapbol szar es megbizhatatlan volt, Free Pascalban pedig altalaban az OS legkisebb idoszelete az a minimalis ido, ami ido alatt visszater. De ugyanez igaz C-ben a POSIX fuggvenyekre is, egy usleep()-nel is ugyanigy OS fuggo a minimalis ido, ami alatt vissza tud terni.
Multitaszkos rendszerek alatt egyebkent is eleg katasztrofalis az ilyesmi, sokminden bezavarhat. De az a szokas, egyebkent ilyenkor, hogy bekapcsoljuk a vsyncet (azaz a monitor vertikalis visszafutasahoz idozitest) a videokartya drivereben, elokeszitjuk a kirajzolasra szant kepet egy nem lathato surface-n, majd kirakjuk, buffert valtunk (itt a kartya idozit a monitorhoz, ha bekapcsoltunk a vsyncet), aztan letoroljuk, es megint buffert valtunk.
Ekkor a kepunk pontosan 1 frame-ig volt lathato, - ami a fentebb vazoltak miatt - a kijelzon elerheto legrovidebb idoegyseg. Felteve ha eleg gyorsan le tudtuk torolni a buffert, illetve az alattunk futo multitaszkos OS nem pofazott belenk... A fenti algoritmust egyebkent barmilyen nyelvben viszonylag konnyen lehet implementalni, abszolut nem programnyelv fuggo. Javaban OpenGL hasznalataval (az OS megfelelo beallitasai mellett) elerheto ez, Pascalban ugyanigy (esetleg SDL vagy DirectX hasznalataval szinten), de C-ben, Assemblyben, vagy barmiben is. :)
Az algoritmus a lenyeg, meg az hogy a hardver kepessegeihez legyen igazitva, nem az, hogy miben irod. Na jo sok hulyeseget pofaztam ossze, de talan igy vilagosabb. :)
-=- Mire a programozó: "Na és szerintetek ki csinálta a káoszt?" -=-
- A hozzászóláshoz be kell jelentkezni
Nagyon koszonom a kimerito valaszt. Aszittem az a gond, hogy magas szintu programnyelvvel tortent probalkozas.
--------------------------
Debian etch, 2.6.18-3
- A hozzászóláshoz be kell jelentkezni
Már csak az érdekelne, hogyan/mivel ellenőrzöd, hogy felvillant a kép?
- A hozzászóláshoz be kell jelentkezni
Ha a buffervaltas vblankhoz van idozitve, akkor nem kell ellenorizni, mert biztos h. felvillant. Leven ha buffert valtok, akkor a kovetkezo buffervaltas csak a kovetkezo vblanknal fog megtortenni, ami azt jelenti hogy egy frame-ig kintvolt a kep. Ez pedig pont az, amit akartunk. Szerintem. :) Vagy nemertem a problemad.
-=- Mire a programozó: "Na és szerintetek ki csinálta a káoszt?" -=-
- A hozzászóláshoz be kell jelentkezni
Ha csak egy képet kell felvillantani, gazdaságosabb trükközni.
trükk_init();
kép_kirak();
trükk_be();
delay();
trükk_ki();
Trükk: olyasmi, ami a képkirakásnál lényegesen gyorsabb. Pl:
- paletta feketére állítása, képkirakás, paletta bepöccintése
- kép kirakása valami double buffer hátára, flippentés a videokártyán.
- játszadozás a szinkronjelekkel (új monitorok utálják)
- monitor előtt forgó takarólemez.
- felhasználónak kiadni hogy gyorsan kell pislogni.
- stb.
- A hozzászóláshoz be kell jelentkezni
"- felhasználónak kiadni hogy gyorsan kell pislogni."
Azert azt a usert megcsodalnam, aki ms-os nagysagrendben tud pislogni... :)
--
Fontos feladatot soha ne bizz olyan gepre, amit egyedul is fel tudsz emelni!
- A hozzászóláshoz be kell jelentkezni
Most irtam meg fent, hogy a Delay(); miert nem jo nagyon kicsi idoszeletekre varasnal... Jo moka ha mindenki csak write only egy forumban. A mai multitaskas rendszerek belepofaznak, ezenkivul belevag a vblank, es "joesetben" csak egy fel frame-et fog latni az user. Stb.
-=- Mire a programozó: "Na és szerintetek ki csinálta a káoszt?" -=-
- A hozzászóláshoz be kell jelentkezni