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
Quellcode |
|
1 2 3 4 5 6 7 |
hit = m_pSceneNode->LineHitsTriangle( start, // Streckenstartpunkt end, // Streckenendpunkt pVert[j*3+0], // Die drei Dreieckspunkte pVert[j*3+1], pVert[j*3+2], NULL); // Ausgabe: Schnittpunkt |
Administrator
Quellcode |
|
1 |
float testx,testy; |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
testx+=0.1f; testy+=0.1f; //und jetzt passiert das: //Variante1: end = D3DXVECTOR3(0,0,100); //einfach nur zum Spass start = D3DXVECTOR3(testx,testy,-100)//also die Kamera bewegt sich ---> Flimmern! //und jetzt passiert das: //Variante2: end = D3DXVECTOR3(-testx,-testy,100); //Kamera bewegt sich genau in die andere Richtung start = D3DXVECTOR3(testx,testy,-100)//also die Kamera bewegt sich ---> kein Flimmern |
Administrator
Administrator
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
// ****************************************************************** // Schnittpunkt zwischen einer Linie und einem Dreieck berechnen TRIBASE_API BOOL tbLineHitsTriangle2(const tbVector3& vLineA, const tbVector3& vLineB, const tbVector3& vTriangleA, const tbVector3& vTriangleB, const tbVector3& vTriangleC, tbVector3* pvOut, // = NULL tbVector2* pvOutBaryCentric) // = NULL { // Die Ebene dieses Dreiecks berechnen const tbPlane Plane(tbPlaneFromPoints(vTriangleA, vTriangleB, vTriangleC)); // Schnittpunkt der Linie mit der Ebene bestimmen tbVector3 vIntersection; if(!tbLineHitsPlane(vLineA, vLineB, Plane, &vIntersection)) { // Sie schneidet die Ebene nicht - dann kann sie das Dreieck // erst recht nicht schneiden. return FALSE; } // q, u und v berechnen const tbVector3 q(vIntersection - vTriangleA); const tbVector3 u(vTriangleB - vTriangleA); const tbVector3 v(vTriangleC - vTriangleA); // v' berechnen tbVector3 vTemp(tbVector3Cross(Plane.n, v)); // Den s-Wert berechnen const float s = tbVector3Dot(q, vTemp) / tbVector3Dot(u, vTemp); // Wenn s kleiner als null ist, dann kann der Punkt nicht im Dreieck liegen. if(s < 0.0f) return FALSE; // u' und t berechnen vTemp = tbVector3Cross(Plane.n, u); const float t = tbVector3Dot(q, vTemp) / tbVector3Dot(v, vTemp); if(t < 0.0f) return FALSE; // Testen, ob die Summe kleiner größer als 1 ist if(s + t > 1.0f) return FALSE; // Der Punkt liegt im Dreieck! Auf Wunsch tragen wir die Koordinaten ein. if(pvOut != NULL) *pvOut = vIntersection; if(pvOutBaryCentric != NULL) *pvOutBaryCentric = tbVector2(s, t); return TRUE; } |
Administrator
Werbeanzeige