Ergebnis 1 bis 15 von 15

Thema: 3D Engine

  1. #1

    Users Awaiting Email Confirmation

    3D Engine

    Hallo Leutz,

    was macht eigentlich genau eine 3D Engine? Wenn ich den Wikipediaartikel richtig verstanden habe, ist sie doch quasi ein Übersetzer zwischen z.b. maya-objekten und open GL. Also als Beispiel übersetzt die Engine doch eine Maya-Figur in eine OpenGL-Figur, und kümmert sich um deren Anzeige im Spiel, richtig?

    Oder anders ausgedrückt ist eine Engine eine Art "Maya ohne Benutzereingabe" oder zumindest so ähnlich...

    Es dürfte doch eigentlich nicht schwer sein, eine extrem simple Engine zu programmieren, wenn man z.b. nur mal ein Polygonobjekt darstellen und eine Kollision oder einen primitiven Schattenwurf machen möchte!?

    Ich würde einfach gern meine Unfähigkeiten in Mathe und Programmierung nutzen und erweitern, ich will keine Spielengine oder ein Computerspiel entwickeln.
    Dazu brauch ich dann doch "nur" OpenGL lernen und eine 3D-Datei in OpenGL übersetzen und mit einigen Funktionen versehen, dass wäre dann eine extrem simple Engine, oder?

    Ist das eine Frage à la "Wie mache ich ein MMORPG" oder ist sowas umsetzbar?

    Gruß,
    Micha

  2. #2
    Sagen wirs mal so, fang lieber mit einer 2D Engine an, das ist in der Regel einfacher und man lernt die Grundlagen, was eine Engine so alles zu leisten hat.

  3. #3

    Users Awaiting Email Confirmation

    Klingt vernünftig, vor 2D bin ich eigentlich auch nur aus einem Grund zurückgeschreckt: Bei 3D Grafik benutze ich OpenGL, das ist klar; aber was benutze ich bei 2D Grafik?

    Quartz, CoreImage, Quicktime, Flash, SDL.....? Dazu sei erwähnt: Ich entwickle auf einem Mac und hauptsächlich für Mac, wenn mir die Engine gefällt, werd ich sie vielleicht auf Windows portieren (wollen). Reizen tut mich ja (trotz evtl. Portierung) Quartz, CoreImage und evtl. Quicktime, aber ist das überhaupt für sowas zu gebrauchen?

    *edit: Wobei... Flash/Actionscript wäre natürlich auch nicht übel. Das wäre dann Webfähig, oder? Könnte man mit Flash/Actionscript eine webfähige 2D Engine bauen? Mh, 2D ist so furchtbar vielfältig, könnt ihr da mal was empfehlen? Welche Technologie wäre denn am geeignesten, um das Erstellen einer Engine zu lernen?

    Geändert von Teelicht (10.07.2007 um 23:40 Uhr)

  4. #4
    Für 2D kannst du auch OpenGL verwenden. OpenGL ist zwar hauptsächlich für 3D Anwendungen gedacht, kann aber auch im Ortho-Modus mit 2D bestens umgehen.
    Das heißt, es ist eigentlich nie 2D, sondern wird mittels einer parallelperspektive auf eine Leinwand gemappt, anstatt in einem 3D-Raum. Aber für den Benutzer sieht es eben 2D aus. Außerdem bietet dir OpenGL mittels der dritten Ebene eine ganz simple Lösung um Grafiken in der richtigen Höhe anzuordnen. (Also weiter hinten stehende Objekte hinter vorne stehenden Objekten anzuordnen)
    Dies geht nämlich mittels der Z-Komponente, also der Tiefe im 3D-Raum, ohne großen Rechenaufwand. Und trotzdem sieht es nach wie vor 2D aus.

    Ich empfehle dir ein paar OpenGL Tutorials zu machen, die starten meist mit dem Grundgerüsst zum öffnen des Rendercontexts und dann einfache Objekte, Dreiecke, Quader etc. Wenn du das kannst, such nach einem Tutorial welches 2D erklärt, stichwort die glOrtho()-Funktion.

    Alternativ zu OpenGL kannst du auch Direct Draw aus dem DirectX Packet verwenden. Direct Draw ist extra für 2D Anwendungen, im gegensatz zu Direct 3D, welches für 3D gedacht ist (wer hätte das vermutet? ^^)
    Mit DirectX kenne ich mich aber garnicht aus, kann dir also nur zu OpenGL was sagen. Und es ist im 2D-Modus recht simpel, mit nem guten Monat einarbeitung konnte ich bereits erste erste Maps für ein Spiel darstellen, wo verschiedenen Texturen auf Quader gemappt wurden, und das bei über 700 Fps.

    (OpenGL ist also auch im 2D-Modus sehr flott - system ist Durchschnitt mit Athlon 64 3000+ und Radeon X800 XT)

    Um dir mal ein Beispiel für eine 2D Szene in OpenGL zu geben, hab ich hier ein Screenshot meiner Engine von damals:

    http://derfeind2k.de/daten/mapedit%209.0_soll.png

    Auf dem Bild sieht man noch meinen Karteneditor, der in C++ mit WinAPI geschrieben wurde. Rechts im Fenster wurden die Texturen eingeladen, in der Mitte ist der Kartenbereich, wo die Objekte platziert und dargestellt wurden. In der eigentlichen Engine ist der Renderbereich mit der Grafik natürlich Vollbild (bzw Fenstermodus aber ohne den Editorbereich) und verfügt über eine Steuerung der Spielfügur, Pixelgenaue Kollision, Animationen etc.
    (Und lass dich nicht von der schlechten Grafik abschrecken, die ist selbsterstellt, daher keine großartige Qualität. Es kann aber jede beliebige Grafik gängiger Formate wie BMP, TGA, TIFF, JPG etc dargestellt werden, auf Wunsch mit Alphatransparenz und allerlei Effekte-Spielereien).

    Die angesprochenen Dinge wie Flash sind dann natürlich dort geeignet, wo du es für Onlinegebrauch bereitstellen willst. Soll es eine Offline-Engine werden, die ein eigenständiges Programm ist, und nicht im Browser stattfindet, dann brauchst du dafür kein Flash.
    Und wenn du OpenGl verwendest bist du dahingegen auf der sicheren Seite, dass du jederzeit auf 3D umsteigen kannst, wenn du das willst.

    Geändert von Ynnus (11.07.2007 um 02:33 Uhr)

  5. #5
    hmm... wenn mich nicht alles täuscht, wurde die eigentliche Frage von oben noch nicht beantwortet oder?
    Zitat Zitat
    quasi ein Übersetzer zwischen z.b. maya-objekten und open GL
    da ich bisher nie spiele professionell gemacht habe, kann ich die frage aufgrund meine faulheit ( ) auch nicht beantworten...aber wenn sie hier zugeflogen kommen würde, würde ich das natürlich sehr begrüßen

    MfG
    Ricky

  6. #6

    Users Awaiting Email Confirmation

    Zitat Zitat von Ynnus Beitrag anzeigen
    Alternativ zu OpenGL kannst du auch Direct Draw aus dem DirectX Packet verwenden. Direct Draw ist extra für 2D Anwendungen, im gegensatz zu Direct 3D, welches für 3D gedacht ist (wer hätte das vermutet? ^^)
    stimmt nicht. Wenn ich auf einem Mac DirectX verwenden könnte, würde mich das jedenfalls wundern.

    Danke für deine Tipps! Ich glaube, OpenGL ist doch das richtige für mich!
    ich nehme mal an, das mit maya-figur->engine->opengl-figur hat gestimmt (wenn man natürlich noch effekte und funktionen dazunimmt)? Dann kanns ja losgehen... Ein Monat Einarbeitung klingt vielversprechend

  7. #7
    Naja, eine 3D-Engine tut schon mehr. Ein Maya-Objekt in den Speicher zu laden tut es nicht - du mußt es irgendwie anzeigen. Man kann zwar mit OpenGL schnell was schreiben, das einfach nur die Polygone anzeigt und bei Bedarf verdeckt etc., aber dann hat man eben das - untexturierte Polygone.

    Um hübschere Grafik zu kriegen brauchst du also Texturen. Die korrekt auf das Modell zu legen und zu rendern ist auch Aufgabe der Engine. Wenn du das hast hast du immerhin ein texturiertes Modell ohne jegliches Licht.

    Jetzt wird's spannend. Im einfachsten Fall läßt du die Figur einfach einen grob berechneten Schatten werfen und bist glücklich (sofern der Schatten nicht fuzzy sein soll, das ist kompliziert); wenn du ambitionierter bist beschäftigst du dich mit üblichen Lichtberechnungstechniken - oder, falls du auf Performance nichts gibst, mit Raytracing.

    Wenn du Kram wie Texturierung und grobe Beleuchtung hast bist du so langsam in dem Bereich, wo die Engine sich mit anderen messen kann. Natürlich gibt es noch dutzendweise Features, die man reintun könnte, aber mit Obigem kann man wohl schon mal recht zufrieden sein.


    Wenn du es ganz abgefahren willst kannst du natürlich auch eine voxelbasierte Engine bauen; das ist aber ziemlich anders als normales OpenGL. (Nicht, daß man den Kram nicht kombinieren könnte...)

    Geändert von Jesus_666 (11.07.2007 um 14:25 Uhr)

  8. #8
    Zitat Zitat von Jesus_666 Beitrag anzeigen
    oder, falls du auf Performance nichts gibst, mit Raytracing.
    Oder falls er das nette Spielzeug hat, das wir auf der CeBIT gesehen haben. Damit ist die Performance das kleinere Problem.

    Zitat Zitat von Jesus_666 Beitrag anzeigen
    Wenn du es ganz abgefahren willst kannst du natürlich auch eine voxelbasierte Engine bauen; das ist aber ziemlich anders als normales OpenGL. (Nicht, daß man den Kram nicht kombinieren könnte...)
    Das ist was, was ich unbedingt irgendwann probieren sollte. Halt ich für einen sehr interessanten Ansatz Dass das von der Performance her geht, sieht man ja an Spielen wie Command & Conquer: Red Alert 2 (Voxel für die Fahrzeuge) und Worms 3D (Voxel für das Gelände). Beide sind immerhin schon etwas älter und liefen damals schon flüssig.

    Geändert von DFYX (11.07.2007 um 14:31 Uhr)

  9. #9

    Users Awaiting Email Confirmation

    oO 163 Zeilen Code für einen simplen Würfel ohne Textur (also mit Standart-lambert-grau-textur) und ohne alles?
    Ich weiß nicht, vielleicht bleibe ich doch bei 2D... Warum sind solche Dateitypen immer so kompliziert?

    PS: Gemeint ist eine Maya-ASCII Datei

  10. #10
    Zitat Zitat von Schattentier Beitrag anzeigen
    oO 163 Zeilen Code für einen simplen Würfel ohne Textur (also mit Standart-lambert-grau-textur) und ohne alles?
    Ich weiß nicht, vielleicht bleibe ich doch bei 2D... Warum sind solche Dateitypen immer so kompliziert?

    PS: Gemeint ist eine Maya-ASCII Datei
    Also 163 Zeilen Code ist nicht viel wenn es darum geht, erstmal ein Fenster mit OpenGL Rendercontext zu öffnen. Danach benötigt es aber wesentlich weniger Zeilen, um Dinge darzustellen.
    Und für Modelle baust du dir sowieso eine Lade-Routine welche die Polygone ausließt und in OpenGL-Polygone neu aufbaut. Das geht dann mit einer Schleife und ein paar Zeilen. (Jedenfalls theoretisch, ob es praktisch so gut aussieht weiß ich nicht. Aber Vertices auslesen und per OpenGL setzen lassen ist nicht das Thema. Schwieriger könnte es werden, das Modell korrekt mit Texturen zu versehen)

    Bezüglich der Zeilenlänge - eine Textur auf ein Polygon zu bekommen ist eine Sache von ein paar Zeilen. (Eine Laderoutine für den Texturloader (kann man im Internet vorgefertigte Codeschnippsel finden), ein paar Zeilen zum Wandeln der Bitmap-Daten in OpenGL-verwendbare Texturen und schließlich beim Erstellen des Polygons noch eine zusätzliche Zeile pro Vertex, in welchem Verhältnis der Punkt zur Textur erscheint. (0 - 1 wäre dabei die komplette Textur dargestellt, 0 - 0,5 logischerweise die halbe ) )
    Aber das bekommst du alles Stückchenweise mit, wenn du die Tutorials durcharbeitest. Wie gesagt, einen guten Monat hat es mich wohl gekostet bis ich anständig Grafiken mit OpenGL darstellen konnte.

  11. #11
    Zitat Zitat von Schattentier Beitrag anzeigen
    oO 163 Zeilen Code für einen simplen Würfel ohne Textur (also mit Standart-lambert-grau-textur) und ohne alles?
    Vor langen Quelltexten darf man sich bei 3D Programmen nicht fürchten. Die Länge ist auch gar nicht so schlimm, wenn man die Intensität bedenkt. Wenn man eine Spiele Engine schreibt, muss man sich mit den unterschiedlichsten Themen und Funktionen auseinandersetzen. Das heißt, man arbeitet mit viel mehr unvertrauten Funktionen/Komponenten als beispielsweise bei normaler Anwendungsentwicklung. 100 Zeilen in einer guten Spiele Engine lassen sich nicht einfach so herunterschreiben. Und falls doch, sind sie vermutlich nicht sonderlich gut. Fertige Quelltexte aus dem Netz sind auch nur gut, wenn man überhaupt etwas zum Laufen bringen will (dafür braucht man am Anfang fertige Beispiele). Sobald man etwas Großes und Eigenes schreibt, muss man viele Teile neu schreiben.

    freundliche Grüße, Rolus

  12. #12

    Users Awaiting Email Confirmation

    Zitat Zitat von Rolus Beitrag anzeigen
    100 Zeilen in einer guten Spiele Engine lassen sich nicht einfach so herunterschreiben. Und falls doch, sind sie vermutlich nicht sonderlich gut. Fertige Quelltexte aus dem Netz sind auch nur gut, wenn man überhaupt etwas zum Laufen bringen will
    Die 163 Zeilen bezogen sich nicht auf eine Grafik Engine aus dem Netz, sondern auf eine normale Maya ASCII Datei von Alias|Wavefront Maya 7, in der ich nur einen Würfel ohne Textur (sprich: mit der Standart-Lambert-Grau-Textur) angezeigt habe. Es ist also nur die Maya Datei, durch die ich mich mit meinem Programm durcharbeiten muss..

  13. #13
    Naja, eine Datei aus einem speziellen Format zu laden, ist grundsätzlich bei den meisten Formaten ein ziemlicher Aufwand, auch ohne die Anzeige. Die ist danach verhältnismäßig einfach.

    Eine Engine ist ja auch mehr als "Lade eine Datei und zeige sie an". Das wäre ein simpler Modelviewer. Letztendlich ist das nur ein sehr kleiner Teil und viele Engines kennen verschiedene Methoden, um Objekte zu laden oder sogar zur Laufzeit zu generieren. Worauf es ankommt, ist eher, dass verschiedene Objekte richtig platziert, animiert, ausgeleuchtet und mit Effekten versehen werden.

  14. #14
    Zitat Zitat von Schattentier Beitrag anzeigen
    Die 163 Zeilen bezogen sich nicht auf eine Grafik Engine aus dem Netz, sondern auf eine normale Maya ASCII Datei von Alias|Wavefront Maya 7, in der ich nur einen Würfel ohne Textur (sprich: mit der Standart-Lambert-Grau-Textur) angezeigt habe. Es ist also nur die Maya Datei, durch die ich mich mit meinem Programm durcharbeiten muss..
    Dann musst du dich in dem Fall über das MAYA-Dateiformat beschweren.
    Aber mal ehrlich, Maya ist für professionell Anwendungen gedacht. Das heißt, die Möglichkeiten sind riesig, es können massenhaft Dinge verändert, animiert, mit Texturen und optionen verändert werden etc. Und jetzt bedenke, jede Änderung muss irgendwo gespeichert und dokumentiert werden. Jedes Material, jeder Vertex, die Normalen, eventuelle Animationsstufen, eventuelle Subsurfaces und deren Unterteilungsgrad, Lichtquellen, Partikel etc, alles muss irgendwo gespeichert werden. Dazu sind unzählige Variablen nötig.
    Dass du da auf 163 Zeilen kommst, ist noch nichtmal viel, würde ich sagen.

    Anders sähe es aus, wenn du einfach schlicht die Koordinaten der Vertices speichern würdest, und diese in OpenGL ausließt und zu einem Polygon zusammensetzt. Das ist dann eine Zeile pro Polygon = 6 Zeilen für den Würfel.
    Wenn du aber Wert auf eine Maya-Datei legst, dann enthält diese vermutlich noch etliche der oben genannten Inhalte, die alle irgendwo festgehalten und gespeichert sind. Da bläht sich dieses ganze Format natürlich auf.

    Ich habe übrigens gerade testweise eine Cinema 4D Datei meines Audi R8 ins 3DS-Format gebracht und bin auf stolze 80 MB gekommen. Soll heißen, das sind gut einige tausend - hunderttausend Zeilen.
    Wenn du also die Ansprüche hegst, in deiner Engine komplette Maya-Objekte laden und anzeigen zu können, hat deine Lade-Prozedur einiges zu leisten und du einiges zu schreiben. Von daher würde ich für den Anfang einfach die Anforderungen niedriger setzen.

  15. #15

    Users Awaiting Email Confirmation

    ok =) stimmt, wo du recht hast, hast du recht... ich werde erst mal kleiner anfangen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •