2x2 Matrizen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Devils Child

Betreff: 2x2 Matrizen

BeitragMo, Okt 03, 2005 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
hi!

auf blitzbase.de ist ja eine codesammlung, und da ist auch eine 3dlib, und da sind funktionen für 4x4er matritzen wie

matrixrotate
matrixtranslate
vectormultiplymatrix
etc.

gibt es sowas auch für 2x2er matritzen?
ich hab bei google nix gefunden und wäre sehr dankbar über irgendetwas... Smile
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN

TheShadow

Moderator

BeitragMo, Okt 03, 2005 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist die frage allgemein? Ja man kann mit 2x2 Matrix rechnen. Eine 3D-Lib mit 2x2 Matrix macht jedoch keinen Sinn...

Um besser eine Matrix zu verstehen - soll man sich die Matrix als eine Tabelle vorstellen, wo eben alle 4 Grundrechenarten + - * / in einer Tabelle notiert sind...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Vertex

BeitragDi, Okt 04, 2005 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Was sollen dir eigentlich 2x2 Matrizen bringen? Du kannst damit nur in 2D Skalation und Rotation durchführen, jedoch keine Translation. Dafür brauchst du ja 3x3 Matrizen.

mfg olli
vertex.dreamfall.at | GitHub

Devils Child

BeitragDi, Okt 04, 2005 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
och ich hab in nem raycaster-tut was davon gelesen dass man für sprites 2x2 er matrizen braucht, wie sprites gerendert werden(beim raycasting) ist mir klar, und desshalb bruach ich 2x2er matrizen für rotation only, habt ihr da einen verweiss auf ne seite oder gar code? code wär mir am liebsten Smile

...
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN

TheShadow

Moderator

BeitragDi, Okt 04, 2005 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
ach so...

http://www.blitzbase.de/lexikon/matrix.htm
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Devils Child

BeitragDi, Okt 04, 2005 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
du bist ein schatz!
danke! Very Happy und wie kann ich vektoren mit matrizen multiplizieren?
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN

TheShadow

Moderator

BeitragDi, Okt 04, 2005 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
du kannst alles mit matrizen multiplizieren...

vektor -> ein start+endpunkt einer "linie" rechnest du um, indem du die jeweiligen endkoordinaten mit der matrix einzeln umrechnest...

wenn du aber eher punkt meinst, dann musst du das nur 1x machen...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Devils Child

BeitragDi, Okt 04, 2005 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
ehm, ich versteh net ganz was du meinst, hier ist mein code:

BlitzBasic: [AUSKLAPPEN]
Type Matrix
Field aa#, ab#, ac#
Field ba#, bb#, bc#
Field ca#, cb#, cc#
End Type

Function CreateMatrix.Matrix()
m.Matrix = New Matrix
MatrixIdentity(m)
Return m
End Function

Function MatrixIdentity(m.Matrix)
m\aa# = 1: m\ab# = 0: m\ac# = 0
m\ba# = 0: m\bb# = 1: m\bc# = 0
m\ca# = 0: m\cb# = 0: m\cc# = 1
End Function

Function MatrixRotate(m.Matrix, a#)
m\aa# = Cos(a#): m\ab# = Sin(a#): m\ac# = 0
m\ba# = -Sin(a#): m\bb# = Cos(a#): m\bc# = 0
m\ca# = 0: m\cb# = 0: m\cc# = 1
End Function

Function MatrixTranslate(m.Matrix, x#, y#)
m\aa# = 1: m\ab# = 0: m\ac# = 0
m\ba# = 0: m\bb# = 1: m\bc# = 0
m\ca# = x#: m\cb# = y#: m\cc# = 1
End Function


ist das richtig?
wie kann ich ne funtion vectorMULTIPLYmatrix aussehen lassen??
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN

Vertex

BeitragDi, Okt 04, 2005 22:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Einfach mal ausprobieren:
Code: [AUSKLAPPEN]
Type TMatrix
  Field aa#, ab#, ac#
  Field ba#, bb#, bc#
  Field ca#, cb#, cc#
End Type

Type TPoint
   Field X#, Y#
End Type

Function CreateMatrix.TMatrix()
   m.TMatrix = New TMatrix
   MatrixIdentity(m)
   Return m
End Function

Function MatrixIdentity(m.TMatrix)
   m\aa# = 1: m\ab# = 0: m\ac# = 0
   m\ba# = 0: m\bb# = 1: m\bc# = 0
   m\ca# = 0: m\cb# = 0: m\cc# = 1
End Function

Function MatrixRotate(m.TMatrix, a#)
   m\aa# =  Cos(a#): m\ab# = Sin(a#): m\ac# = 0
   m\ba# = -Sin(a#): m\bb# = Cos(a#): m\bc# = 0
   m\ca# =  0:       m\cb# = 0:       m\cc# = 1
End Function

Function MatrixTranslate(m.TMatrix, x#, y#)
   m\aa# =  1: m\ab# =  0: m\ac# = 0
   m\ba# =  0: m\bb# =  1: m\bc# = 0
   m\ca# = x#: m\cb# = y#: m\cc# = 1
End Function

Function PointMultMatrix(p.TPoint, m.TMatrix, r.TPoint)
   r\X# = p\X#*m\aa# + p\Y#*m\ba# + m\ca#
   r\Y# = p\X#*m\ab# + p\Y#*m\bb# + m\cb#
End Function

Global Rotate.TMatrix, Translate.TMatrix
Global Point1.TPoint, Point2.TPoint
Global Angle#, X#, Y#
Global Temp1.TPoint, Temp2.TPoint

Graphics(640, 480, 0, 2)
SetBuffer(BackBuffer())

Rotate    = New TMatrix
Translate = New TMatrix

Point1 = New TPoint
Point1\X# = -25.0 : Point1\Y# = 0.0

Point2 = New TPoint
Point2\X# = +25.0 : Point2\Y# = 0.0

X# = 320.0 : Y# = 240.0
Temp1 = New TPoint : Temp2 = New TPoint

While Not KeyDown(1)
   Cls()

   If KeyDown(30) Then Angle# = Angle#-1.0
   If KeyDown(44) Then Angle# = Angle#+1.0
   
   If KeyDown(200) Then Y# = Y#-1.0
   If KeyDown(208) Then Y# = Y#+1.0
   If KeyDown(203) Then X# = X#-1.0
   If KeyDown(205) Then X# = X#+1.0

   MatrixRotate(Rotate, Angle#)
   MatrixTranslate(Translate, X#, Y#)

   PointMultMatrix(Point1, Rotate, Temp1)
   PointMultMatrix(Temp1, Translate, Temp1)

   PointMultMatrix(Point2, Rotate, Temp2)
   PointMultMatrix(Temp2, Translate, Temp2)
   
   Line(Temp1\X#, Temp1\Y#, Temp2\X#, Temp2\Y#)
   Flip()
Wend

End


Ich habe es mir jetzt einfach mal erspart ne MatrixMultiplyMatrix Funktion zu schreiben und einfach mit die 2 Punkte erst rotiert und dann noch Translaiert.

Zu Translaieren über Pfeiltasten und Rotieren über A und Y.

mfg olli
vertex.dreamfall.at | GitHub

Devils Child

BeitragMi, Okt 05, 2005 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
cool, danke olli, ich werds gleich ausprobieren! kann man damit auch raycaster-prites projizieren, naja wir werden mal sehen Very Happy also dann thx!
tschüssi Very Happy

edit: das sprite wird ganz komisch projiziert!

BlitzBasic: [AUSKLAPPEN]
Function Spritecast()
For s.Sprite = Each Sprite
s\Vector\x# = s\x#
s\Vector\y# = s\z#
MatrixRotate(Camera, CamYaw#)
VectorMultiplyMatrix(s\Vector, Camera, s\Vector)
px = ProjectX(s\Vector\x# - CamX#, s\Vector\y# - CamZ#)
size = 30;Distance2D(s\x#, CamX#, s\z#, CamZ#)
Color 255, 255, 0
Rect px - size / 2, Cfg_Height / 2 - size / 2 - CamPitch, size, size
Next
End Function


solange man die cam net dreht werden alle sprites korrekt projiziert, dreht man sie aber, dann rasten die sprites aus Rolling Eyes
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN

TheShadow

Moderator

BeitragMi, Okt 05, 2005 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
sowas würde ich nicht mit types machen, weil diese langsamer sind... alles nur in arrays...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Devils Child

BeitragMi, Okt 05, 2005 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, vielleicht nachner, immerhin ist "Sprite" die einzige typen-liste, aber was mach ich nun falsch? wenn die cam net gedreht ist funtzt alles prächtig und wenn doch ist das sprite verrückt Arrow Crying or Very sad
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group