-
tak ja se to zkusim popsat nejak lip ten obraceny postup.
zdrojove veci budu indexovat 1 a cilove 2.
postupne budes prochaze obrazek2 a kazdou jeho souradnici x2,y2 zpracujes tak ze si to nekam ulozis. ztrancformujes o tu rotaci a vypocitas x1,y1 coz jsou souradnice do obrazk1. z obrazek1 na souradnicich x1,y1 vemes pixel a prekopirujes do obrazek2 na x2,y2 ktere se nemenili. jeste ti to muzu napsat jako algoritmus v cecku :) ale ja myslim ze s timhl esi uz poradis. takhle to je odolne i na zvetseni coz to tve neni. to tve by pri zvetseni ty diry zvetsovalo ! zkus. tim mim pro kazdej! cilovej pixel pocitas pixel ze zdroje. pokud pro kazdej zdorojovej pocitas cil nemas zajistene ze tim pokrejes vsechny cilove.
-
Este sem udal takovy experiment, ze sem si nasel ten "spatny" bod a vypsal jeho souradnice. Pak sem je spocital podle tech transformacnich rovnic na kalkulacce (TI-89) a vysledek byl tentyz jak na PC => chyba neni v zaohrouhlovani nebo implementaci sin/cos ale primo v tom algoritmu. Ono pri te rotaci dochazi i ke zmene meritka a vubec takovym zajimavym pochodum, kdy proste regulerne dojde k preskoceni nejakyho bodu...
Pokud sem te dobre pochopil, tak bych mel projizdet po radkach celou obrazovku a zistovat, jesi se nahodou bodem z obrazovky netrefim do zdrojove bitmapy.
To je ale pro muj ucel trochu nevyhodny, kdyz budu kreslit jeden mrnavej rotovanej obrazek na velikou obrazovku, tak budu muset projit stejne veschny body na obrazovce. Pro tvuj ucel to nevadi, tam chces naopak zaplnit celou obrazovku. Kdyz ale ja bych chtel jen fci na vykresleni jednoho obecne natocenyho obrazku, kterej zdaleka nemusi pokryvat celou obrazovku.
Samozrejme ze kdybych chtel pritom este zvetsovat nad 100% tak bych musel vznikajici prazny mista vyplnovat nakou interpolaci (coz u palety asi nee) nebo nejblizsim sousedem.
Mzna ze mas pravdu, ze to ani jinak delat nejde, ale me to furt vrta v hlave...
-
aby si kreslil jen kousek musel by si na to jit jinak. treba si brat jen cast obrazovky, ze a ne celou, kolik ji vemes je jedno. to jde uz jen o posuny v te bitmape. nebo si napocitat obrys tim tvym a vyplnit mim :/ jinak nevim
-
Tak neska mam po zkousce (sice ne zrovna z programovani), se na to konecne mrknu a zkusim to podle tebe. S tim obrysem by to slo, ze bych si pro zacatek stanovil okno na obrazovce a prochazel jen to.
-
Koukam, ze z toho rotozoomera se za chvili vyklube nova implementace softwaroveho OpenGL :wink:
-
No trosku se amatersky programovanim grafiky zabyvam... SW opengl z toho ale nebude, od toho tu je uz MESA ci Allegro a pod. knihovny. Ikdyz zas nejsou nejmensi a mozna ani ne nejrychlejsi.
Jinak si Glottis zaslouzi za sve dilo jisty obdiv, padz pure ASM coderu je uz jako safranu.
-
hehe :) neprehanej zase. to byla semestralka pro vsechny vypocetkare 5 semestru FELu. teda ne kazdej mel rotozoomer :) sem byl jedinej. ale na to ze sem v tom delal prvni semestr sm prekvapenej ze to jde zvladnout :)
a ze to je pure ASM vyplyva z me lenosti si shanet stare C a nebo pascal abych mohl udelat vkladanej asm :) programatori jsou liny prasata :))) jak rikal nas cvicici na asm :) radsi budou va dny psat prog na neco nez aby to udellai rucne :)
-
OK to sem trochu prehnal, inac bys asi nemel zapocet co? ;D
Jinak nevim v cem horsi/lepsi by mel bej vkladanej ASM z C, takle je to prave ono. Proste sem chtel jen naznacit ze je dobre, kdyz se lidi este uci a umi neco v ASM, padz se cimdal tim vic dela stylem: at to ma hezky wokynka, je to veliky a pomaly (od toho je prece upgrade PC) a hlavne je to HNED. Obdivuju dila jako vyse zminovane Second Reality, myslim ze uz by neco takoveho (aby to chodilo i na tehdejsich 386) svedl malokdo. Dneska se vecina dem pise pro D3D/Ogl a pak to taky podle toho vypada, jen par z nioch vycniva z sedeho prumeru libive akcelerovane grafiky. Proste oldskool rulez.
-
:) hlavne kdyz se ted zacina vsude ucit JAVA. sem na ni uz alergickej.
-
Mno ja se v tehlech modernich a hlavne visual jazykach nak moc necapu...
Tak neska sem to zkusil udelat, jax rikal, obracene a FUNGUJE to!
Ale nepouzil sem tam zadny arctan a pod, jen sin cos:
Kód:
sincos(&cosa,&sina,PI*angle/180.0); // preved uhel na radiany a spocni sin cos
for (j=y1; j<y2; j++) // pres vsechny radky v boundboxu
for (i=x1; i<x2; i++) // pres vsechny body radku boundboxu
{
x=0.5+img_xmid+mag*((i-image.xofs)*cosa-(j-image.yofs)*sina);
y=0.5+img_ymid+mag*((i-image.xofs)*sina+(j-image.yofs)*cosa);
if ((x>0)&&(y>0)&&(x<image.xres)&&(y<image.yres)) // jsou-li x,y platne souradnice v obrazku
vesa_putpixelu(i,j,image.p_imgbuf[x+y*image.xres]); // vykresli je na aktualni pozici
// else
// vesa_putpixelu(i,j,255); // vykresli boundbox-pro kontrolu
}
Abych zbytecne neprejizdel celou obrazovku, tak si napred spocitam hranice, pres ktery mi to nepreleze a pak jedu uvnitr. Taky pocitam sin a cos pomoci jedny funkce, ktera by mea bejt rychlejsi. Samozrejme vne cyklu, ikdyz to by kompajler za me stejne zoptimalizoval.
V tomle programu sem nechal bile vykreslovat ten boundbox:
http://www.volny.cz/xfer/4all/rotate3.exe
Docela me to zaujalo a tak sem to dotah do konce, a udal z toho taky poradnej rotozoomer + benchmark.
http://www.volny.cz/xfer/4all/rotozoom.exe
Bez parametru vypise napovedu k ovladani, umi nacitat TGA a GIFy.
Este sem zkompilil jednu verzi pro Pentium 4:
http://www.volny.cz/xfer/4all/rotozoom-p4.exe
Aby ten benchmark mel smysl, tak se samozrejme musi vypnout synchronizace a zvetsit obrazek tak, aby se kreslilo po cely obrazovce.
FPS se pocitaj mezi jednotlivejma volanima statusu, po par merenich by to melo bejt ustaleny. Me to dela asi 118FPS. S optimalizaci -funroll-all-loops -mpentium3 -mmmx -msse to bylo 122FPS.
Sem docela zvedavej jak to pojede na P4 a hlavne jakej bude rozdil mezi tou normalni a P4 verzi, ale ten zrovna zadny po ruce nemam, tak to nekdo zkuste.
-
poc pekneee :)) mno jo to se to pise v cecku :) me to dava na p3 866 asi 84 fps :) p4 tu nemam tak nereknu :/ mozna az prijde bratr tak to zkusim u nej
-
Mne to hodilo 157FPS na Tualatine, na Cyrixe je to slabe - 18FPS...
-
Taks to mel napsat taky v C a pak to profesorovi disassemblovat ;D
Este sem to zkousel na P133 - 16,5 FPS
kdyz sem zkusil pustit tu p4 verzi tak me to hodilo invalid opcode, takze by to melo nove instrukce opravdu vyuzivat.
Este premejsim jak to udelat v truecolor modu s bilinearnim filtrovanim pri zvetsovani. Interpolovat po radkach neni problem, ale neni to ono. Myusi se to delat i svisle. Ale uz by to bylo asi dost pomaly...
-
ja nekde vydel nejaek filtrovani a bylo to dost rychle, bohuzel nevim kde :(
-
Tak muzeme pokracovat tady:
http://www.overclocking.cz/4um/viewt...=530252#530252
Jak sem zistil, tak na tom airwolfove P4-Celeron to nebeha vubec spatne!
Kdyz vemu ze pomer frekvenci mojeho a airwolfova P4 celeronu je 2.057 (ted bezim na 1055) a pomer FPS je 1.926 a vzhledem k tomu ze to je JEN celeron (ikdyz to moje taky) tak je to vcelu odpovidajici, nemyslite?
U neoptimalizopvaneho kodu byl vysledek mnohem horsi. A v tom to asi bude. Lidi pouzivaji programy prelozeny a optimalizovany pro P2+MMX ci pentium a pod a pak nadavaji na P4, jak to na nem bezi pomalu oproti AMD.
Zde sem udal nekolik verzi rotozoomeru opt. pro ruzny CPU, takze sem zvedavej, jak se AMD ukazkou. No flame ;D