.[ ČeskéHry.cz ].
AABB vs plane/triangle

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Fyzikální modely
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

PříspěvekZaslal: 16. červenec 2010, 14:11:14    Předmět: AABB vs plane/triangle Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 19. červenec 2010, 08:47:04    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 19. červenec 2010, 18:09:34    Předmět: Odpovědět s citátem

Proč testuješ zrovna AABB vs triangle ? Smile Resp. možná by to šlo udělat elegantněji
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 19. červenec 2010, 20:19:28    Předmět: Odpovědět s citátem

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 Very Happy už teď si musí chudák vytrpět pič*viny co si vymejšlím Very Happy

]semo[: už na tom dělám
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 19. červenec 2010, 20:51:37    Předmět: Odpovědět s citátem

Jak u AABB mučíš grafika ? AABB se dá vypočítat v programu při loadu modelu Smile

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í Smile
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 19. červenec 2010, 21:08:10    Předmět: Odpovědět s citátem

perry, nečekaně Very Happy 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 Wink vsak AABB x rovina je skoro to stejny, jenom do toho neposilas 3 body ale jenom normalu a d.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 19. červenec 2010, 22:01:07    Předmět: Odpovědět s citátem

Aha, tak to pak jo, to dělení musí být hrozná nuda pro grafika Smile

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Fyzikální modely Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna