Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Jake

Frischling

  • »Jake« ist der Autor dieses Themas

Beiträge: 4

Wohnort: Siegen/NRW

Beruf: Schüler

  • Private Nachricht senden

1

02.02.2003, 15:43

Fehler in Kollision-Tutorial 2?!

Hi David,
Ich glaub ich hab zwei Fehler in deinem Kollision-Tutorial Teil 2 gefunden.
1.: Du hast geschrieben, dass die Ebenengleichung ax + bx + cx + d = 0 ist. Müsste doch ax + by + cz + d = 0.

2.: Die Implementierung bLineHitsPlane()-Funktion müsste in den meisten Fällen (immer, wenn abs(fDenominator)>=0.0001 ist) FALSE zurückgeben.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    if(fabsf(fDenominator) < 0.0001f)
    {
        // Liegt der Startpunkt der Strecke auf der Ebene? Wenn ja, dann liegt die
        // gesamte Strecke auf ihr. Als Kollisionsort nehmen wir dann den Startpunkt.
        if(fabsf(vLineA.x * Plane.a +
                 vLineA.y * Plane.b +
                 vLineA.z * Plane.c + Plane.d) < 0.0001f)
        {
            // Strecke liegt komplett auf der Ebene!
            *pvOut = vLineA;
            return TRUE;
        }
    }
    else
    {
        // Keine Kollision!
        return FALSE;
    }

Stattdessen sollte es doch so heißen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    if(fabsf(fDenominator) < 0.0001f)
    {
        // Liegt der Startpunkt der Strecke auf der Ebene? Wenn ja, dann liegt die
        // gesamte Strecke auf ihr. Als Kollisionsort nehmen wir dann den Startpunkt.
        if(fabsf(vLineA.x * Plane.a +
                 vLineA.y * Plane.b +
                 vLineA.z * Plane.c + Plane.d) < 0.0001f)
        {
            // Strecke liegt komplett auf der Ebene!
            *pvOut = vLineA;
            return TRUE;
        }
        else
        {
            // Keine Kollision!
            return FALSE;
        }
    }

oder?

Gruß,
Jörg
visit www.mesiahzone.de

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

03.02.2003, 13:41

Hallo!
Ja, beim ersten hast Du auf jeden Fall recht. Das zweite werde ich mir nochmal genau ansehen, wahrscheinlich stimmt das wirklich nicht. Vielen Dank dafür!