Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Faller Junior JLI'ler
Alter: 37 Anmeldedatum: 30.11.2006 Beiträge: 88 Wohnort: Dresden Medaillen: Keine
|
Verfasst am: 12.12.2006, 13:14 Titel: Kollision zwischen Strecke und Dreieck |
|
|
Ich habe in einer
D3DXMATRIX WorldMatrix
alle meine Dreiecke abgespeichert und diese sind suber sichtbar
ich habe einen spieler(oder das was ma einer werden soll)
diser spieler soll sich bewegen bei der bewegung soll geprüft werden ob er durch ein Dreick der worldmatrix geht oder net die Positionen der einselnen Dreicke sind nicht mehr bekannt
die position des spielers is natürlich noch bekannt
ich habe gesucht und folgendes gefunden ich habe aber leider probleme mit diesen sachen
folgende befehle sind mir untergekommen
D3DXPlaneIntersectLine
D3DXIntersectTri
LineHitsPlane
beim ersten hab ich verstanden habe aber dort ein problem das ich keine ebene erstellen kann das heis ich weis net wie ich eine ebene erstellen kann
die beiten anderen befehle wurden kaum genug erlüetert das ich sie verstanden hätte
es wurde auch das wort BSP Baum in den raum gescmissen was ist das wie funktioniert es
http://www.scherfgen-software.net/index.php?action=tutorials&topic=collision_2&PHPSESSID=f1bf631abfb6cfa0bcfc4c606f8ada01
die folgende seite fand ich sehr aufschluss reich aber da ist wider die sache mit der ebne die ich nicht weis wie ich sie erstelle
folgende Frage an euch welche der obengestellten funktionen hilft mir am bessten
wie kann ich eine ebene initialisieren
was ist ein bsp Baum
ich hoffe das die fragen einteutig sind und ihr mir helfen könnt _________________ versuche alles nur wann und wie ist die frage |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 12.12.2006, 15:11 Titel: |
|
|
Bsp ist ein Binary Space Partition Baum, etwas ziemlihc cooles und sehr kompliziertes. Du u terteilst quasi deine Welt immer weiter. Wenn du weißt, das ein Objekt in einem Bereich leigt, kann es nur in dessen Unterbereichen sein und in keinem anderen. Diese erkenntnis spart dir sehr viel Rechenzeit.
Für den Anfang könnte das aber sehr schwer sein.
Das Problem, Gerade/Dreieck ist eigentlich Vektorrechnung. Wäre gut, wenn du dich damit auskennen würdest, weil sonst, hast du kaum Chancen 3D Grafik zu verstehen.
Im Prinzip gibt es eine geraden und eine Ebenengleichung, haste beide gegeben kannste gemeinsame Punkte ausrechnen, d.h. ob der Strahl (bzw. die Gerade) die Ebene schneidet. Jetzt musste nur noch wissen, ob dieser Schnittpunkt auch innealb des Dreiecks ist (eine Ebene ist eine unendlich große Fläche, ein Dreieck eben nur ein Teil von ihr) und shcon haste die Antwort. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
David Super JLI'ler
Alter: 40 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 12.12.2006, 15:16 Titel: |
|
|
Zitat: |
Bsp ist ein Binary Space Partition Baum, etwas ziemlihc cooles und sehr kompliziertes
|
So kompliziert auch wieder nicht.
Eine Ebene stellst du so auf: Gegeben 3 Punkte des Dreiecks (A, B, C). Zunächst berechnest du die Vektoren welche die Ebene aufspannen \vec{a} = B-A, \vec{b}=C-A. Danach berechnest du das Kreuzprodukt der Vektoren und hast somit die Ebenennormale, nun musst du nurnoch einen Punkt auf der Ebene bestimmen und schon hast du deine Ebene aufgestellt.
grüße |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 12.12.2006, 15:24 Titel: |
|
|
Ja, Ebenen sind nicht kompliziert, ahben aber erstmal wenig mit BSP Bäumen zu tun
Naja, für Ebenen muss man halt wissen, was das Kreuzprodukt ist, und was ein Normalvektor ist:
Normalvekotr: Ein rictungsvektor der Senkrecht irgendwo drauf steht (Bei Ebenen ist der überall gleich)
Kreuzpordukt: Vektor der senkrecht zu 2 anderen Vektoren steht.
Achja, Vektorprodukt heißt manchmal Kreuzprodukt und Skalarprodukt auch Punktprodukt.
Naja, kannst dir das hier mal ansehen, keine Ahnung obs was raugt, sieht aber ok aus:
http://mo.mathematik.uni-stuttgart.de/kurse/kurs8/ _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Faller Junior JLI'ler
Alter: 37 Anmeldedatum: 30.11.2006 Beiträge: 88 Wohnort: Dresden Medaillen: Keine
|
Verfasst am: 12.12.2006, 15:35 Titel: |
|
|
thx ich weis jetze was ebnen sind
nun folge frage wie baue ich das in mein Spiel ein
gegeben ist die Matrix siehe oben und was ich noch vergessen habe
LPDIRECT3DVERTEXBUFFER9 den buffer aller dargestellten dreiecke
wie schafe ich es jetze das die ebne immer daliegt wo die Dreiecke sind
und welche der obenen funktionen soll ich dafür nutzen oder gleich eine ganz andere vom spiler ist gegeben x y z und die neue Kordinaten bzw die diverenz der einselnen werte _________________ versuche alles nur wann und wie ist die frage |
|
Nach oben |
|
 |
David Super JLI'ler
Alter: 40 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 12.12.2006, 17:08 Titel: |
|
|
Die Matrix selbst interessiert erstmal recht wenig. Wichtiger ist die Position der einzelnen Vertices (die du aus deinem Vertexpuffer bekommst). Was genau du damit anstellst bleibt dir überlassen.
Jonathan_Klein hat Folgendes geschrieben: |
Ja, Ebenen sind nicht kompliziert, ahben aber erstmal wenig mit BSP Bäumen zu tun
|
Mir ist durchaus bewusst was du sagen willst. Ich hab das aber unabhängig zu meiner Ebenenerklärung gemeint. BSP Bäume sind nicht so wahnsinnig kompliziert wie von vielen angenommen wird. Und Ebenen haben sogar ganz essentiell was mit BSP Bäumen zu tun!
grüße |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 12.12.2006, 18:43 Titel: |
|
|
Hm, ja gut, die Ebenen braucht man um die Bereich abzugrenzen.
Und ob die jetzt kompliziert sind oder nicht muss jeder selber entscheiden. Ich stell mir nur vor, das die Anfangs kompliziert sind, aber egal. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Faller Junior JLI'ler
Alter: 37 Anmeldedatum: 30.11.2006 Beiträge: 88 Wohnort: Dresden Medaillen: Keine
|
Verfasst am: 13.12.2006, 11:12 Titel: |
|
|
mm könnte mir jemand sagen wie ich aus dem buffer die einselnen punkte heraus bekomme und dann eine abfrage mache ich klaube diese möglich keit solte die einfachste sein für mich zumindestens
ich wölte also erst die punkte aus dem buffer laden dann die ebene "spannen" und dann gugen ob der stahl mit der ebene Kolitiert so jetze brauche ich nur noch die richtigen befehle und dann könnte ich weiter machen wäre sehr dankbar wenn mir jemand diese Befehle schreibt mit einer erklärung
ps wo wie bekomme ich die direktx hilfe
mfg Faller _________________ versuche alles nur wann und wie ist die frage |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 13.12.2006, 14:25 Titel: |
|
|
Wieso aus dem Buffer? Ich meine, du schreibst die doch in dne Buffer rien, dann las die doch im hauptspeicher, das ist dann einfacher.
Aber um die Daten as dme BVuffer zu hohlen, müsstest du den prinzipiell locken und dann bekommste einen Zeiger auf die Daten. Wenn du dann weißt, welches Format der Buffer hat, kannste die ganz einfach auslesen. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 13.12.2006, 16:12 Titel: |
|
|
Faller hat Folgendes geschrieben: | ps wo wie bekomme ich die direktx hilfe |
Wenn du das DirectX SDK installiert hast, ist die Doku ist normalerweise im entsprechenden Startmenüeintrag  _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
Faller Junior JLI'ler
Alter: 37 Anmeldedatum: 30.11.2006 Beiträge: 88 Wohnort: Dresden Medaillen: Keine
|
Verfasst am: 14.12.2006, 12:44 Titel: |
|
|
danke ich habs gefunden die hilfe so
jetzte wieder zurück zur ursprungsfrage zur kolision wie kann ich aus dem Buffer nenen wir ihn x die Punkte des Ursprungs auslesen und dann auf eine ebene spannen und dann abfragen
ich hätte hier gerne mal ein paar möglichkeiten als code mach dies dann das und dann dreh es um oder so den alles was ich habe ist die theorie aber keine Befehle bitte helft mir
mfg faller _________________ versuche alles nur wann und wie ist die frage |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 14.12.2006, 13:18 Titel: |
|
|
Doku hat Folgendes geschrieben: |
IDirect3DVertexBuffer9::Lock Method
Locks a range of vertex data and obtains a pointer to the vertex buffer memory.
|
Damit kommst du an das Array der Vertexdaten.
So, nun kannste netweder vorgefertigte Funktionen benutzen, oder du nimmst dir n Blatt Papaier und fängst an mit Ebenen und Vektoren zu rechnen.
Auf die Ebene kommst du, in dem du von dem Dreieck 2 Punkte jeweils von einem abzeihst, d.h. du hast dann die Streck AB udn die Strecke AC.
Jetzt davon das Vektorprodukt ausrechnen und du hast schon den Normalvektor der Ebene.
So, den in die Ebenengleichung eingesetzt und schon haste das d (die Gleichung ist ja d=Skalarprodukt(X, P)).
Jetzt beide Gelichsetzen und du hast den Punkt auf der Ebene.
Dann am besten mit der Innenwinkelsumme weiter rechnen.
Achja: Evlt. brauchst du ja für den Anfang gar keine Dreieckskollision? Wofür genau willste das haben? Es gibt genügend einfacherere Modelle, z.b. BoundingSphere oder BoundingBox die wesentlich einfacher zu berechnen sind. (Natürlich etwas ungenauer, aber sehr oft ist das ganz egal) _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Faller Junior JLI'ler
Alter: 37 Anmeldedatum: 30.11.2006 Beiträge: 88 Wohnort: Dresden Medaillen: Keine
|
Verfasst am: 15.12.2006, 12:10 Titel: |
|
|
die kollision soll für die spieler umwelt kollision da sein für die spieler spieler kolision und für die waffen spieler kolision und da empfand ich das strecke Dreieck das beste wäre alles auf einmal zu machen wenn der spieler sich bewegt die strecke zw ausgang neuer punkt
die waffe zwischen bereich des schwunges mit gegner oder gelände
thx ich wür die methode ich werde mir das ma ausprobieren thx
mfg faller _________________ versuche alles nur wann und wie ist die frage |
|
Nach oben |
|
 |
Faller Junior JLI'ler
Alter: 37 Anmeldedatum: 30.11.2006 Beiträge: 88 Wohnort: Dresden Medaillen: Keine
|
Verfasst am: 15.12.2006, 13:15 Titel: |
|
|
so das is ja eine methode einer klasse ich arbeite net gerne mit klassen das vorne weg (mag die einfach persönlich net )
so hier brauch ich sie ja gut ich würde gerne mal eine deklaration sehen ich weis das das internet gross ist und ich da bestimmt ihrgentwo eine subererkärung herbekomme ich würde sie plos halt gerne an diesem Klasse sehen damit ich mir was abkupfern kann aslo das habe ich in der direkt x hilfe gefunden
typedef struct IDirect3DVertexBuffer9 *LPDIRECT3DVERTEXBUFFER9, *PDIRECT3DVERTEXBUFFER9;
das ist wohl die Klasse an sich die ich erstmal öffnen muss den LP Buffer hab ich ja aber was ist der P Buffer(ne erklärung hätte ich gerne)
und das ist dann die methode die ich aufruffen muss
IDirect3DVertexBuffer9::Lock Method
so was schreibe ich jetze aber in die (); oder muss ich die garnet mit machen
ich hätte gerne ein beispiel für das oben genannte also eine deklaration der klasse und dann einen aufruff damit ich weis wie ich es machen muss
ich wäre dankbar wenn mir jemand helfen könnte
ps wie kann ich hier editieren _________________ versuche alles nur wann und wie ist die frage |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 15.12.2006, 14:35 Titel: |
|
|
Editieren ist einfach, neben dienen Posts ist jeweils so ein lustiger Button, realtiv klein aber findbar.
Ich fände es net, wenn du mal Groß- und IKleinschreibung nehmen würdest, oder wenigstens Punkte machen würdest, dein Schreibstil ist anstrengend
Ok, Spieler Spieler solltest du Kugeln nehmen, für Spieler Waffe auch.
Deine Idee ist gar nicht so gut, da der Strahl auf den sich der Spieler bewegt an dem Gegner vorbeigehen kann, obwohl du mit ihn kollidieren müstest. Du bräuchtest also wenn dann scho mehrere Strahlen.
Kugel sind sau einfach, Quader wären zwar in Einzelfällen evtl. besser, aber ein Kleinwenig komplizierter.
Kugelkollision läuft per Radienvergleich und Entfernung der Mittelpunkte.
Bei Quadern, prüfst du die Eckpunkte, nimm am besten ein Blatt und mal dir Rechtecke auf, die sich schneiden und welche die sich nciht schneiden und versuche eine Formel zu finden.
Mach das selbe mit Krisen und guck, ob du einen Zusammenhang zwischen Abstand(also der Mittelpunkte) und der beiden Radien der Kreise findest.
Dann fehlt nur noch die Kollision mit der Welt, aber dafür müsste ich wissen wie die aufgebaut sein soll. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
|