dreieck in box



  • hi!
    ich wollte mire jetzt eine funktion schauen die testet ob ein dreieck KOMPLETT in einer box liegt, was ja eigentlich auch ganz leicht ist, man muss nur alle drei punkte durchgehen
    sieht so in pseudo code aus

    function DreieckInBox(...)
    {
    
    for(int i=0; i < 3; i++)
    {
        if((dreieck[idx].x + dreieck->Position.x) >= AABB.Position.x - AABB.mWidth && (dreieck[idx].x + dreieck->Position.x) <= AABB.mPos.x + AABB.mWidth 
    //und für andere 2 punkte testen ... ist ja so ähnlich...
    {
    //return true
    }
    
    }
    

    Also einfach koordinaten + translation.
    mein problem ist aber dass ein dreieck auch skaliert werden kann (drehen ist für mich uninteressant 🙂
    ich kann jetzt aber nicht einfach mit den "skalierwert" multiplizieren

    bsp:
    A(1,1,1)
    B(5,1,1)
    C(4,10,20)
    weil wenn ich mit einem wert von 2 auf der x achse skaliere die neuen werte ja
    A(2,1,1)
    B(10,1,1)
    C(5,10,20)
    heißen würden, aber in wirklichkeit würde A doch auf der selben position bleiben und nur B und C die position ändern, okay bin mir nicht sicher ob das bei bei diesem bsp der fall ist, aber bei mir ist es so (triangle strips)
    ich bin mir zwar ziemlich sicher dass ich multiplizieren muss, weiß aber nicht an welcher stelle...



  • Transformiere die Punkte des Dreiecks mit der entsprechenden Transformationsmatrix. Das geht z.B. mit der Funktion D3DXVec3TransformCoord oder auch sehr leicht per Hand:

    v ist der Originalpunkt, w ist der neue Punkt, m ist die Matrix:
    w.x = v.x * m.m11 + v.y * m.m21 + v.z * m.m31 + m.m41;
    w.y = v.x * m.m12 + v.y * m.m22 + v.z * m.m32 + m.m42;
    w.z = v.x * m.m13 + v.y * m.m23 + v.z * m.m33 + m.m43;



  • habs inzwischen schon gefunden: position des dreiecks * skalierung + translation
    habs zuerst in falscher reihenfolge gemacht...


Anmelden zum Antworten