Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Quimby
Založen: 21. 04. 2009 Příspěvky: 51
|
Zaslal: 23. leden 2010, 22:35:19 Předmět: |
|
|
aha to me nenapadlo aha tim by se to dalo vyresit me jde o pohyb takze jen reakce na stisk klavesy tak to zuatim tak dlouho netrva ale aspon to osetrim takze me napada
kód: |
GLint cas=10;
GLint limit;
if( (clock() - last_time) > cas )
{
last_time = clock();
if(1000/cas >fps)
{
limit=(1000/cas)/fps;
if(limit>10)
limit=10;
}
for(GLint loop=0; loop<limit, loop++)
{
//kod pro pohyb
}
}
|
|
|
Návrat nahoru |
|
 |
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
Zaslal: 23. leden 2010, 22:43:42 Předmět: |
|
|
pohyb neupdatuj po určitém intervalu, ale pokaždé, akorát o kolik máš změnit pozici vypočítej na základě času mezi posledníma dvěma snímky _________________
 |
|
Návrat nahoru |
|
 |
Deluxe

Založen: 31. 07. 2007 Příspěvky: 235 Bydliště: Oslavany
|
Zaslal: 23. leden 2010, 22:54:22 Předmět: |
|
|
V pripade pohybu bych se spis ridil dobou trvani jednoho snimku.
tj. urcil bych si rychlost pohybu za sec. treba 10 jednotek.
A pak bych pocet jednotek o ktere se ma objekt posunout v tomto snimku spocital z ryhlosti za sec. a doby trvani minulyho snimku.
takze nejak:
kód: |
cur_speed = "rychlost units/sec" * "doba trvani minulyho snimku v sec."
|
pak muzes objektem kazdej snimek pohnout o cur_speed. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 24. leden 2010, 00:12:18 Předmět: |
|
|
Quimby napsal: |
ale ted kdyz nad tim uvazuju kdyz bude mit nekdo fps pod 33 tak je to spis problem jeho pc a ne mojich optimalizaci ja se snazil |
Vtipné, velmi. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 24. leden 2010, 01:57:48 Předmět: |
|
|
Ked sme uz pri tom, tak pre stabilitu fyzikalnej simulacie je velmi vhodne, aby bol vzdy krok konstantny. To sa pri nekonstantom framerate (ci thread-update-rate) da dosiahnut "akumulaciou" kroku. Ja som to posledne robil nejako takto (osekane od bordelu):
kód: |
stepAccum += delta; // step accumulation
while(stepAccum > STEP_SIZE) {
double step = STEP_SIZE;
stepAccum -= STEP_SIZE;
IntegrateRK4(step);
}
|
Namiesto "obvykleho":
U mna bolo STEP_SIZE = 0.0005 sekundy - urcene experimentalne pre danu simulaciu.
V praxi to znamena, ze v niektorych framoch sa nemusi spocitat nic, ale ak mame dost CPU casu (deltu -> 0), tak v mnohych framoch spocitame hned niekolko krokov, kde kazdy bude mat rovnaku velkost. Nevyhodou je experimentalne urcenie STEP_SIZE a to, ze nam moze integracia (fyz. simulacia) "prerast" cez hlavu :-] Kazdopadne, videl som tento pristup na mnohych miestach (napr. kniznica Bullet). _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
Quimby
Založen: 21. 04. 2009 Příspěvky: 51
|
Zaslal: 24. leden 2010, 10:14:42 Předmět: |
|
|
Deluxe napsal: |
V pripade pohybu bych se spis ridil dobou trvani jednoho snimku.
tj. urcil bych si rychlost pohybu za sec. treba 10 jednotek.
A pak bych pocet jednotek o ktere se ma objekt posunout v tomto snimku spocital z ryhlosti za sec. a doby trvani minulyho snimku.
takze nejak:
kód: |
cur_speed = "rychlost units/sec" * "doba trvani minulyho snimku v sec."
|
pak muzes objektem kazdej snimek pohnout o cur_speed. |
Díky,hned je to přesnější
Eosie napsal: |
Vtipné, velmi. |
Jo to asi neni nejlepší nápad,vtipný to taky neni,vždy se dá asi něco zlepšit.
Jinak Houp díky to si určitě přečtu vypadá to zajímavě |
|
Návrat nahoru |
|
 |
Quimby
Založen: 21. 04. 2009 Příspěvky: 51
|
|
Návrat nahoru |
|
 |
johnnash
Založen: 30. 07. 2007 Příspěvky: 80
|
|
Návrat nahoru |
|
 |
Quimby
Založen: 21. 04. 2009 Příspěvky: 51
|
Zaslal: 25. leden 2010, 17:33:46 Předmět: |
|
|
no z toho co sem pochopil tak asi je nejlepsi GL_LINEAR / GL_LINEAR a to prave pouzivam a vypada to tahle
kód: |
if (!GLloadTexture(textura_a[2], &texture[2], GL_LINEAR, GL_LINEAR))// Nahraje texturu
{
MessageBox(NULL,textura_a[2],"Nenalezeno!",MB_OK | MB_ICONINFORMATION);
return FALSE;
}
|
load texture je moje vytvorena funkce kteraa je stejna s funkci na load textur z nehe 6 lekce akorat sem pridal parametry textura_a je jmeno textury a adresa a texture je pole kam se uklada |
|
Návrat nahoru |
|
 |
JohnyDog

Založen: 17. 08. 2007 Příspěvky: 66
|
Zaslal: 25. leden 2010, 17:47:18 Předmět: |
|
|
Quimby napsal: |
no z toho co sem pochopil tak asi je nejlepsi GL_LINEAR / GL_LINEAR a to prave pouzivam a vypada to tahle
kód: |
if (!GLloadTexture(textura_a[2], &texture[2], GL_LINEAR, GL_LINEAR))// Nahraje texturu
{
MessageBox(NULL,textura_a[2],"Nenalezeno!",MB_OK | MB_ICONINFORMATION);
return FALSE;
}
|
load texture je moje vytvorena funkce kteraa je stejna s funkci na load textur z nehe 6 lekce akorat sem pridal parametry textura_a je jmeno textury a adresa a texture je pole kam se uklada |
Ne, k eliminaci aliasingu v texture potrebujes mipmapy, cili GL_LINEAR_MIPMAP_LINEAR.
Ten dalsi problem na obrazku je aliasing polygonu, k eliminaci toho potrebujes zapnout antialiasing (multisampling). _________________
 |
|
Návrat nahoru |
|
 |
Quimby
Založen: 21. 04. 2009 Příspěvky: 51
|
Zaslal: 25. leden 2010, 18:05:20 Předmět: |
|
|
Takze
kód: |
if (!GLloadTexture(textura_a[2], &texture[2], GL_LINEAR,GL_LINEAR_MIPMAP_LINEAR))// Nahraje texturu
{
MessageBox(NULL,textura_a[2],"Nenalezeno!",MB_OK | MB_ICONINFORMATION);
return FALSE;
}
|
ale ten druhy problem s tim si nevim rady,zkousel sem
kód: |
glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
glEnable(GL_POLYGON_SMOOTH);
|
ale taky bez vysledku program pracuje na nehe kodu tak snad sem to dal do initGL ale zadny vysledek |
|
Návrat nahoru |
|
 |
JohnyDog

Založen: 17. 08. 2007 Příspěvky: 66
|
|
Návrat nahoru |
|
 |
Quimby
Založen: 21. 04. 2009 Příspěvky: 51
|
Zaslal: 25. leden 2010, 18:16:35 Předmět: |
|
|
JohnyDog napsal: |
http://www.opengl.org/wiki/Multisampling |
neco sem precetl tak sem to dal dohromady
do initgl dam
kód: |
glEnable(GL_POLYGON_SMOOTH);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
|
ale porad nic porad to vypada spatne |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 25. leden 2010, 20:12:22 Předmět: |
|
|
tak si cital zle pretoze hned podtym.
citace: |
Since GPUs of the day didn't support it in hw, it would run very slow. |
tu mas tutorial. http://nehe.ceske-hry.cz/tut_46.php
hm Photoshop na zakruzkovanie co by zvladlo aj malovanie. mas ho legalne? _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
|