vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
DTA-Dateien erstellen inkl. BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | vb@rchiv CD Vol.5  | Shop Copyright ©2000-2008
 
zurück
Knüller: vb@rchiv CD Vol.4
Knüller: vb@rchiv Offline-Reader - Die Offline-Wissensdatenbank

vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4
 
Tools & Components Anzeigen 
 
Unser Tipp: Alle Online-Forenbeiträge aus dem vb@rchiv - gesammelt in einer Offline-Wissendatenbank, mit Internet-Update-Funktion, u.v.m.

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Rund um DirectX
Re: Tutorial: Picking in DirectX oder wie man 3D klicken kann...(Raycasting) 
Autor: Weltraumputze
Datum: 21.02.08 08:26

Hi Wolfi,

nunja, es gibt mehrere Möglichkeiten das herauszufinden. Wenn du deine Wände so gestellt hast das ihre Kanten parallel zu den Achsen stehen, dann brauchst du nur herausfinden ob dein Ray (der Strahl den du angeklickt hast) für diesen Bereich definiert ist. Das ist leicht, denn du kannst die Vektorgleichen g=p1 + s*(p2-p1) ganz einfach aufstellen. In etwa müsste das so aussehen:

RV=Richtungsvektor, tn=trifft nicht

wenn RV.x <> 0
dann für welche s geht die gerade durch den x-Bereich deiner Wand
sonst wenn RV.x im x-Bereich dann weiter sonst ->tn
wenn RV.y <> 0
dann für welche s geht die gerade duch den y-Bereich ... bla bla bla

so wenn jetzt alle s-Bereiche sich überlappen dann hat dein Strahl getroffen (Strahl-Box-Kollision)

das nächste wäre wenn du deine Wände oder Objekte allgemein mit "Kugeln" füllst. Du brauchst für jede Kugel nur Mittelpunkt und Radius wissen, du musst sie nichtmal anzeigen, sie sind nur gedachte Volumen für unsere Berechnung. Natürlich hab ich auch dafür wieder eine schöne Funktion geschrieben:

Function AbstandPG(p1, p2, p3, g1, g2, g3, a1, a2, a3) As Double
 Dim r, d1, d2, d3, d
 r = (a1 * (p1 - g1) + a2 * (p2 - g2) + a3 * (p3 - g3)) / (a1 * a1 + a2 * a2 + _
   a3 * a3)
 d1 = g1 + r * a1 - p1
 d2 = g2 + r * a2 - p2
 d3 = g3 + r * a3 - p3
 d = Sqr(d1 * d1 + d2 * d2 + d3 * d3)
 AbstandPG = CDbl(d)
End Function
sie berechnet den minimalen Abstand zwischen einem Punkt und einer Geraden. ganz simpel zu benutzen: p ist dein Punkt,g der Ortsvektor deiner Geraden und a der Richtungsvektor und 1,2 und 3 sind nur Platzhalter für x,y,z.
So wofür das ganze? Du kontrollierst alle Kugeln und wenn bei einer der Radius kleiner ist als der Abstand des Mittelpunktes zum Strahl dann hast du getroffen.

Und natürlich gibt es noch die professionelle Ebenen-Strahl-Kollisions-Erkennung. Nunja, das kann ich nur theoretisch erklären da ich es noch nie genutzt hab: Man stellt für die Oberflächen deiner Wände jeweils die Ebenegleichung auf (die normale und ihr ortsvektor) und kontrolliert wo der Strahl die Ebene trifft. Jetzt müsstest du deine Oberfläche dreiecksweise kontrollieren ob der Punkt darin liegt.

SO und wie bekomme ich jetzt die Kollsion mit einem Dreieck raus? Dafür gibt es viele Formeln, aber ich find folgendes am einfachsten:

wenn man den Punkt auf der Ebene des Dreiecks hat, verlängert man ihn zu einer Geraden mit einem Eckpunkt von dem Dreieck. Die restlichen beiden Punkte verbindet man auch zu einer Geraden. Nun berechnet man den Schnittpunkt der beiden Geraden. wenn nun dieser Schnittpunkt auf der 2. geraden zwischen den zwei Punkten liegt, und der Kontrollpunkt auch zwischen dem Schnittpunkt und dem dritten Eckpunkt , dann liegt der Punkt IM Dreieck.
Das klingt ziemlich kompliziert, ist aber für den Rechner sehr schnell berechnet, da keine Wurzeln oder andere rechenintensive Operationen benötigt werden.

Yo, das wäre ja glatt ein zweites Tutorial^^

naja, schönen Tag noch, ich hoffe die Antwort reicht

MfG Weltraumputze

..oO°*Kondome schützen nicht vor Geschlechtsverkehr*°Oo..
Alles was man zur DirectX8 Programmierung braucht
Visual Basic auf USB-Stick

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Tutorial: Picking in DirectX oder wie man 3D klicken kann......1.082Weltraumputze07.02.08 16:14
Re: Tutorial: Picking in DirectX oder wie man 3D klicken kan...327Weltraumputze08.02.08 13:53
Re: Tutorial: Picking in DirectX oder wie man 3D klicken kan...287VBWolfi20.02.08 11:12
Re: Tutorial: Picking in DirectX oder wie man 3D klicken kan...280Weltraumputze21.02.08 08:26
Re: Tutorial: Picking in DirectX oder wie man 3D klicken kan...237VBWolfi22.02.08 09:30
Re: Tutorial: Picking in DirectX oder wie man 3D klicken kan...242Weltraumputze22.02.08 12:35
Re: Tutorial: Picking in DirectX oder wie man 3D klicken kan...280VBWolfi25.02.08 11:13

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2008 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.

Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel