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

11

17.08.2007, 11:30

Genau!

Zitat von »"d00m"«

Also doch so:


Wurde denn was anderes behauptet? :)
@D13_Dreinig

d00m

Frischling

  • »d00m« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Bautzen

  • Private Nachricht senden

12

17.08.2007, 11:33

ne ;)
das krasse is, das eg schon alle funktionen da waren, bis auf Normnormalize, da hats wohl dann gehangen

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

13

17.08.2007, 11:37

C-/C++-Quelltext

1
temp.vN.CrossProduct(v3-v2, v1-v2);


sollte wohl eher:

C-/C++-Quelltext

1
temp.vN = v1.CrossProduct( v3-v2, v1-v2 );


oder ähnlich heißen. Sonst ändert sich bei vN garnichts.
@D13_Dreinig

d00m

Frischling

  • »d00m« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Bautzen

  • Private Nachricht senden

14

17.08.2007, 11:58

aber irgendwie stimmt da was noch nicht!
ich übergebe nun an PlaneFromPoints die vektoren v1(0,0,90), v2(0,2,90) und v3(2,0,90) das wäre n dreieck, und die ebene geht ja nun von oben nach unten ;)
nun kommt in der funktion, laut tut, das ich rechnen muss, mit plane.a, plane.b und plane.c
ka, hab da nun einfach die koords der normal normalisierten genpmmen, quasi
plane.vN.x, plane.vN.y und plane.vN.z aber das haut vorne und hinten nciht hin, da immer ne kollision erkannt wird, auch wenn die zu testende strecke weit hinter der eben is(z wert der linie ist 80 bis 82)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

15

17.08.2007, 12:07

Was für Werte hast du denn raus?
@D13_Dreinig

d00m

Frischling

  • »d00m« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Bautzen

  • Private Nachricht senden

16

17.08.2007, 12:58

ich gebe die werte nicht aus
aber wenn ich weiß das meine strecke AB A(2,2,80) und B(2,2,83) ist und meine ebene quasi auf z=90 ist kann keine kollision vorhanden sien
ein true wird trotzdem zurück gegeben :-/

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

17

17.08.2007, 13:00

Dann ist es JETZT an der Zeit die Werte mal auszugeben und zu prüfen ob richtig gerechnet wird. Also, leg los!
@D13_Dreinig

d00m

Frischling

  • »d00m« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Bautzen

  • Private Nachricht senden

18

25.08.2007, 06:47

okay, hab mal bissl durchgeguckt und meine PlaneFromPoints funktion in die richtung geändert:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
        Plane PlaneFromPoints(Vector& v1, Vector& v2, Vector& v3)
        {                                               // Testwerte dreieck ABC (v1, v2, v3)
            Plane p;                                    // v1(0,0,90)  v2(0,2,90)  v3(2,0,90)
            p.vN.SetV(v1.CrossProduct(v3-v2, v1-v2));   // vN.x=0 vN.y=0 vN.z=-4
            p.vN.SetV(p.vN.NormNormalize());            // vN.x=0 vN.y=0 vN.z=-1
            a=p.vN.GetX();      //  0.0f
            b=p.vN.GetY();      //  0.0f
            c=p.vN.GetZ();      // -1.0f
            p.SetD(-(v1.GetX()*p.GetB() + v1.GetY()*p.GetB() + v1.GetZ()*p.GetC()));
        //  printf("%f\n", p.GetD());                   // fD=90.000000
            return p;
        }


aber irgendwie haut das noch immer nicht hin. is den die funktion immernoch falsch?
laut den ergebnisen erggibts für mich eg einen sinn.
vN ist 0,0,-1 also is vN rechtwinklig zur ebene.
fD mit 90.0f stimmt auch, da die ebene um 90 von dem koordinatenmittelpunkt entfernt is.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

19

25.08.2007, 13:37

Also:

C-/C++-Quelltext

1
-(v1.GetX()*p.GetB()


Müsste eigentlich:

C-/C++-Quelltext

1
-(v1.GetX()*p.GetA()


heißen. Ich steig allerdings nich so ganz durch deine Bezeichner durch. Scheint mir aber soweit korrekt zu sein. Nochmal zur Sicherheit: a, b, c sind der Normalenvektor und d die Distanz, oder? Dann stimmts.

Nochmal zum nachrechnen:

Zitat


P1( 0, 0, 90 )
P2( 0, 2, 90 )
P3( 2, 0, 90 )

( 0, 0, 90 ) - ( 0, 2, 90 ) = ( 0, -2, 0 )
( 2, 0, 90 ) - ( 0, 2, 90 ) = ( 2, -2, 0 )

( 0, -2, 0 ) x ( 2, -2, 0 ) = ( 0, 0, -4 ) / sqrt( -4^2 ) = ( 0, 0, -1 )
( 0, 0, -1 ) * ( 0, 0, 90 ) = -90 * -1 = 90

also:

n( 0, 0, -1)
d = 90


Das ist sehr richtig! :)
@D13_Dreinig

d00m

Frischling

  • »d00m« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Bautzen

  • Private Nachricht senden

20

25.08.2007, 14:47

jo, hab erst gerade mitbekommen, das a, b und c die 3 koords des 3d-vektors vN, also der normalen sind ;)
also muss doch n bug in der fnkt sein, die testet, ob ich ne ebene schneide :-/

Werbeanzeige