Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
Dies ist keine Frage, sondern eine Antwort auf eine Frage, die noch nicht gestellt wurde, aber evtl. für den ein oder anderen nützlich sein könnte.
Hab mich nähmlich de letzten Tage mal mit den Perspektiven in Ogl beschäftigt und bin auf die Idee gekommen eine axiometrische Perspektive zu
schreiben. Genau genommen handelt es sich um eine militärperspektive bei der man die Neigung der Fläche durch eine variable angeben kann.
hier die funktion, die man einfach anstelle von gluperspective aufrufen muss:
zunächst hab ich einen 4d-vector und eine 4x4matrix definiert (den code kennt man aus dem wiki) und mit der procedure iso(); setzt man dann die perspektive,
n und f stehen hierbei wie erwartet für die near- und far-clipping-plane. h und w sind für Höhe und Breite der Ogl-Fläche und a ist dann die Steigung, wobei werte von 0.25-0.75 die vernünftigsten Ergebnisse erzielen.
die Achsen werden wie folgt auf dem Bildschrim abgebildet:
X läuft von links oben nach rechts unten, Y von unten nach oben und Z von rechts oben nach links unten. Tiefentest ist inklusive.
falls jemand noch einige Mängel findet, darf er sie gerne kund tun.
Für diejenigen, die sowas für 3d-Diagramme brauchen, kann ich auch noch eine Kavalierprojektion reinstellen, die man aus Mathebüchern kennen sollte.
in dem Sinne viel Spaß damit!
EDIT: man muss daran denken, dass die Einheiten auf dem Bildschirm in Pixel sind, das heißt, dass man höchstwahrscheinlich mit scalef(); arbeiten muss um auch auf vernünftige
Darstellungen zu kommen. scalef(32,32,32); sollte schon reichen, ein Block der weltgröße 1,1,1 ist dann etwa 32,32,32 pixel groß.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Hast du zufällig lust, das ins Wiki zu übertragen? Das wäre doch eine wunderbare "Siehe auch"-Ergänzung zu gluPerspective als Artikel Isometrische Projektion.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
lust schon, wenn ich wüsst wie man das anstellt. Hab ja noch nie was ins wiki eingetragen und möcht da auch nicht etwas unausgereiftes reinstellen, deshalb erstma abwarten, obs verbesserungsvorschläge etc. gibt, damit dann definitiv was handfestes drin steht.
Ich geh mal davon aus, dass die meisten von euch schon Projekte auf die beine gestellt haben wo man mehr als nur ein paar klötze sehen kann, deshalb wäre ich froh,
wenn einige evtl. sich die paar minuten zeit nehmen würden, um das bei sich auch einmal auszuprobieren um zu schauen ob die Projektion tatsählich fehlerfrei ist.
Wie gesagt, man muss ja bloß den Projektionsmodus austauschen und die Datentypen mit hinein nehmen , so wie die Funktion für die vektoren.
Wenn das dann soweit in Ordnung ist geb ichs gern ins Wiki.
Registriert: Sa Aug 18, 2007 18:47 Beiträge: 694 Wohnort: Köln
Programmiersprache: Java
Wenn man die Berechnung zusammenführt und nur einmal macht, sollte das wahrscheinlich schneller sein:
Ausserdem kann man das glLoadIdentity weglassen, da eh die Matrix per glLoadMatrix neu gesetzt wird.
Man könnte auch noch die to_Vec4 Funktion optimieren, indem man sie in eine Prozedure umwandelt und die Matrix als Referenz mitgibt. Oder die Matrix direkt als array[0..15] of single ansprechen, ohne den Umweg über eine Funktion.
_________________ Es werde Licht. glEnable(GL_LIGHTING); Und es ward Licht.
Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.