PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einstieg in die 3d-Welt


huha
2003-08-13, 10:19:29
Hallo!

Ich habe da ein kleines Problem. Ich würde gerne ein wenig mit 3d-Programmierung anfangen und mir erstmal ein bisschen aneignen.
Leider benutze ich "nur" VB6, bekanntlich nciht die beste Programmiersprache, was Geschwindigkeit angeht. Das ist aber egal. Ich will ja kein superschnelles 3d-Spiel machen sondern nur Grundkenntnisse sammeln.
Mein zweites Problem besteht darin, daß ich absolut keine mathematischen Kenntnisse über Vektoren, Matritzen, Skalare oder sonstiges Zeug habe und mir das ehrlich gesagt auch noch viel zu komplex ist.
Und nun stehe ich vor dem Problem, mit VB gerne was 3dmäßiges machen zu wollen, keinerlei höhere Mathematik, die ja für ROtationen, Skalierungen und anderes Gedöns gebraucht wird, zu beherrschen und auch kein C zu können, zu dem man tonnenweise gutes Material findet.

Wer kann mir weiterhelfen?

-huha

Gast
2003-08-13, 10:22:54
afair hat nehe (http://nehe.gamedev.net) zu den meisten tutorials auch VB sourcecode :)

Gnafoo
2003-08-13, 20:58:42
Versuch trotzdem mal dich mit Matrizen und Vektoren auseinanderzusetzen. Wenn du das nicht machst, fehlt es dir an Verständnis und du wunderst dich auf einmal, was für komische Sachen beim Rotieren passieren können. :)

Tut mir leid, das sagen zu müssen, aber ich denke daran wirst du nicht vorbei kommen. Matrizen ne super Sache, wenn du sie einmal verstanden hast.

Ok es sieht am Anfang kompliziert aus, aber so schlimm ist es auch nicht. Ich habe auch keine Vorkenntnisse gehabt, als ich mit OGL & Co angefangen hab, aber ohne komme ich auch nicht aus.

Nur nicht gleich aufgeben und sagen: "das ist mir alles zu kompliziert".

cu DerTod

aths
2003-08-14, 07:46:31
Original geschrieben von huha
Und nun stehe ich vor dem Problem, mit VB gerne was 3dmäßiges machen zu wollen, keinerlei höhere Mathematik, die ja für ROtationen, Skalierungen und anderes Gedöns gebraucht wird, zu beherrschen und auch kein C zu können, zu dem man tonnenweise gutes Material findet.

Wer kann mir weiterhelfen? Dieses "Gedöns" ist ziemlich wichtig. Ohne Vektoren kommst du überhaupt nicht aus. Matrizen wiederum erleichtern das 3D-Rechnen ungemein.

huha
2003-08-14, 09:15:14
Nun gut, wenn ihr das schon wollt :D, wo krieg ich was _VERSTÄNDLICHES_ dazu her? Eine verständliche Einührung in die Vektoren und Matritzenrechnerei?
Und bitte was verständliches, was ich als 16 jähriger Schüler auch versteh...

-huha

Love-San
2003-08-14, 17:01:09
http://www.forum-3dcenter.org/vbulletin/showthread.php?threadid=84433

Gnafoo
2003-08-14, 22:45:31
Und bitte was verständliches, was ich als 16 jähriger Schüler auch versteh...

He trau dir doch ruhig was zu .. ich bin auch nur ein Jahr älter und kann alles, was ich für meine 3D-Progs wissen muss.

Nimm einfach Google zur Hand und fang an ein bisschen zu Probieren.

Bei OpenGL hilft das Redbook:
http://fly.cc.fer.hr/~unreal/theredbook/
bei Direct3D MSDN:
http://msdn.microsoft.com

cu DerTod

traexx
2003-08-15, 12:46:08
hat jemand was speziell zur Rotation der Kamera nicht um den Mittelpunkt des Koordinatensystems? hab zwar die NeHe Tuts, aber ich brauche es in verständlicher Sprache, wie ich damit umgehen muss XD

Gnafoo
2003-08-17, 13:27:26
Original geschrieben von traexx
hat jemand was speziell zur Rotation der Kamera nicht um den Mittelpunkt des Koordinatensystems? hab zwar die NeHe Tuts, aber ich brauche es in verständlicher Sprache, wie ich damit umgehen muss XD

