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

1

20.10.2010, 09:41

Schnittpunkt einer Ebene und einer Geraden

Hallo COmmunity

Theoretisch weiss ich wie man den Schnittpunkt einer Gerade und einer offenen Ebene berechnet.

Nur bring ich das irgendwie nicht in mein Programm.

Gibt es von Directx, o.Ä. vordefinierte Funktionen, welche das für mich erledigen könnten?

Danke für die HIlfe
Gruss
MasterCHief

2

20.10.2010, 10:55

google.de: dx plane intersect line
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

20.10.2010, 12:26

Nur bring ich das irgendwie nicht in mein Programm.

Wenn du doch weißt wie das geht, wo genau liegt dein Problem? Ich mein das ist doch nur eine einzelne, absolut simple Formel!?

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

4

20.10.2010, 13:19

also erstmal: wenn du es theoretisch weißt, wo is dann das praxis problem?

Als erstes solltest du dir mal klar werden, wie du was repräsentierst in deinem Programm, vermutlich die Ebene in der Hess'schen Normalenform und die Gerade in der Parameterform
=>

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
struct Plane
{
float   d;
float3 n;
};


struct Ray
{
float3 dir;
float3 pos;
};


Nun steht sicherlich in deinem Oberstufenmathebuch oder Wikipedia oder sonstige Formelsammlung wie man den Schnittpunkt zwischen Gerade/Ebene bestimmt!
In diesem Falle einfach die Definition für Gerade und Ebene anschauen:

Gerade: x = pos + t * dir -->wobei x ein punkt auf der gerade ist (parameterdarstellung)
Ebene: x dot n - d = 0 bzw. x dot n = d

-->zwei Gleichungen, wie löst man die? -->Antwort durch Einsetzen
also
(pos + t * dir) dot n = d -->Lösung Schnitt wenn ein t existiert

das ganze lässt sich programmiertechnisch noch mit ein paar Überlegungen beschleunigen, so existiert zum Beispiel kein t genau dann, wenn die Gerade parallel zur Ebene ist

Hier noch ein Quellcode ausschnitt den ich selbst verwende:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
float fVd = Dot(p.vNormal, r.vDirection);

//Ist der Strahl parallel zur Ebene
if( stAbs(fVd) < Epsilon)return false;

float fVo = -(Dot(p.vNormal, r.vOrigin) + p.d);

float _t = fVo / fVd;

return true;

5

20.10.2010, 13:20

Es funktioniert nun, danke trozdem für die Hilfe.

Ich sollte geduldiger sein mit mir =)

Werbeanzeige