| | |
| Stránka: 1 z 1
| [ Príspevkov: 5 ] | |
Autor | Správa |
---|
Registrovaný: 01.02.08 Prihlásený: 10.04.15 Príspevky: 31 Témy: 11 | Napísal HT: 01.12.2010 12:33 | |
|
Zdravim, pracujem na pocitacovej hre a mam problem s funkciu na detekciu kolizi.
Kód: bool player::moze(float velk, float alph, float beth) { nv->set((kx+velk*cos((3.1428*(beth))/180)*cos((3.1428*alph)/180))/nx, (ky-velk*sin((3.1428*(beth))/180))/ny, (kz-velk*sin((3.1428*(alph))/180)*cos((3.1428*beth)/180))/nz ); int mx=(int)round(ppmx), mz=(int)round(ppmz); if ((mx-1>=0) and (mz-1>=0)) //n4 { at1->set(mx,mapa[mx][mz],mz); at2->set((mx-1),(mapa[mx-1][mz]),(mz)); at3->set((mx),(mapa[mx][mz-1]),(mz-1)); if ((magic_testIntersectionSphereTriangle(*nv,sT->polomer,*at1,*at2,*at3,NULL)) and (mapa[mx][mz]) and (mapa[mx-1][mz]) and (mapa[mx][mz-1]) ) { S=*nv; S-=n4*sT->polomer; S+=n4*dist(n4,at1,S); V.set(kx/nx,ky/ny,kz/nz); V-=n4*dist(n4,at1,V); S-=V; S.x*=nx; S.y*=ny; S.z*=nz; if (0<S.x) ddalp = -( atan( (-S.z)/(-S.x) )*180.0 /3.1428); if (0>S.x) ddalp = -( atan( (-S.z)/(-S.x) )*180.0 /3.1428)+180;
if ((sqrt( ((S.x)*(S.x))+((S.z)*(S.z))))) ddbet=-atan((S.y)/( sqrt( ((S.x)*(S.x))+((S.z)*(S.z)) ) ) )*180.0/3.1428; if (moze(S.len(),ddalp,ddbet)) { kx+=S.x; ky+=S.y; kz+=S.z; } return false; } } if ((mz-1>=0) and (mx+1<HMAPR)) //n5 6 { at1->set((mx),(mapa[mx][mz]),(mz)); at2->set((mx),(mapa[mx][mz-1]),(mz-1)); at3->set((mx+1),(mapa[mx+1][mz-1]),(mz-1)); if ((magic_testIntersectionSphereTriangle(*nv,sT->polomer,*at1,*at2,*at3,NULL)) and (mapa[mx][mz]) and (mapa[mx][mz-1]) and (mapa[mx+1][mz-1]) ) { S=*nv; S-=n5*sT->polomer; S+=n5*dist(n5,at1,S); V.set(kx/nx,ky/ny,kz/nz); V-=n5*dist(n5,at1,V); S-=V; S.x*=nx; S.y*=ny; S.z*=nz; if (0<S.x) ddalp = -( atan( (-S.z)/(-S.x) )*180.0 /3.1428); if (0>S.x) ddalp = -( atan( (-S.z)/(-S.x) )*180.0 /3.1428)+180;
if ((sqrt( ((S.x)*(S.x))+((S.z)*(S.z))))) ddbet=-atan((S.y)/( sqrt( ((S.x)*(S.x))+((S.z)*(S.z)) ) ) )*180.0/3.1428; if (moze(S.len(),ddalp,ddbet)) { kx+=S.x; ky+=S.y; kz+=S.z; } return false; } at1->set((mx),(mapa[mx][mz]),(mz)); at2->set((mx+1),(mapa[mx+1][mz-1]),(mz-1)); at3->set((mx+1),(mapa[mx+1][mz]),(mz)); if ((magic_testIntersectionSphereTriangle(*nv,sT->polomer,*at1,*at2,*at3,NULL)) and (mapa[mx][mz]) and (mapa[mx+1][mz-1]) and (mapa[mx+1][mz]) ) { S=*nv; S-=n6*sT->polomer; S+=n6*dist(n6,at1,S); V.set(kx/nx,ky/ny,kz/nz); V-=n6*dist(n6,at1,V); S-=V; S.x*=nx; S.y*=ny; S.z*=nz; if (0<S.x) ddalp = -( atan( (-S.z)/(-S.x) )*180.0 /3.1428); if (0>S.x) ddalp = -( atan( (-S.z)/(-S.x) )*180.0 /3.1428)+180;
if ((sqrt( ((S.x)*(S.x))+((S.z)*(S.z))))) ddbet=-atan((S.y)/( sqrt( ((S.x)*(S.x))+((S.z)*(S.z)) ) ) )*180.0/3.1428; if (moze(S.len(),ddalp,ddbet)) { kx+=S.x; ky+=S.y; kz+=S.z; } return false; } } if ((mx-1>=0) and (mz+1<HMAPR)) //n2 3 { at1->set((mx),(mapa[mx][mz]),(mz)); at2->set((mx),(mapa[mx][mz+1]),(mz+1)); at3->set((mx-1),(mapa[mx-1][mz+1]),(mz+1)); if ((magic_testIntersectionSphereTriangle(*nv,sT->polomer,*at1,*at2,*at3,NULL)) and (mapa[mx][mz]) and (mapa[mx][mz+1]) and (mapa[mx-1][mz+1]) ) { S=*nv; S-=n2*sT->polomer; S+=n2*dist(n2,at1,S); V.set(kx/nx,ky/ny,kz/nz); V-=n2*dist(n2,at1,V); S-=V; S.x*=nx; S.y*=ny; S.z*=nz; if (0<S.x) ddalp = -( atan( (-S.z)/(-S.x) )*180.0 /3.1428); if (0>S.x) ddalp = -( atan( (-S.z)/(-S.x) )*180.0 /3.1428)+180;
if ((sqrt( ((S.x)*(S.x))+((S.z)*(S.z))))) ddbet=-atan((S.y)/( sqrt( ((S.x)*(S.x))+((S.z)*(S.z)) ) ) )*180.0/3.1428; if (moze(S.len(),ddalp,ddbet)) { kx+=S.x; ky+=S.y; kz+=S.z; } return false; } at1->set((mx),(mapa[mx][mz]),(mz)); at2->set((mx-1),(mapa[mx-1][mz]),(mz)); at3->set((mx-1),(mapa[mx-1][mz+1]),(mz+1)); if ((magic_testIntersectionSphereTriangle(*nv,sT->polomer,*at1,*at2,*at3,NULL)) and (mapa[mx][mz]) and (mapa[mx-1][mz]) and (mapa[mx-1][mz+1]) ) { S=*nv; S-=n3*sT->polomer; S+=n3*dist(n3,at1,S); V.set(kx/nx,ky/ny,kz/nz); V-=n3*dist(n3,at1,V); S-=V; S.x*=nx; S.y*=ny; S.z*=nz; if (0<S.x) ddalp = -( atan( (-S.z)/(-S.x) )*180.0 /3.1428); if (0>S.x) ddalp = -( atan( (-S.z)/(-S.x) )*180.0 /3.1428)+180;
if ((sqrt( ((S.x)*(S.x))+((S.z)*(S.z))))) ddbet=-atan((S.y)/( sqrt( ((S.x)*(S.x))+((S.z)*(S.z)) ) ) )*180.0/3.1428; if (moze(S.len(),ddalp,ddbet)) { kx+=S.x; ky+=S.y; kz+=S.z; } return false; } } if ((mx+1<HMAPR) and (mz+1<HMAPR))//n1 { at1->set((mx),(mapa[mx][mz]),(mz)); at2->set((mx+1),(mapa[mx+1][mz]),(mz)); at3->set((mx),(mapa[mx][mz+1]),(mz+1)); if ((magic_testIntersectionSphereTriangle(*nv,sT->polomer,*at1,*at2,*at3,NULL)) and (mapa[mx][mz]) and (mapa[mx+1][mz]) and (mapa[mx][mz+1]) ) { S=*nv; S-=n1*sT->polomer; S+=n1*dist(n1,at1,S); V.set(kx/nx,ky/ny,kz/nz); V-=n1*dist(n1,at1,V); S-=V; S.x*=nx; S.y*=ny; S.z*=nz; if (0<S.x) ddalp = -( atan( (-S.z)/(-S.x) )*180.0 /3.1428); if (0>S.x) ddalp = -( atan( (-S.z)/(-S.x) )*180.0 /3.1428)+180;
if ((sqrt( ((S.x)*(S.x))+((S.z)*(S.z))))) ddbet=-atan((S.y)/( sqrt( ((S.x)*(S.x))+((S.z)*(S.z)) ) ) )*180.0/3.1428; if (moze(S.len(),ddalp,ddbet)) { kx+=S.x; ky+=S.y; kz+=S.z; } return false; } } return true; }
Program pada na mieste
if (moze(S.len(),ddalp,ddbet))
{
kx+=S.x;
ky+=S.y;
kz+=S.z;
}
ale nie vzdy, hlavne na hranach trojuholnikov: http://pictureup.cz/picture/verejny/12431243chyba.jpg
funkcia magic_testIntersectionSphereTriangle a trieda Vec3f su z kniznice ozcollide
kx,ky,kz su suradnice hraca, nx,ny,nz su globalne premenne na "roztiahnutie" mapy. V,S su triedy Vec3f, patria triede player.
nv,at1,at2,at3 su ukazovatele na Vec3f patria triede player, n1..6 su normalove vektory trojuholnikov ktore tvoria mapu.
Program pada sposobom ako keby som sa snazil zapisat alebo nacitat spoza pola ale ku tomu v programe nedochadza. Mohli by ste mi s tym niekto pomoct?
|
|
Registrovaný: 11.01.09 Prihlásený: 17.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 02.12.2010 15:38 | |
|
Zobrazí to nejakú chybovú správu? Ak áno, trocha by to pomohlo.
_________________ Ak potrebujete pomoc s diagnostikou/opravou vasej elektroniky ( notebook, motherboard, GPU, a ine ), kontaktujte ma cez SS. |
|
Registrovaný: 01.02.08 Prihlásený: 10.04.15 Príspevky: 31 Témy: 11 | |
Registrovaný: 11.01.09 Prihlásený: 17.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 02.12.2010 21:59 | |
|
Exception Code: c00000fd je chyba stack overflow, to znamená, že daná funkcia je volaná rekurzívne toľko krát, až to zahltí celý zásobník aplikácie. Ak to je možné, bolo by dobré funkciu prerobiť ako nerekurzívnu (prípadne inak zamedziť častému vnáraniu).
_________________ Ak potrebujete pomoc s diagnostikou/opravou vasej elektroniky ( notebook, motherboard, GPU, a ine ), kontaktujte ma cez SS. |
|
Registrovaný: 01.02.08 Prihlásený: 10.04.15 Príspevky: 31 Témy: 11 | Napísal autor témy HT: 03.12.2010 8:47 | |
|
Diky moc. Upravil som to a uz to funguje.
|
|
| Stránka: 1 z 1
| [ Príspevkov: 5 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| C++ konštantná funkcia triedy v Assembler, C, C++, Pascal, Java | 2 | 544 | 07.08.2010 14:17 Loko11 | | Triedy a sub triedy v PHP, ASP | 5 | 537 | 19.04.2010 19:50 emer | | Správna zostava. v PC zostavy | 15 | 938 | 19.04.2008 14:03 Andel6610 | | Správna teplota :/ ? [ Choď na stránku: 1, 2, 3 ] v Chladiče a všetky druhy chladenia | 61 | 2372 | 20.10.2010 16:02 MagnatWoofer | | Spravna volba ? v Notebooky a netbooky | 2 | 729 | 06.02.2007 21:27 Jaro | | Spravna URL v JavaScript, VBScript, Ajax | 12 | 741 | 06.08.2010 17:09 Ďuri | | Spravna teplota HDD v Pevné disky a radiče | 2 | 582 | 24.05.2011 18:42 PyroSVK | | Spravna BIOS verzia [ Choď na stránku: 1, 2 ] v Operačné systémy Microsoft | 38 | 899 | 20.05.2016 20:35 chameleo | | Spravna DDRam k procesoru. v Intel - Integrated Electronics | 4 | 257 | 02.01.2024 8:54 shiro | | Gaming PC | Správna zostava ? [ Choď na stránku: 1, 2 ] v PC zostavy | 30 | 1101 | 22.02.2015 19:02 Miso122 | | Aká doska je správna? v Základné dosky | 10 | 547 | 05.03.2013 1:23 xml | | nejde mi spravna rychlosť na nete v Sieťové a internetové programy | 2 | 286 | 19.01.2013 14:46 walther | | Forko triedy v Redakčné systémy | 7 | 730 | 05.05.2009 21:04 Svolo | | Správna rada Apple údajne nespokojná s mierou inovácie [ Choď na stránku: 1, 2 ] v Novinky | 35 | 1160 | 14.08.2013 10:42 DMaMT | | Siete triedy B v Sieťové a internetové programy | 1 | 295 | 28.01.2013 19:30 majky358 | | Mobil strednej triedy v Mobilné zariadenia | 24 | 1042 | 15.09.2017 11:54 Nair0n |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|