Ok hab mich vorhin etwas intensiver damit auseinandergesetzt, krieg es aber immer noch nicht hin.
Mein aktueller Stand:
Ich habe eine Ebene auf der x-z-Achse angelegt.
Mein Code dafür:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
|
//Plane
tbVector3 PlaneA = tbVector3(0.0f, 0.0f, 0.0f);
tbVector3 PlaneB = tbVector3(0.0f, 0.0f, 1.0f);
tbVector3 PlaneC = tbVector3(1.0f, 0.0f, 0.0f);
tbPlane g_Plane(tbPlaneFromPoints(PlaneA, PlaneB, PlaneC));
tbWritePlaneToLog(g_Plane);
|
Die Ebene ist soweit ich es aus der Logdatei entnehmen kann, normalisiert und zeigt nach oben
Ebene: a = 0.000, b = 1.000, c = 0.000, d = 0.000, Normalenvektorlänge = 1.000
Als nächstes habe ich die Koordinaten für mein Dreieck erstellt und mit DrawPrimitiveUp gezeichnet.
|
C-/C++-Quelltext
|
1
2
3
4
|
//Dreieck
g_aTriangle[0].vPosition = tbVector3( -4.0f, 0.0f, 0.0f); //A
g_aTriangle[1].vPosition = tbVector3( -8.0f, 0.0f, -2.5f); //B
g_aTriangle[2].vPosition = tbVector3( -4.0f, 0.0f, 5.0f); //C
|
Das Dreieck hatte ich auch Sicherheitshalber normalisiert, hatte aber nichts gebracht.
Meine für "Strahlengleichung" jede Dreiecksecke lautet:
|
C-/C++-Quelltext
|
1
2
3
|
g_Ray[0] = g_aTriangle[0].vNormal + g_vLightDirection * 100.0f; //A
g_Ray[1] = g_aTriangle[1].vNormal + g_vLightDirection * 100.0f; //B
g_Ray[2] = g_aTriangle[2].vNormal + g_vLightDirection * 100.0f; //C
|
Sowie die entsprechende Schnittpunktabfrage, die leider mit als auch ohne normalisierte Vektoren scheiterte.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
tbVector3 vOut = 0.0f;
bool bResult = false;
//bResult = tbLineHitsTriangle(g_aTriangle[0].vPosition, g_Ray[0], g_aTriangle[0].vPosition, g_aTriangle[1].vPosition, g_aTriangle[2].vPosition, &vOut);
bResult = tbLineHitsPlane(g_aTriangle[0].vPosition, g_Ray[0], g_Plane, &vOut); //(-4.0f, 0.0f, 0.0f)
bResult = tbLineHitsPlane(g_aTriangle[1].vPosition, g_Ray[1], g_Plane, &vOut); //(-8.0f, 0.0f, -2.5f)
bResult = tbLineHitsPlane(g_aTriangle[2].vPosition, g_Ray[2], g_Plane, &vOut); //(-4.0f, 0.0f, 5.0f)
|
Als Schnittpunkte der Strahlen vom Dreieck aus auf die x-z-Achse, bekam ich Komischerweise meine Dreieckkoordinaten wieder.
Bei der auskommentierten Funktion ebenfalls.
Beim Versuch eine Ebene aus meinen Dreieckskoordinaten zu erstellen, habe ich folgende Ausgabe erhalten:
Ebene: a = 0.000, b = 0.000, c = 0.000, d = 0.000, Normalenvektorlänge = 0.000.
Die Ausgabe erscheint bei normalisierten, als auch nicht normalisierten Koordinaten.
Ich hoffe mir kann jemand weiterhelfen, weil ich bin momentan wirklich vollkommen ratlos.
Edit:
Muss ich vll. die Ebene mit SetTransform/ Matrix irgendwie einsetzen ?
Grüße Inco