|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
s1 Guest
|
Posted: Fri Feb 11, 2005 3:27 pm Post subject: |
|
Labi bubu, ņemšu tevi vērā. |
|
Back to top |
|
|
GiGa Indago Uzvarētājs
Joined: 25 Sep 2003 Posts: 887
|
Posted: Fri Feb 11, 2005 3:34 pm Post subject: |
|
Quote: |
Giga, vai šādi būs pareizi taisīt kolīziju:
d := -ax+-by-cz;
if(ax+by+cz+d = 0)then sadursme := TRUE else sadursme := FALSE; ?
|
nee, nee, nee un veelreiz nee nekad nepaarbaudi float'us ar =
panjem kaadu mazu nobiidi, jo float nav bezgaliigi preciizs, ka vienaadiiba paarbaude vienmeer sakritiis.
Labaak paarbaudi vai kustiibas saakumpunkts ir vienaa pusee plaknei, un beigu otraa, tad objekts buus krustojis to plakni. _________________
|
|
Back to top |
|
|
Hobits Indago organizātors
Joined: 04 Jul 2003 Posts: 491 Location: Riga
|
Posted: Fri Feb 11, 2005 6:09 pm Post subject: |
|
GiGa wrote: | Labaak paarbaudi vai kustiibas saakumpunkts ir vienaa pusee plaknei, un beigu otraa, tad objekts buus krustojis to plakni. |
Piemeeram: Ja kustiibas virziens ir vektors v, punkta poziicija dotajaa laika spriidii p, un paarvietoshanaas solis t (vai aatrums).
Tad rezultaata punktu ieguusi saadi, vai ne: p' = p + v * t
Un tagat tu vari paarbaudiit p' pret plakni.
Preteejaa gadiijumaa, ja paarbaudiisi vienkaarshi p pret plakni, tad rezultaataa notiks taa ka koliizijas briidii punkts jau atradiisies plaknes aimuguree un taa ir nedaudz gruutaak paarreekjinaat kustiibas virzienu ja punktam ir jaaatlec no plaknes! |
|
Back to top |
|
|
s1 Guest
|
Posted: Sun Feb 13, 2005 11:12 pm Post subject: |
|
vēl viena problēma sakarā ar kolīziju. Pieņemsim, ka kolīzija ir tikai ar zemi. Punkts sadurās ar poligonu, taču ir jāzin konkrēti ar kuru poligonu Viena lieta, kas man iešāvās galvā ir: izmantot Picking metodi, kur peles X un Y vietā ielikt punkta X un Z koord.. Varbūt jūs variet ieteikt kautko labāku un vienkāršāku? |
|
Back to top |
|
|
GiGa Indago Uzvarētājs
Joined: 25 Sep 2003 Posts: 887
|
Posted: Sun Feb 13, 2005 11:27 pm Post subject: |
|
Quote: |
Punkts sadurās ar poligonu, taču ir jāzin konkrēti ar kuru poligonu
|
Hmm, tev ir zinaama kaada mistiska metode, kaa noteikt kustiiga punkta sadursmi ar poligonu, nezinot, kas par poligonu? _________________
|
|
Back to top |
|
|
s1 Guest
|
Posted: Mon Feb 14, 2005 1:20 pm Post subject: |
|
Nē, tu mani pārprati, laikam es neskaidri uzrakstīju. Tad kad notiek aprēķini, protams, ka punkts ir nekustīgs. Lūk, es gribu prasīt padomu, kā lai nosaka poligonu, virs kura atrodas šis punkts? |
|
Back to top |
|
|
Lāčblēdis
Joined: 16 Jan 2005 Posts: 113
|
Posted: Mon Feb 14, 2005 1:23 pm Post subject: |
|
Pārbaudi visus daudzstūrus, kuri atrodas tavā tuvumā. |
|
Back to top |
|
|
s1 Guest
|
Posted: Mon Feb 14, 2005 5:05 pm Post subject: |
|
Lāčblēdi, to ,ka jāmeklē, to es saprotu, bet KĀ? |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Mon Feb 14, 2005 7:07 pm Post subject: |
|
Vistriviālāk - pilnā pārlase: Code: | for (i=0; i<Poligoni.Skaits; i++) {
if (IrPunktsVirsPoligona(Punkts, Poligoni[i])) {
// atradām poligonu = Poligoni[i]
}
} |
Ja grib ko ātdarbībāku, tad var izmantot spatial partitioning, tb, ņemt palīgā octrees, vai ko citu līdzīgu. Kautgan visdrīzāk tev jau derēs speciālāks algritms, kas izmantos tava dzinēja īpašības, tb, kuros gadījumos, kurš punkts būtu jāsalīdzina ar kuriem poligoniem :) |
|
Back to top |
|
|
Hobits Indago organizātors
Joined: 04 Jul 2003 Posts: 491 Location: Riga
|
Posted: Mon Feb 14, 2005 8:07 pm Post subject: |
|
s1, pasaki konkreeti kaadu uzdevumu tu taisies paveikt, tad mums buus tev vieglaak paliidzeet un kaut ko ieteikt! |
|
Back to top |
|
|
s1 Guest
|
Posted: Tue Feb 15, 2005 11:30 am Post subject: |
|
ok, ar poligona noteikšanu zem punkta, es tiku galā, izmantojot 'picking' metodi. Taču kolīzija īsti nestrādā, droši vien dēļ tā ka neprotu aprēķināt komponenti d.
d := -ax+-by-cz;
if(ax+by+cz+d < 0.01)and(ax+by+cz+d > -0.01)then sadursme := TRUE else sadursme := FALSE;
...Šāds d aprēķins laikam neder, jo d šādi drīkst rēķināt, ja vienādojums ir vienāds ar 0. Man ļoti noderētu pareiza d aprēķināšana. |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Feb 15, 2005 11:40 am Post subject: |
|
Pasaki, lūdzu, kas tavā gadījumā ir x, y, z, a, b un c?
Pie tam, otro rindiņu var uzrakstīt smukāk :)
sadursme := abs(ax+by+cz+d) < 0.01; |
|
Back to top |
|
|
s1 Guest
|
Posted: Tue Feb 15, 2005 11:52 am Post subject: |
|
ax+by+cz+d = 0 -plaknes v-ums
a,b,c - poligona normāles
x,y,z - punkta koord.
punkts atrodas virs poligona (tas krīt uz plaknes no augšas), bet d - ?????
kautkāds attālums no (0,0,0) lidz ???? lūk, to d es neprotu aprēķināt |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Feb 15, 2005 12:07 pm Post subject: |
|
Tev plakne (poligons) tiek uzdots tikai ar a, b un c? Tikai ar trīs lielumiem?
Tā jau nevar viennozīmīgi nodefinēt to plakni. Var tika viņas vērsumu nodefinēt, bet pozīciju telpā ir bezgalīgi daudz iespējamu.
Normālā gadījumā planki, kurā atrodas tavs poligonsm, definē ar 4 lielumiem: a,b,c un d.
Tad punkta (x,y,z) tuvums šai plaknei aprēķinās visai vienkārši: vai_punkts_ir_tuvu := abs(ax+by+cz+d) < EPS;
Kur EPS vari ņemt mazu vērtību atkarībā no aprēķinu vajadzīgās precizitātes. |
|
Back to top |
|
|
s1 Guest
|
Posted: Tue Feb 15, 2005 12:11 pm Post subject: |
|
Es tev pilnīgi piekrītu, bet tas ceturtais lielums d ??? Kas tas īsti ir... |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|