Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 16. červenec 2010, 14:11:14 Předmět: AABB vs plane/triangle |
|
|
Zdarec,
snazim se udelat si takovou malou knihovnicku kolizi ktery budu potrebovat a mam jednu otazku. Ma nekdo napad jak zjistit nejblizsi kolizni bod AABB a trianglu(nebo plane, da se lehko dopocitat)? Googlil jsem ale marne.
Zjisteni ze jsem protl boxem plane
mam nejak takto (nejaky sample kodu z devmaster.net, upraveny pro moje potreby):
kód: |
inline bool AABBIntersectsPlane(vec3 min, vec3 max, vec3 normal, float distanceFromOrigin)
{
vec3 diagMin, diagMax;
if( normal.x >= 0 )
{
diagMin.x = min.x;
diagMax.x = max.x;
}
else
{
diagMin.x = max.x;
diagMax.x = min.x;
}
if( normal.y >= 0 )
{
diagMin.y = min.y;
diagMax.y = max.y;
}
else
{
diagMin.y = max.y;
diagMax.y = min.y;
}
if( normal.z >= 0 )
{
diagMin.z = min.z;
diagMax.z = max.z;
}
else
{
diagMin.z = max.z;
diagMax.z = min.z;
}
if(Dot(normal, diagMin) + distanceFromOrigin > 0.0f) return false;
if(Dot(normal, diagMax) + distanceFromOrigin>= 0.0f) return true; else return false;
}
|
Z toho jsem schopnej zjistit akorat to ze sem kolidoval, ale k vypoctu slidu potrebuju kolizni normalu, nejblizsi kolizni bod a hloubku zanoreni. Normala muze byt ta co je posilana zaroven s plane, ale ty dalsi veci me nenapadaji jak spocitat.
Jestli nekdo vi, tak nahodte nejakej kousek kodu / odkaz.
Dik Jatro |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 19. červenec 2010, 08:47:04 Předmět: |
|
|
No, zkus rozšířit ten Box a Plane - to už teda máš, jestli to dobře chápu. Kontaktní bod (nebo více bodů) bys mohl najít jednoduše jako průsečík hran Boxu (úseček) s planem. Nakonec zbývá zjistit, jestli výsledný kontaktní body leží uvnitř trojúhelníku, který chceš testovat. To zjistíš několika dot-productama, nějak takhle, jestli se nepletu (ABC je trojúhelník, P bod):
((A-B).Dot(A-P) > (A-B).Dot(A-C)) && ((B-C).Dot(B-P) > (B-A).Dot(B-C)).
A pak jsou tu ještě speciální případy, například, když testovaný trojúhelník leží na stěně kvádru, nebo když celý trojúhelník leží uvnitř. Tyhle věci je lepší ošetřit nějak zvlášť: zjistit takový případ a počítat ho "vedle".
Hloubka zanoření by mohla bejt vzdálenost výsledného kolizního bodu od roviny trojúhelníku (pakliže chceš jako normálu kolize vracet normálu toho trojúhelníku). _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 19. červenec 2010, 18:09:34 Předmět: |
|
|
Proč testuješ zrovna AABB vs triangle ? Resp. možná by to šlo udělat elegantněji _________________ Perry.cz |
|
Návrat nahoru |
|
 |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 19. červenec 2010, 20:19:28 Předmět: |
|
|
perry, no lepsi reseni me nenapada, pokud máš lepší tak s ním, elipsoid a sphere už mám, tak bych ještě chtěl AABB, capsule / cylyndr by byly krásný ale nějak se mi nedaří vygooglit nějakej pochopitelnejsi pejpr / kus kodu.
jinak AABB vs AABB jsem zavrhl, jelikoz nechci svého grafika extra mučit už teď si musí chudák vytrpět pič*viny co si vymejšlím
]semo[: už na tom dělám |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 19. červenec 2010, 20:51:37 Předmět: |
|
|
Jak u AABB mučíš grafika ? AABB se dá vypočítat v programu při loadu modelu
Já používám AABB x AABB (resp. casteji OBB x OBB). AABB x rovina / paprsek je použitelné, ale testovat AABB x triangle mi prijde nějaké podivné řešení  _________________ Perry.cz |
|
Návrat nahoru |
|
 |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 19. červenec 2010, 21:08:10 Předmět: |
|
|
perry, nečekaně však počítám, jenom problém je ten že na ten interier je potreba velky clenity baraky rozclenit do jednotlivejch objektu a to je u mensiho mestecka na posrani, podle me vsak AABB x rovina je skoro to stejny, jenom do toho neposilas 3 body ale jenom normalu a d. |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 19. červenec 2010, 22:01:07 Předmět: |
|
|
Aha, tak to pak jo, to dělení musí být hrozná nuda pro grafika
Jinak, pokud bys chtel kontaktni body (pruseciky AABB x triangle), tak na to bych asi pouzil Cohen-Sutherlandův alg. modifikovaný pro 3D. Je relativně rychlý a jednoduchý na implementaci a navíc bude fungovat pro libovolný polygon. _________________ Perry.cz |
|
Návrat nahoru |
|
 |
|