ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 22 Apr 2011, 05:28 
Offline
Meister
Benutzeravatar

Registriert: 18 Mai 2005, 22:16
Beiträge: 219
Wohnort: Bochum
Hallo Leute,

ich fange gerade an mich mit Matrizen und Vektoren auseinanderzusetzen.

Hierzu verwende ich die Library "matrix" (require "matrix"). Wie daraus eine Grafik wird das soll momentan gar nicht das Problem sein.

Was ein Vektor ist, ist ja ganz einfach. Wie man eine Matrix notiert (in der Realität und in Ruby) und damit rechnet ist auch ganz einfach.

Jetzt frage ich mich, "wie kann ich hieraus Daten gewinnen, die man für eine 3D Welt, sagen wir eine Landschaft, gebrauchen kann?".

Ich weiß dass man eine Matrix zur Umrechnung der Daten für die tatsächliche Landschaft braucht und eine für den Viewport.

Aber so ganz genau ist mir nicht geheuer, was man mit den Matrizen macht. Und ich finde auch leider kein Tutorial, dass den Umgang mit Vektoren und Matrizen im Sinne der Generierung einer 3D Welt genau erklärt. Man findet zwar Codeschnipsel, dann meist aber einfach nur irgendwelchen unkommentierten Code für Leute die CopyPasta mögen. Ich will es hingegen genau verstehen um es auf meine eigene Art reproduzieren zu können.

(Momentan überlege ich aus den Daten die ich mit dem "matrix"-Pack erzeuge und mittels SDL ein Pseudo-3D zu entwickeln, das letztlich ganz normal 3D wirkt... ein paar alte Tricks aus den Klick'n'Play/Multimedia Fusion Zeiten --- ob das aber jetzt wirklich mein Realisationsweg wird soll dahingestellt werden, ernst zu nehmen sei erstmal, dass man anhand der Bibliothek "matrix" Daten für eine 3D-Welt aufbereitet.)

Ich bin mir sicher in jedem Programmierforum gibt es zu Hauf Leute, die sich bestens mit Vektoren und Matrizen auskennen, auch wenn es für Ruby Entwickler in der Regel wohl seltener Notwendig ist damit zu arbeiten, so kennt sich wohl jeder Mathematiker/Informatiker aus. Ich bin momentan nur Hobbyentwickler und würde liebend gern direkt loslegen professionell mit Vektoren und Matrizen zu arbeiten.

Vielen Dank im Voraus,
~~signed~~ :)
Joern Akkermann.


Nach oben
 Profil  
 
BeitragVerfasst: 22 Apr 2011, 13:57 
Offline
Interpreter
Benutzeravatar

Registriert: 21 Mai 2007, 11:30
Beiträge: 1283
Wohnort: Thüringen
Ein 3-Dimensionaler Vektor repräsentiert auch gleichzeitig einen Punkt in einem dreidimensionalen Koordinatensystem. Eine Matrix hat mit Koordinaten oder Landschaften erstmal nichts zu tun (wobei das immer eine Frage der Interpretation ist, du kannst z.B. eine Matrix auch einfach als Array aus Vektoren darstellen. Dann wird aus einer Matrix plötzlich eine Punktwolke). Der Trick ist, dass wenn du eine Matrix mit n Zeilen mit einem n-dimensionalen Vektor multiplizierst, bekommst du wieder einen n-dimensionalen Vektor heraus. Entsprechend kannst du Matrizen als Funktionen verwenden, die Vektoren irgendwie manipulieren. Insbesondere gibt es da eben die Linearen Abbildungen wie z.B. Rotationsmatrizen (die Vektoren um die 0-Koordinate rotieren lassen), Skalierungsmatrizen (die Abstände zwischen den Vektoren wird größer oder kleiner), Translationsmatrizen (bewegen Vektoren im Raum) und etliche mehr. Wenn du also z.B. ein Bild hast und du willst das Bild um 120° drehen, dann stellst du alle Pixel des Bildes als Vektoren dar und multiplizierst eine entsprechende Rotationsmatrix (kannste bei Wikipedia anschauen, wie die aussieht) mit den Vektoren. Dadurch erhälst du die Pixel-Koordinaten für das rotierte Bild.

In openGL ist es hingegen nicht so, dass du die gezeichneten Bilder irgendwie manipulierst. Dort manipulierst du stattdessen dein Koordinatensystem. Du definierst dir erstmal ein Koordinatensystem und hast z.B. eine Funktion, die in dieses Koordinatensystem irgendeine geometrische Figur reinzeichnet (die geometrische Figur definierst du als Ansammlung von geometrischen Primitiven, z.B. Dreiecken. Diese wiederum definierst du über Vektoren. Ein Dreieck besteht, logischerweise, aus Vektoren). Willst du diese geometrische Figur nun aber umgedreht zeichnen, so drehst du nicht etwa die Figur um (viel zu umständlich), sondern einfach dein Koordinatensystem. Bildlich könnte man sagen: Wenn du auf ein Blatt Papier einen Buchstaben verkehrt herum zeichnen willst, kannst du das viel einfacher machen, in dem du erst das Blatt Papier umdrehst, den Buchstaben normal darauf zeichnest, und danach das Blatt wieder zurückdrehst.

