Kolisionsabfrage mit sprite3d?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
estate
Beiträge: 110
Registriert: 10.09.2004 08:53
Wohnort: nähe Graz
Kontaktdaten:

Beitrag von estate »

Ich denke, wenn die Kollision nur bei der eigenen Spielfigur so genau berechnet werden muss, dürfte es auch ohne asm möglich sein.

Ich habe nämlich rotationsalgorithmen schon geschrieben.
Wenn noch Bedarf besteht, poste ich sie natürlich.
orange-blue
Beiträge: 556
Registriert: 04.09.2004 22:23
Kontaktdaten:

Beitrag von orange-blue »

JA BITTE :bounce:
estate
Beiträge: 110
Registriert: 10.09.2004 08:53
Wohnort: nähe Graz
Kontaktdaten:

Beitrag von estate »

hierbei handelt es sich 3d Rotiationsformel, welche aber auch funzen müssten:

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 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.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

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 :shock: ?

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

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
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

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....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
#NULL
Beiträge: 2239
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

naja, die fläche für die auswahl selbst müßte schon etwas kleiner sein, als die die angezeigt wird.

<OT>
KG hat geschrieben:Bild
<)
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

#NULL hat geschrieben:naja, die fläche für die auswahl selbst müßte schon etwas kleiner sein, als die die angezeigt wird.
Und warum? :?
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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten