Kolisionsabfrage mit sprite3d?
-
orange-blue
- Beiträge: 556
- Registriert: 04.09.2004 22:23
- Kontaktdaten:
hierbei handelt es sich 3d Rotiationsformel, welche aber auch funzen müssten:
der Array punkti beinhaltet die Ausgangspositionen der Punkte, die nicht verändert werden.
der Array punkt gibt die neuen punkte aus
wx,wy,wz sind die Winkel um welche der 3 Achsen die Punkte gedreht werden sollen.
Wenn aber nur 2d punkte damit Rotiert werden sollen, gibt es nur eine Drehachse. du must nur ausprobieren welche diese ist.
Code: Alles auswählen
Dim _sin.f(360)
Dim _cos.f(360)
For x = 0 To 360
_sin(x) = Sin(x/(180/3.141))
_cos(x) = Cos(x/(180/3.141))
Next x
For ofs=1 To anzahlpunkte
punkti(ofs,#x) =( _cos(wy) * _cos(wz) * punkt(ofs,#x) - _cos(wy) * _sin(wz) * punkt(ofs,#y) + _sin(wy) * punkt(ofs,#z))
punkti(ofs,#y) = (_cos(wx) * _sin(wz) + _sin(wx) * _sin(wy) * _cos(wz)) * punkt(ofs,#x) + (_cos(wx) * _cos(wz) - _sin(wx) * _sin(wy) * _sin(wz)) * punkt(ofs,#y) - _sin(wx) * _cos(wy) * punkt(ofs,#z)
punkti(ofs,#z) =(_sin(wx) * _sin(wz) - _cos(wx) * _sin(wy) * _cos(wz)) * punkt(ofs,#x) + (_sin(wx) * _cos(wz) + _cos(wx) * _sin(wy) * _sin(wz)) * punkt(ofs,#y) + _cos(wx) * _cos(wy) * punkt(ofs,#z)
Next
der Array punkt gibt die neuen punkte aus
wx,wy,wz sind die Winkel um welche der 3 Achsen die Punkte gedreht werden sollen.
Wenn aber nur 2d punkte damit Rotiert werden sollen, gibt es nur eine Drehachse. du must nur ausprobieren welche diese ist.
Ist schon einige Zeit vergangen seit sich hier was getan hat, desshalb wollte ich mal nachfragen ob es inzwischen schon bessere Ergebnisse gibt als die hier vorgestellten, oder hat etwa schon jemand die Userlib geproggt
?
Gruß
Scarabol
Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
wozu?
S3D-collision oder S2D-rotation?
zu letzterem hat Stefan ne routine geschrieben, die ziemlich performant ist.
zu ersterem gibts u.a. meine koordinaten-basierten kollisionen.
(die sind eh besser als pixel-kram)
http://www.purebasic.fr/german/viewtopic.php?t=9093
S3D-collision oder S2D-rotation?
zu letzterem hat Stefan ne routine geschrieben, die ziemlich performant ist.
zu ersterem gibts u.a. meine koordinaten-basierten kollisionen.
(die sind eh besser als pixel-kram)
http://www.purebasic.fr/german/viewtopic.php?t=9093
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Ich arbeite gerade an einem kleinen Strategie Spiel und will jetzt mit der Maus durch klicken Einheiten auswählen können. Dafür muss ich ja irgendwie abfragen ob die Maus den gezeichneten Teil des Sprites überhaupt berührt oder nicht. Bisher (ohne Sprite3D) hab ich ein MouseSprite erstellt, dass nur einen Pixel groß war und hab dann mit SpritePixelCollision überprüft ob die Maus das Sprite trifft oder nicht. Jetzt hab ich das Problem, dass ich Sprite3D verwende, da sich die Einheiten ja auch drehen sollen, aber nicht mehr weiß wie ich da noch eine geschickte Kollisionsabfrage einbauen kann. Nimm jetzt für den Anfang mal die Methode mit der Kreisabfrage, wollte aber nachhacken ob es nicht noch eine bessere gibt.
Gruß
Scarabol
Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
drehen per sprite3D... also draufsicht wie Dune von Stargate...
probier mal, wie das wirkt, wenn du einen sehr kleinen kreis im zentrum der figur nimmst.
im allgemeinen wird man ja eh recht zentral auf die zigur zeigen,
und nicht die spitze des gewehrlaufs anpeilen...
helfen beim gameplay tut es auch, wenn du die figur schon bei nem mouseover highlightest,
also ihr so nen kleinen strahlenden rahmen gibst oder sowas...
außerdem könnte man die kreis-koll-funktion noch mal kürzen,
wenn es dir um kollision mit nem einzelnen punkt geht...
meiner erfahrung nach ist es einfach wesentlich performanter,
mit einem koordinaten-check zu arbeiten.
besonders ein mouseover-check wäre mit sprite-prixel-collision eine echte gähn-nummer....
probier mal, wie das wirkt, wenn du einen sehr kleinen kreis im zentrum der figur nimmst.
im allgemeinen wird man ja eh recht zentral auf die zigur zeigen,
und nicht die spitze des gewehrlaufs anpeilen...
helfen beim gameplay tut es auch, wenn du die figur schon bei nem mouseover highlightest,
also ihr so nen kleinen strahlenden rahmen gibst oder sowas...
außerdem könnte man die kreis-koll-funktion noch mal kürzen,
wenn es dir um kollision mit nem einzelnen punkt geht...
meiner erfahrung nach ist es einfach wesentlich performanter,
mit einem koordinaten-check zu arbeiten.
besonders ein mouseover-check wäre mit sprite-prixel-collision eine echte gähn-nummer....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Bei den gängigen Strategiespielen wird ja die selectierte Einheit immer
mit einem Kreis oder Rechteck/ Quadrat umrahmt. Genau diesen Rahmen
kannst du als Kollisionspunkt für die Maus nehmen. So würde sich keiner
beschweren, das du nicht Pixel genau abfragst und man hätte, wie Kaeru
schon ansprach, die ausgewählte Einheit hervorgehoben.
MFG PMV
mit einem Kreis oder Rechteck/ Quadrat umrahmt. Genau diesen Rahmen
kannst du als Kollisionspunkt für die Maus nehmen. So würde sich keiner
beschweren, das du nicht Pixel genau abfragst und man hätte, wie Kaeru
schon ansprach, die ausgewählte Einheit hervorgehoben.
MFG PMV
Und warum?#NULL hat geschrieben:naja, die fläche für die auswahl selbst müßte schon etwas kleiner sein, als die die angezeigt wird.
Wofür sich mehr Aufwand machen? ... Ich würds so machen, und ich bin
sicher, es würde sich keiner beschweren. Aber er muss wissen, wie er es
macht ... im prinzip isses wurscht, hauptsache der Radius ist groß genug,
um die Einheiten effektiv (blitz schnell) auswählen zu können.
MFG PMV