Ich bin selbst nicht sonderlich gut in Algebra (hab das Fach gehasst ^^), aber Algebra ist auch ein extrem breit gefächertes Themengebiet. Ein Vektor ist eben nicht ein Punkt im Koordinatensystem, er kann nur als solcher interpretiert werden. Bei Matrizen ist es genauso. Je nach dem wen du fragst was eine Matrix ist, wird er dir eine andere Antwort geben. Ich finde auch es macht wenig Sinn sich für openGL/Direct3D in eine Mathebuch über Matrizen einzulesen. Dort wirst du zwar erfahren das es unendlichdimensionale Matrizen gibt und ein Vektorraum nicht aus Zahlen, sondern auch aus Funktionen oder irgendeinem anderen kranken Scheiß bestehen kann - aber das wird dir für openGL/Direct3D nicht viel weiterhelfen X_x Dort reicht es imo, wenn du weißt was eine Matrix ist, wie man damit rechnet, und dass man sie geometrisch interpretieren kann.


Nach oben
 Profil  
 
BeitragVerfasst: 22 Apr 2011, 16:34 
Offline
Interpreter
Benutzeravatar

Registriert: 03 Jul 2006, 14:53
Beiträge: 4872
Wohnort: RLP
Kai hat geschrieben:
Ich bin selbst nicht sonderlich gut in Algebra (hab das Fach gehasst ^^), aber Algebra ist auch ein extrem breit gefächertes Themengebiet. Ein Vektor ist eben nicht ein Punkt im Koordinatensystem, er kann nur als solcher interpretiert werden. Bei Matrizen ist es genauso. Je nach dem wen du fragst was eine Matrix ist, wird er dir eine andere Antwort geben. Ich finde auch es macht wenig Sinn sich für openGL/Direct3D in eine Mathebuch über Matrizen einzulesen. Dort wirst du zwar erfahren das es unendlichdimensionale Matrizen gibt und ein Vektorraum nicht aus Zahlen, sondern auch aus Funktionen oder irgendeinem anderen kranken Scheiß bestehen kann - aber das wird dir für openGL/Direct3D nicht viel weiterhelfen X_x Dort reicht es imo, wenn du weißt was eine Matrix ist, wie man damit rechnet, und dass man sie geometrisch interpretieren kann.


Sicher? Mit sind in einer Vorlesung über OpenGL fast alle wichtigen Matrizenformen über den Weg gelaufen. Und die "Grundrechenarten" wie Matrixmultiplikation ist ungemein wichtig, wenn man beginnt, mit Bildtransformationen zu arbeiten. Sicher ist ein allgemeines Algebrabuch das falsche, aber jedes Buch über Computergrafik geht da seehr genau drauf ein.


Nach oben
 Profil  
 
BeitragVerfasst: 22 Apr 2011, 22:53 
Offline
Meister
Benutzeravatar

Registriert: 18 Mai 2005, 22:16
Beiträge: 219
Wohnort: Bochum
vielen Dank, das macht EINIGES klarer


Nach oben
 Profil  
 
BeitragVerfasst: 23 Apr 2011, 21:43 
Offline
Meister
Benutzeravatar

Registriert: 18 Mai 2005, 22:16
Beiträge: 219
Wohnort: Bochum
phew... was ich gerade gezaubert habe, mit Raycasting, ist leider so unfassbar performant (vorsicht Ironie) dass es einen Frame pro 30s schafft :D

Daher springe ich jetzt um zu OpenGL mittles Ruby-OpenGL. Dank des Nehe Tutorials, das in Ruby übersetzt wurde und dessen Code ich in eine Klasse gekapselt habe, kann ich jetzt damit Dreiecke zeichnen... Quads und Linien wären auch kein Problem, das ist ja alles ganz einfach.

Weiß jemand weiterführende Tutorials zu Ruby-OpenGL? Ich habe noch nicht herausgefunden wie man die 3D Objekte mit Texturen überzieht.

Auch interessant: Railgun Ruby und Ogre.rb... wird wohl beides leider nicht mehr weitergeführt.


Nach oben
 Profil  
 
BeitragVerfasst: 24 Apr 2011, 09:45 
Offline
Interpreter
Benutzeravatar

Registriert: 03 Jul 2006, 14:53
Beiträge: 4872
Wohnort: RLP
genshu hat geschrieben:
Weiß jemand weiterführende Tutorials zu Ruby-OpenGL? Ich habe noch nicht herausgefunden wie man die 3D Objekte mit Texturen überzieht.


Das Repository von Ruby-OpenGL enthält eine ganze Menge Beispiele, unter anderem viele aus dem "RedBook":
https://github.com/brixen/ruby-opengl/tree/master/examples

Ansonsten verhält sich Ruby-OpenGL eigentlich wie jede OpenGL-Implementierung, bis hin zu den Namen. Daher solltest du eine ganze Menge Tutorials aus anderen Programmiersprachen einfach anpassen können.

Gruß,
Skade


Nach oben
 Profil  
 
BeitragVerfasst: 24 Apr 2011, 22:39 
Offline
Meister
Benutzeravatar

Registriert: 18 Mai 2005, 22:16
Beiträge: 219
Wohnort: Bochum
Vielen Dank, das hilft mir weiter!


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: