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

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

21

25.08.2007, 15:07

Die Funktion ist, bis auf das erwähnte, korrekt (vorausgesetzt die verwenden Funktionen stimmen). Aber die Werte stimmen auch, also geh ich mal davon aus. Zeig mal den Code wo du testest ob eine Ebene geschnitten wird.
@D13_Dreinig

d00m

Frischling

  • »d00m« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Bautzen

  • Private Nachricht senden

22

25.08.2007, 15:40

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
bool CollisionLine_Plane(Linie line, Plane plane, Vector &sp)
{
    Vector LineDir;
    float Denominator, s;
    LineDir.SetV(line.GetV2()-line.GetV1());
    Denominator=plane.GetA()*LineDir.GetX()+
                plane.GetB()*LineDir.GetY()+
                plane.GetC()*LineDir.GetZ();
    printf("%f\n", Denominator);
    if(fabsf(Denominator)<0.0001f)
    {
        if(fabsf(line.GetV1X()*plane.GetA()+
                 line.GetV1Y()*plane.GetB()+
                 line.GetV1Z()*plane.GetC()+plane.GetD())<0.0001f)
        {
            // Strecke liegt auf Ebene
            printf("strecke liegt auf ebene\n");
            sp.SetV(line.GetV1());
            return true;
        }
        else
            return false;
    }
    s=(plane.GetA()*line.GetV1X()+
       plane.GetB()*line.GetV1Y()+
       plane.GetC()*line.GetV1Z()+plane.GetD())/(-Denominator);
    if(s<0.0f || s>0.0f)
        return false;
    sp.SetV(line.GetV1()+(LineDir.GetV()*s));
    return true;
}


sollte eg funzen, da ich den nich weiter geändert hab

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

23

25.08.2007, 17:09

Willst du ein Liniensegment oder tatsächlich eine Linie testen? Bei ersten reicht es zu schauen ob V1 und V2 auf der selben Seite der Ebene liegen (Skalarprodukt mit den Ebenennormalenvektor), bei letzteren musst du nur schauen ob die Linie Parallel zur Ebene ist und nicht auf ihr liegt.
@D13_Dreinig

d00m

Frischling

  • »d00m« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Bautzen

  • Private Nachricht senden

24

25.08.2007, 23:03

naja, laut dem tut steht da:

Zitat

Die Funktion LineHitsPlane berechnet, ob eine Strecke eine Ebene schneidet.


LineHitsPlane heißt bei mir nur CollisionLine_Plane ;)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

25

25.08.2007, 23:18

Dann überprüf einfach ob beide Endpunkte auf der gleichen Seite liegen.
@D13_Dreinig

d00m

Frischling

  • »d00m« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Bautzen

  • Private Nachricht senden

26

25.08.2007, 23:48

okay, hab das nun mal bissl überarbeitet, nu wird immerhin erkannt, wenn die linie genau auf der eben liegt, also start und endpunkt der linien den gleichen z wert haben, wie meine ebene
dazu bemerke man mein geiles if:

Quellcode

1
if(s<0.0f && s>0.0f)

:D

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

27

26.08.2007, 11:35

Zitat von »"d00m"«


Quellcode

1
if(s<0.0f && s>0.0f)

:D


Interessant! :shock:
@D13_Dreinig

d00m

Frischling

  • »d00m« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Bautzen

  • Private Nachricht senden

28

26.08.2007, 13:13

hehe, dacht ich mir auch als ich das sah :D

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

29

26.08.2007, 13:20

Und was genau versuchst du damit zu bezwecken?
@D13_Dreinig

d00m

Frischling

  • »d00m« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Bautzen

  • Private Nachricht senden

30

26.08.2007, 15:48

testen ob und wo eine linie eine ebene schneidet
nun wird diese ebene noch auf ein dreieck begrenzt

Werbeanzeige