Das hängt davon ab, in welcher Reihenfolge du die Matrizen anwendest. Wenn du ein Objekt erst verschiebst und dann rotierst, dreht es sich um den Mittelpunkt des Koordinatensystems. Wenn du erst rotierst (wenn das Objekt noch im Mittelpunkt des Koordinatensystems ist) und dann verschiebst, hast du das Objekt um seinen eigenen Mittelpunkt gedreht.
Bei der Kamera ist es ja so, dass du nicht die Kamera als solches verschiebst oder drehst, sondern alles in der Szene verschiebst und drehst. D.h. vor dem Rendern des nächsten Bildes musst du die Identity-Matrix wiederherstellen, dann die Szene drehen und dann die Szene verschieben. Wenn du OpenGL benutzt, würde ich dir für so Zeugs die Funktion gluLookAt empfehlen.


Siehe auch http://fly.cc.fer.hr/~unreal/theredbook/chapter03.html unter Viewing and Modeling Transformations. Da ist das ganz nett beschrieben.


cu DerTod

PS: hoffe ich hab grad keinen Mist erzählt:D

Gast
2003-08-17, 14:34:43
naja, die Frage ist, wie ich das Objekt drehen muss. Als ich es das letzte mal (lang her) ausprobiert hatte, und zuerst die Kamera rotierte und sie dann bewegte, ging die Bewegung von den lokalen Koordinaten der Kamera aus, sprich von dem gedrehten Koordinaten.

Anders gesagt:

Wenn ich die Kamera in Richtung X-Achse bewegen wollte und sie davor gedreht hatte, bewegte sie sich nicht mehr in Richtung X-Achse, sondern nach der gedrehten/lokalen X-Achse :(

Wie kann ich das vermeiden?

Gast
2003-08-17, 15:12:23
Immer von den Ausgangswerten ausgehen? ;)

zeckensack
2003-08-17, 15:18:14
Original geschrieben von Gast
naja, die Frage ist, wie ich das Objekt drehen muss. Als ich es das letzte mal (lang her) ausprobiert hatte, und zuerst die Kamera rotierte und sie dann bewegte, ging die Bewegung von den lokalen Koordinaten der Kamera aus, sprich von dem gedrehten Koordinaten.

Anders gesagt:

Wenn ich die Kamera in Richtung X-Achse bewegen wollte und sie davor gedreht hatte, bewegte sie sich nicht mehr in Richtung X-Achse, sondern nach der gedrehten/lokalen X-Achse :(

Wie kann ich das vermeiden? Erst verschieben, dann drehen :)

Gnafoo
2003-08-17, 17:09:31
Mein Tipp:
Nimm gluLookAt (wenn du OpenGL benutzt)

Pseudocode:
cVector Pos(5, 7, 8);
cVector Rot(0, 90, 0);

// Vektoren die gluLookAt für die
// Rotation braucht:
// (normal schaut die Kamera die
// negative z-Achse entlang)
cVector Center(0, 0, -1);
cVector Up(0, 1, 0);

// Rotation in eine Matrix packen
cMatrix Mat;
Mat=RotationMatix(Rot);

// auf die beiden Vektoren anwenden
Center*=Mat;
Up*=Mat;

// Vektor verschieben um den Punkt zu
// bekommen, der sich aus der Sicht der
// gedrehten Kamera genau 1 in Richtung
// negativer z-Achse befindet.
Center+=Pos;

// und an gluLookAt weitergeben
gluLookAt(Pos.x, Pos.y, Pos.z, Center.x, Center.y, Center.z, Up.x, Up.y, Up.z);


Verschiebt die Kamera an (5, 7, 8) und dreht sie um 90 Grad auf der Y-Achse.
Dabei sollte vorher die Identity-Matrix geladen sein und die Modelview-Matrix verändert werden.

Die Matrix und Vektorenklassen muss man dann halt noch programmieren, oder eben etwas umständlicheren Code schreiben.
Ist ja nur ein Beispiel wie so etwas gehen könnte.

Außerdem kann man das ganze auch mit Quaternions machen, was einem ein paar Probleme ersparen kann.


Hab ich noch dazu rausgesucht:
http://nehe.gamedev.net/data/articles/article.asp?article=08


cu DerTod

traexx
2003-08-18, 13:46:19
Original geschrieben von Zeckensack
Erst verschieben, dann drehen :)

sorry, hab vergessen mich beim letzten Mal einzuloggen XD

Wie sorge ich dann dafür, das sich die Kamera nicht einfach so um den Koordinatenursprung dreht, sondern um sich selbst?

@Der Tod: thnx ^^ werds mir durchschauen ^^