JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=bd4e1f2555f8e41409424795e1d33da8Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Kollision zwischen Strecke und Dreieck
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Faller
Junior JLI'ler


Alter: 36
Anmeldedatum: 30.11.2006
Beiträge: 88
Wohnort: Dresden
Medaillen: Keine

BeitragVerfasst am: 12.12.2006, 13:14    Titel: Kollision zwischen Strecke und Dreieck Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 12.12.2006, 15:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
David
Super JLI'ler


Alter: 39
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 12.12.2006, 15:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 12.12.2006, 15:24    Titel: Antworten mit Zitat

Ja, Ebenen sind nicht kompliziert, ahben aber erstmal wenig mit BSP Bäumen zu tun Wink

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Faller
Junior JLI'ler


Alter: 36
Anmeldedatum: 30.11.2006
Beiträge: 88
Wohnort: Dresden
Medaillen: Keine

BeitragVerfasst am: 12.12.2006, 15:35    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
David
Super JLI'ler


Alter: 39
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 12.12.2006, 17:08    Titel: Antworten mit Zitat

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 Wink


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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 12.12.2006, 18:43    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Faller
Junior JLI'ler


Alter: 36
Anmeldedatum: 30.11.2006
Beiträge: 88
Wohnort: Dresden
Medaillen: Keine

BeitragVerfasst am: 13.12.2006, 11:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 13.12.2006, 14:25    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 13.12.2006, 16:12    Titel: Antworten mit Zitat

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 Wink
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Faller
Junior JLI'ler


Alter: 36
Anmeldedatum: 30.11.2006
Beiträge: 88
Wohnort: Dresden
Medaillen: Keine

BeitragVerfasst am: 14.12.2006, 12:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 14.12.2006, 13:18    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Faller
Junior JLI'ler


Alter: 36
Anmeldedatum: 30.11.2006
Beiträge: 88
Wohnort: Dresden
Medaillen: Keine

BeitragVerfasst am: 15.12.2006, 12:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Faller
Junior JLI'ler


Alter: 36
Anmeldedatum: 30.11.2006
Beiträge: 88
Wohnort: Dresden
Medaillen: Keine

BeitragVerfasst am: 15.12.2006, 13:15    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 15.12.2006, 14:35    Titel: Antworten mit Zitat

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 Wink
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum