3D Library

Übersicht BlitzBasic Codearchiv

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Vertex

Betreff: 3D Library

BeitragDi, Nov 09, 2004 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Ja, ich habe mal die 3D Library von blitzbase.de erweitert. Sie verwendet nun 4x4 Matrizen und 4 dimensionale Vektoren.

CreateMatrix.matrix_t() Erstellt eine Matrix und gibt diese zurück
FreeMatrix(m.matrix_t) Entfernt Matrix m aus dem Speicher
MatrixIdentity(m.matrix_t) Macht aus Matrix m eine Einheitsmatrix
MatrixRotateX(m.matrix_t, a#) Macht aus Matrix m eine X-Rotationsmatrix mit dem Winkel a
MatrixRotateY(m.matrix_t, a#) Macht aus Matrix m eine Y-Rotationsmatrix mit dem Winkel a
MatrixRotateZ(m.matrix_t, a#) Macht aus Matrix m eine Z-Rotationsmatrix mit dem Winkel a
MatrixScale(m.matrix_t, sx#, sy#, sz#) Macht aus der Matrix m eine Skalierungsmatrix mit den Faktoren sx#, sy# und sz#
MatrixTranslate(m.matrix_t, tx#, ty#, tz#) Macht aus Matrix m eine Verschiebungsmatrix mit den Faktoren tx#, ty# und tz#
MatrixTranspose(m.matrix_t) Spiegelt Matrix m um ihre Diagonale aa-dd
MatrixMultiplyMatrix(a.matrix_t, b.matrix_t, c.matrix_t) Multipliziert Matrix a mit b und weist die result. Matrix in Matrix c zu

CreateVector.vector_t() Erstellt einen neuen Vektor und gibt diesen zurück
FreeVector(v.vector_t) Entfernt Vektor v aus dem Speicher
VectorDotProduct#(a.vector_t, b.vector_t) berechnet das Punktprodukt aus Vektor a mit b und gibt dieses zurück
VectorLength#(v.vector_t) gibt die Länge des Vektors v zurück
VectorScale(v.vector_t, s#) Skaliert den Vektor v mit dem Faktor s
VectorNormalize(v.vector_t) Nomalisiert Vektor v
VectorCrossProduct(a.vector_t, b.vector_t, c.vector_t) Berechnet das Kreuzprodukt aus Vektor a mit b und weist das Resultat Vektor c zu
VectorAddition(a.vector_t, b.vector_t, c.vector_t) Addiert vektor a mit b und weisst das Ergebnis Vektor c zu
VectorSubtraction(a.vector_t, b.vector_t, c.vector_t) Subtrahiert Vektor b von a und weisst das Ergebnis Vektor c zu

VectorMultiplyMatrix(v.vector_t, m.matrix_t) Multipliziert Vektor v mit Matrix m
MatrixCrossProduct(v.vector_t, m.matrix_t) Erstellt eine Matrix die multipliziert mit Vektor v das Kreuzprodukt von Vektor v ergibt und weisst sie Matrix m zu

BlitzBasic: [AUSKLAPPEN]
; -----------------------------------------------------------------------
Type matrix_t
Field aa#, ab#, ac#, ad#
Field ba#, bb#, bc#, bd#
Field ca#, cb#, cc#, cd#
Field da#, db#, dc#, dd#
End Type

Type vector_t
Field x#, y#, z#, w#
End Type
; -----------------------------------------------------------------------

; -----------------------------------------------------------------------
Function CreateMatrix.matrix_t()
Local m.matrix_t = New matrix_t

MatrixIdentity(m)

Return m
End Function

Function FreeMatrix(m.matrix_t)
Delete m
m = Null
End Function

Function MatrixIdentity(m.matrix_t)

; | 1 0 0 0 |
; | 0 1 0 0 |
; | 0 0 1 0 |
; | 0 0 0 1 |

m\aa# = 1.0 : m\ab# = 0.0 : m\ac# = 0.0 : m\ad# = 0.0
m\ba# = 0.0 : m\bb# = 1.0 : m\bc# = 0.0 : m\bd# = 0.0
m\ca# = 0.0 : m\cb# = 0.0 : m\cc# = 1.0 : m\cd# = 0.0
m\da# = 0.0 : m\db# = 0.0 : m\dc# = 0.0 : m\dd# = 1.0
End Function

Function MatrixRotateX(m.matrix_t, a#)

; | 1 0 0 0 |
; | 0 cos(a) sin(a) 0 |
; | 0 -sin(a) cos(a) 0 |
; | 0 0 0 1 |

m\aa# = 1.0 : m\ab# = 0.0 : m\ac# = 0.0 : m\ad# = 0.0
m\ba# = 0.0 : m\bb# = Cos#(a#) : m\bc# = Sin#(a#) : m\bd# = 0.0
m\ca# = 0.0 : m\cb# = -Sin#(a#) : m\cc# = Cos#(a#) : m\cd# = 0.0
m\da# = 0.0 : m\db# = 0.0 : m\dc# = 0.0 : m\dd# = 1.0
End Function

Function MatrixRotateY(m.matrix_t, a#)

; | cos(a) 0 -sin(a) 0 |
; | 0 1 0 0 |
; | 0 sin(a) 0 cos(a) |
; | 0 0 0 1 |

m\aa# = Cos#(a#) : m\ab# = 0.0 : m\ac# = -Sin#(a#) : m\ad# = 0.0
m\ba# = 0.0 : m\bb# = 1.0 : m\bc# = 0.0 : m\bd# = 0.0
m\ca# = Sin#(a#) : m\cb# = 0.0 : m\cc# = Cos#(a#) : m\cd# = 0.0
m\da# = 0.0 : m\db# = 0.0 : m\dc# = 0.0 : m\dd# = 1.0
End Function

Function MatrixRotateZ(m.matrix_t, a#)

; | cos(a) sin(a) 0 0 |
; | -sin(a) cos(a) 0 0 |
; | 0 0 1 0 |
; | 0 0 0 1 |

m\aa# = Cos#(a#) : m\ab# = Sin#(a#) : m\ac# = 0.0 : m\ad# = 0.0
m\ba# = -Sin#(a#) : m\bb# = Cos#(a#) : m\bc# = 0.0 : m\bd# = 0.0
m\ca# = 0.0 : m\cb# = 0.0 : m\cc# = 1.0 : m\cd# = 0.0
m\da# = 0.0 : m\db# = 0.0 : m\dc# = 0.0 : m\dd# = 1.0
End Function

Function MatrixScale(m.matrix_t, sx#, sy#, sz#)

; | sx 0 0 0 |
; | 0 sy 0 0 |
; | 0 0 sz 0 |
; | 0 0 0 1 |

m\aa# = sx# : m\ab# = 0.0 : m\ac# = 0.0 : m\ad# = 0.0
m\ba# = 0.0 : m\bb# = sy# : m\bc# = 0.0 : m\bd# = 0.0
m\ca# = 0.0 : m\cb# = 0.0 : m\cc# = sz# : m\cd# = 0.0
m\da# = 0.0 : m\db# = 0.0 : m\dc# = 0.0 : m\dd# = 1.0
End Function

Function MatrixTranslate(m.matrix_t, tx#, ty#, tz#)

; | 1 0 0 0 |
; | 0 1 0 0 |
; | 0 0 1 0 |
; | tx ty tz 1 |

m\aa# = 1.0 : m\ab# = 0.0 : m\ac# = 0.0 : m\ad# = 0.0
m\ba# = 0.0 : m\bb# = 1.0 : m\bc# = 0.0 : m\bd# = 0.0
m\ca# = 0.0 : m\cb# = 0.0 : m\cc# = 1.0 : m\cd# = 0.0
m\da# = tx# : m\db# = ty# : m\dc# = tz# : m\dd# = 1.0
End Function

Function MatrixTranspose(m.matrix_t)
Local t.matrix_t = New matrix_t

; | aa ab ac ad | -> | aa ba ca da
; | ba bb bc bd | | ab bb cb db
; | ca cb cc cd | | ac bc cc dc
; | da db dc dd | | ad bd cd dd

t\aa# = m\aa# : t\ab# = m\ab# : t\ac# = m\ac# : t\ad# = m\ad#
t\ba# = m\ba# : t\bb# = m\bb# : t\bc# = m\bc# : t\bd# = m\bd#
t\ca# = m\ca# : t\cb# = m\cb# : t\cc# = m\cc# : t\cd# = m\cd#
t\da# = m\da# : t\db# = m\db# : t\dc# = m\dc# : t\dd# = m\dd#

m\aa# = t\aa# : m\ab# = t\ba# : m\ac# = t\ca# : m\ad# = t\da#
m\ba# = t\ab# : m\bb# = t\bb# : m\bc# = t\cb# : m\bd# = t\db#
m\ca# = t\ac# : m\cb# = t\bc# : m\cc# = t\cc# : m\cd# = t\dc#
m\da# = t\ad# : m\db# = t\bd# : m\dc# = t\cd# : m\dd# = t\dd#

Delete t
End Function

Function MatrixMultiplyMatrix(a.matrix_t, b.matrix_t, c.matrix_t)

; c = a*b

; aa ab ac ad
c\aa# = a\aa#*b\aa# + a\ab#*b\ba# + a\ac#*b\ca# + a\ad#*b\da#
c\ab# = a\aa#*b\ab# + a\ab#*b\bb# + a\ac#*b\cb# + a\ad#*b\db#
c\ac# = a\aa#*b\ac# + a\ab#*b\bc# + a\ac#*b\cc# + a\ad#*b\dc#
c\ad# = a\aa#*b\ad# + a\ad#*b\bd# + a\ac#*b\cd# + a\ad#*b\dd#

; ba bb bc bd
c\ba# = a\ba#*b\aa# + a\bb#*b\ba# + a\bc#*b\ca# + a\bd#*b\da#
c\bb# = a\ba#*b\ab# + a\bb#*b\bb# + a\bc#*b\cb# + a\bd#*b\db#
c\bc# = a\ba#*b\ac# + a\bb#*b\bc# + a\bc#*b\cc# + a\bd#*b\dc#
c\bd# = a\ba#*b\ad# + a\bd#*b\bd# + a\bc#*b\cd# + a\bd#*b\dd#

; ca cb cc cd
c\ca# = a\ca#*b\aa# + a\cb#*b\ba# + a\cc#*b\ca# + a\cd#*b\da#
c\cb# = a\ca#*b\ab# + a\cb#*b\bb# + a\cc#*b\cb# + a\cd#*b\db#
c\cc# = a\ca#*b\ac# + a\cb#*b\bc# + a\cc#*b\cc# + a\cd#*b\dc#
c\cd# = a\ca#*b\ad# + a\cd#*b\bd# + a\cc#*b\cd# + a\cd#*b\dd#

; da db dc dd
c\ba# = a\da#*b\aa# + a\db#*b\ba# + a\dc#*b\ca# + a\dd#*b\da#
c\bb# = a\da#*b\ab# + a\db#*b\bb# + a\dc#*b\cb# + a\dd#*b\db#
c\bc# = a\da#*b\ac# + a\db#*b\bc# + a\dc#*b\cc# + a\dd#*b\dc#
c\bd# = a\da#*b\ad# + a\dd#*b\bd# + a\dc#*b\cd# + a\dd#*b\dd#
End Function
; -----------------------------------------------------------------------

; -----------------------------------------------------------------------
Function CreateVector.vector_t()
Local v.vector_t = New vector_t
Return v
End Function

Function FreeVector(v.vector_t)
Delete v
v = Null
End Function

Function VectorDotProduct#(a.vector_t, b.vector_t)
Return a\x#*b\x# + a\y#*b\y# + a\z#*b\z#
End Function

Function VectorLength#(v.vector_t)
Return Sqr#(VectorDotProduct#(v, v))
End Function

Function VectorScale(v.vector_t, s#)

; v = v * s#

v\x# = v\x# * s#
v\y# = v\y# * s#
v\z# = v\z# * s#
If v\w# <> 0.0 Then v\w# = 1.0
End Function

Function VectorNormalize(v.vector_t)
VectorScale(v, 1.0 / VectorLength(v))
End Function

Function VectorCrossProduct(a.vector_t, b.vector_t, c.vector_t)
c\x# = a\y#*b\z# - a\z#*b\y#
c\y# = a\z#*b\x# - a\x#*b\z#
c\z# = a\x#*b\y# - a\y#*b\x#
If a\w# = 0.0 And b\w# = 0 Then
c\w# = 0.0
Else
c\w# = 1.0
EndIf
End Function

Function VectorAddition(a.vector_t, b.vector_t, c.vector_t)

; c = a+b

c\x# = a\x# + b\x#
c\y# = a\y# + b\y#
c\z# = a\z# + b\z#
If a\w# = 0.0 And b\w# = 0 Then
c\w# = 0.0
Else
c\w# = 1.0
EndIf
End Function

Function VectorSubtraction(a.vector_t, b.vector_t, c.vector_t)

; c = a-b

c\x# = a\x# - b\x#
c\y# = a\y# - b\y#
c\z# = a\z# - b\z#
If a\w# = 0.0 And b\w# = 0 Then
c\w# = 0.0
Else
c\w# = 1.0
EndIf
End Function
; -----------------------------------------------------------------------

; -----------------------------------------------------------------------
Function VectorMultiplyMatrix(v.vector_t, m.matrix_t)
Local t.vector_t = New vector_t

; v = v*m

t\x# = v\x#
t\y# = v\y#
t\z# = v\z#
t\w# = v\w#

v\x# = m\aa#*t\x# + m\ba#*t\y# + m\ca#*t\z# + m\da#*t\w#
v\y# = m\ab#*t\x# + m\bb#*t\y# + m\cb#*t\z# + m\db#*t\w#
v\z# = m\ac#*t\x# + m\bc#*t\y# + m\cc#*t\z# + m\dc#*t\w#
v\w# = m\ad#*t\x# + m\bd#*t\y# + m\cd#*t\z# + m\dd#*t\w#

Delete t
End Function

Function MatrixCrossProduct(v.vector_t, m.matrix_t)

; v*m = VectorCrossProduct(v)

m\ab# = v\z#
m\ac# = -v\y#
m\ba# = -v\z#
m\bc# = v\x#
m\ca# = v\y#
m\cb# = v\x#
m\dd# = 1.0
End Function
; -----------------------------------------------------------------------


Ist noch ungetestet. Mache in laufe der Woche mal eine kleine 3D Wireframe Engine, wo man sehen kann, wie sie funktioniert.

mfg olli
vertex.dreamfall.at | GitHub
 

lettorTrepuS

BeitragDi, Nov 09, 2004 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

walski

Ehemaliger Admin

BeitragDi, Nov 09, 2004 22:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Was genau meinst du mit Sätzen wie:

Zitat:

Macht aus Matrix m eine X-Rotationsmatrix mit dem Winkel a


Ich hatte leider keine Zeit mir das ganze in Ruhe anzugucken, also frag ich einfach mal ganz blöd:

Ist die zurückgegebene Matrix das Bild der Matrix m gedreht um die x-Ache mit dem Winkel a oder ist m die Abbildungsvorschrift, die altM um die x-Achse mit dem Winkel a dreht?

walski
buh!

Vertex

BeitragMi, Nov 10, 2004 1:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm ich erklähr dir das mal an einem Beispiel:
Du hast in Blitz ein Mesh mit CreateCube erstellt. Jetzt kannst du ihn mit PositionEntity verschieben, mit ScaleEntity skalieren und mit RotateEntity rotieren. Dabei verändern sich nicht die lokalen Vertexkoordinaten. Für die Szene müssen diesen jedoch transformiert werden. Was macht man also? Man legt 5 Matrizen mit CreateMatrix an. CreateMatrix erstellt eine Einheitsmatrix, das bedeutet, wenn man sie mit einem Vektor multipliziert, kommt der selbe Vektor wieder heraus (bei einer Zeromatrix wäre dies z. B. nicht der Fall). Jetzt hast du also 5 Einheitsmatrizen. Aus der ersten machst du eine Verschiebungsmatrix mit MatrixTranslate, aus der zweiten eine Skalierungsmatrix mit MatrixScale und aus den letzten drei, drei Rotationsmatrizen mit MatrixRotateX, Y, und Z. Um nun den Cube richtig zu transformieren, erstellst du noch eine Einheitsmatrix, die sogenannte Modelviewmatrix eine Einheitsmatrix die jetzt via MatrixMultiplyMatrix mit der Verschiebunsgmatrix, Skalierungsmatrix und den 3 Rotationsmatrizen multipliziert wird. Jetzt hast du eine Bearbeitungsvorschrift für alle Vertices innerhalb des Cubes erstellt, das erspart ca. 4/5 Rechenaufwand. Vertices besitzten eine X, Y, und Z Koordinate was ein Vektor ergibt, zusätzlich noch einen Normalvektor NX, NY und NZ. Der W Index entfällt hier bei diesem Beispiel. Multiplizierst du jetzt jeden Vertex(also einen Vektor) und jeden Normalvektor via VectorMultiplyMatrix mit der Modelviewmatrix erhälst du nun die richtig tranformierten Vertexkoordinaten und Normalvektoren. Erst wenn das mit jedem Mesh bzw. Vertex wiederholt wurden ist, kann man beginnen die Szene zu rendern. Dies geschieht auch wieder durch Multiplikation von Frustummatrizen(zum bestimmen des Clippingbereichs und des Field Of View der Kamera), Projektionsmatrizen(zum projektzieren der fertigen 3D Koordinaten auf den Bildschirm) etc.
mfg olli
vertex.dreamfall.at | GitHub
 

walski

Ehemaliger Admin

BeitragMi, Nov 10, 2004 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Man erhält also die Abbildungsviorschriften, nicht die fertigen Bilder?!

walski
buh!

Vertex

BeitragSa, Nov 13, 2004 1:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Jup die Abbildungsvorschrift. Mit einer Matrix lässt sich jede lineare Abbildungsvorschrift definieren.

so, ich habe mal die Formeln für eine einfache 3D Wireframeengine augestellt ohne ZBuffer(fällt aber bei Wireframe auch nicht großartig auf):

Modelspace

user posted image

PositionEntity(entity, tx, ty, tz)
RotateEntity(entity, a, a, a)
(wobei a zuerst pitch, dann yaw und dann roll Winkel ist)
ScaleEntity(entity, sx, sy, sz)


Cameraspace

user posted image

PositionEntity(camera, tx, ty, tz)
RotateEntity(camera, a, a, a)
(selbe wie bei Modelspace)


2d Projektion

user posted image

und

user posted image

x2d = projektzierte 2d x Koordinate
y2d = projektzierte 2d y Koordinate
x3d = X Koordinate des zu projektzierrenden 3d Punktes
y3d = Y Koordinate des zu projektzierrenden 3d Punktes
z3d = Z Koordinate des zu projektzierrenden 3d Punktes
fov = field of view - brennweite der kamera (1/tan(fov/2) kann durch CameraZoom ersetzt werden)
sw = screen width - Breite des Viewports
sh = screen height - Höhe des Viewports


Backfaceculling

user posted image

x1, y1 = 2d Koordinaten des ersten Eckpunktes im projektzierten Dreieck
x2, y2 = 2d Koordinaten des zweiten Eckpunktes im projektzierten Dreieck
x3, y3 = 2d Koordinaten des dritten Eckpunktes im projektzierten Dreieck
Wenn cull = TRUE dan findet Culling statt, andernfalls nicht.
vertex.dreamfall.at | GitHub
 

walski

Ehemaliger Admin

BeitragSa, Nov 13, 2004 1:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey,

vielen vielen Dank!
Auch wenn das momentan nicht in mein Beschäftigungsfeld fällt, bin ich mir beinahe 100% sicher, dass das nochmal sehr nützlich sein wird Wink

Die Verformungsmatritzen hät ich vielleicht noch so hinbekommen, aber die 2D-Projektion sieht mir auf den ersten Blick einfach zu kompliziert aus Smile

Vielen Dank und nen schönen Abend noch!

walski
buh!
 

lettorTrepuS

BeitragSa, Nov 13, 2004 1:36
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

eXceptION

BeitragSa, Nov 13, 2004 1:51
Antworten mit Zitat
Benutzer-Profile anzeigen
@vertex: darf ich mal fragen, welche ausbildung hast du? nur neugierig... Smile
Norweger...

Spreche aber verdammt gut 8086
 

OJay

BeitragSa, Nov 13, 2004 2:50
Antworten mit Zitat
Benutzer-Profile anzeigen
sowas lernt man mit sicherheit nicht in einer ausbildung...zumindest nicht in D Wink

studium oder selbststudium. und wenn das interesse da ist gehts sowieso alles 10mal leichter Wink

wenn vertex das sample fertig hat, werd ich mich auch mal an einem kleinen spielchen damit versuchen. prinzipiell sehr interessant das ganze! Smile

Vertex

BeitragSa, Nov 13, 2004 3:28
Antworten mit Zitat
Benutzer-Profile anzeigen
So, irgendwas ist noch bei MatrixMultiplyMatrix falsch, wenn ich das mit nem Vektor berechne, kommt bei y immer nur 0 raus.

Habe das ganze also mal umgestellt, das ich gleich die Modelviewmatrix als Viewmatrix benutze. Das kommt dabei heraus:
user posted image
(mein misslungener AudiTT Smile)
Wer meint, das hier Triangles fehlen, der irrt. Ist BackFaceCulling wie es auch von Direct3D benutzt wird. Diese Triangles werden ja praktisch auch nicht im Smoothedshading Szene gezeichnet. Wenn die Multiplikation hinhaut, gebe ich dann auch den Code, aber bis jetzt ist das sinnlos.

walski: Jup wie ST schon sagte, ist abgeleitet von x2d = x3d / z3d und y2 = y3d / z3d. Das kann man gut beobachten, wenn man z. B. mit nem Auto durch eine Landstraße fährt. Die Bäume an der Seite, die näher zum Betrachter sind, "bewegen" sich schneller, als die im Hintergrund. Dafür sorgt das / z3d. Je größer z3d ist, also je weiter der Baum vom Betrachter weg ist, desto kleiner wird x2d bzw. y2d.

x2d = (x3d * (sw/2)) / z3d + (sw/ 2)
bewirkt, dass die projektzierte Szene in Relation zum Viewport steht.

x2d = (x3d * (sw/2) * camerazoom) / z3d + (sw/2)
bewirkt, noch, das die ganze Szene um einen optischen Skalierungsfaktor vergrößert wird. Je größer dieser ist, desto größer wird die Szene, desto größer wird der betrachtete Ausschnitt, desto weniger siehst du von der Gesamtszene. Ist praktisch wie mit einem Fehrnglas.

x2d = (x3d * (sw/2) * (1/tan(fov/2))) / z3d + (sw/2)
Ist etwas schwer zu erklähren.
http://vertex.art-fx.org/Basic...e/Tand.htm
1/ steht für das Reziproge. tan(fov/2) den Öffnungswinkel vom Objekt der Kamera. / 2 bedeutet, das die berechnete Öffnung ja beidseitig gilt, es aber so gesehen nur mit einer Seite gerechnet wird(klingt blöd, ich weiss).

eXceptION:
techn. Assistent für Informatik. Wie OJay schon sagte, das lernt man da nicht. Ist mehr HTML grims krams, aber man hats zumindest leicht Smile

mfg olli
vertex.dreamfall.at | GitHub
 

lettorTrepuS

BeitragSa, Nov 13, 2004 7:33
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Mattis_the_brain

BeitragSa, Nov 13, 2004 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo cool sowas hab ich auch schon geschrieben blos nicht ganz so umfangreich , bei mir gab es sowas wie Rotation um alle drei Achsen, Verschiebung, Scalierung und Backfaceculling. Das was mir noch nicht ganz gelungen war war das Flatshaden^^

Vertex

BeitragSa, Nov 13, 2004 14:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Soooo....
Problem ist nun behoben, hatte die Zeilenvektoren mit den Spaltenvektoren falsch verrechnet.

http://vertex.art-fx.org/3D/3DEngine.zip 15 KB ist die funktionierende Engine.

Steuerung links, rechts, auf, ab für links, rechts, vorwärts, rückwerts und Taste C für Backfaceculling an oder aus.

mfg olli
vertex.dreamfall.at | GitHub
 

CodeMaster

BeitragSo, Nov 14, 2004 0:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr geil, Respekt!
Wollte früher auch immer mal sowas machen, aber mir fehlt's leider an Fachwissen... Daher hast du meine umso größere Bewunderung Smile
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.

Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102
 

Timo

BeitragDo, Nov 25, 2004 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
sieht wirklich gut aus!!

wie hast du das eigentlich gelernt? hast du irgendwo ein paar tutorials gefunden? ich wollte nämlich über dieses Thema eine Facharbeit schreiben, habe aber noch davon keinen blassen dunzt. Vor allem fällt mir die Sache mit der matrix schwer. Könntest du mir da irgendwie tipps, tuts,etc. empfehlen?

mfg Timo
 

David

BeitragDo, Nov 25, 2004 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Nett, jetzt musst du aus der Wireframeengine eine Engine mit Textureunterstützung machen! Wink

@Timo: Vektoren, Matrizen... Teilweise sind das echt Mathegrundlagen...

grüße
 

Timo

BeitragDo, Nov 25, 2004 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
mit Vektoren hab ich auch keine Probleme, eher mit der Schreibweise von Matrizen und der Rechnung mit ihnen. Mag sein das das zu Mathe gehört, aber ich kanns nicht. Allerdings möcht ichs lernen, ich brauche nur jemanden, der es mir erklärt bzw. mir sagt wo ich's lernen kann (tuts, etc.). Smile
Ich glaub nicht das wir Matrizen noch in der Schule dran nehmen. Kurvendisskussion scheint das einzigste zu sein...
 

David

BeitragDo, Nov 25, 2004 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Da gibts ja genug Infos... Zur Not frägst deinen Mathelehrer. Wink

http://www.gamedev.net/referen...cle877.asp
http://www.geocities.com/Silic...ath3d.html
http://www.makegames.com/3drotation/
http://kwon3d.com/theory/transform/transform.html
http://easyweb.easynet.co.uk/~...trices.htm
http://de.wikipedia.org/wiki/Matrix_(Mathematik)

etc...

grüße
 

Timo

BeitragDo, Nov 25, 2004 22:03
Antworten mit Zitat
Benutzer-Profile anzeigen
a big thx!! Very Happy

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group