Opengl

Liebe/-r Experte/-in,
ich möchte ein kleines 3d-OpenGL Spiel entwickeln
(mit dem Qt Framework), in dem ein Raumschiff herumfliegt.

Hierzu habe ich ein paar OpenGL-Demos/Beispiele angeschaut.
Hierbei ist es mir aufgefallen, dass in den Demos OpenGL nur dazu verwendet wird, im Code aufgebaute ‚einfache‘ Objekte (Ball, Quadrat, Kegel o.ä.) zu drehen oder verformen (evtl. haben die Quadrate BMP-Bilder an den Seiten).

Ich habe kein Beispiel gesehen, das es versucht hätte, Ressourcen (bmp-/svg-Bild mit 3D-Informationen???) einzulesen und dieses im 3D-Raum darzustellen und zu drehen.

Beispiel, das ich gerne umsetzen würde:
ein kompliziertes 3d-Bild-Objekt (z.B. ein TIE-Fighter-Raumschiff) im 3-dimensionalen Raum drehen/skalieren.
Wenn sich das Raumschiff dreht, möchte ich dieses von der Seite sehen…

Deshalb meine Frage:

Gibt es ein 3d-Bild- oder ein anderes Ressourcenformat, das ich verwenden könnte,
um in meinem kleinen Spiel Objekte (zB Raumschiffe) im 3d-Raum darzustellen?

Gibt es nur die Möglichkeit, OpenGL-Objekte mittels

glEnableClientState(GL_VERTEX_ARRAY);
GLfloat afVertices[] = {f2vt(-0.5),/*lot of coordinates!!!*/}
glVertexPointer(3,GL_FLOAT,0,afVertices);
glTexCoordPointer(…);
glNormalPointer(…);
glDrawArrays(GL_TRIANGLES, 0, iLotOf);

im Code aufzubauen? Rechnen die Entwickler die afVertices-Arrays händisch aus?

Für einen Hinweis wäre ich dankbar:
Ilona

Das kann man bei einfachen Objekte oder zu Testzwecken machen. „Richtige“ 3D-Objekte werden in der Regel aus Dateien eingelesen die in einem 3D-Format wie OBJ oder 3DS vorliegen. Die Vertex/Index/Normalen-Daten werden dann für die Darstellung in OpenGL verwendet.
Schau mal hier nach: http://www.lighthouse3d.com/opengl/tutorials.shtml?s…
Lighthouse3D ist eh eine ganz gute Seite für den Einstieg in OpenGL/GLSL.

Viel Erfolg.

Hallo Ilona,

wie wärs denn mit dem bekannten MD2-Format aus Quake? Es gibt dazu ein gutes Tutorial und Google liefert ausreichend freie Modelle:
http://tfc.duke.free.fr/old/models/md2.htm

Gruß David

Liebe Ilona,

ich selbst fand die Tutorials auf der Seite http://nehe.gamedev.net/ immer sehr hilreich.
(deutsch: http://www.joachimrohde.com/cms/xoops/modules/articl…)

Dort gibt es auch ein Tutorial zum laden von Milkshape modellen: http://nehe.gamedev.net/data/lessons/lesson.asp?less…

Ganz generell:
Die Entwickler rechnen die Koordinaten natürlich nicht von hand aus. Es gibt viele 3D Modellier-Programme, die 3D-Modelle speichern können.
Diese 3D-Modelle werden mittels einer Import-Klasse in deine Anwendung geladen. Der Import sorgt dafür, dass die Koordinaten an der richtigen Stelle sind und dass die Texturkoordinaten stimmen.

Hallo Ilona,

also ich kenne es auch nur so, dass man Primitive mit Opengl erstellt und diese bei Bedarf mit Grafiken bespannen. Mehr als mit Primitiven hab ich bisher auch nicht gemacht. Im Zweifel müßte man ein komplexes Objekt tatsächlich aus Primitven konstruieren.

Gruß Arne

Hallo Ilona,

natürlich bietet auch OpenGL die Möglichkeit referenzierte Dreiecks- oder Polygon-Listen zu verwenden.
Ein Objekt besteht dann aus einer Liste von Polygonen. Die Polygone bestehen wiederum aus einer Liste von Raumpunkten. Diese Konzept ist in der Verwendung von 3D-Geometrien im Rahmen der Programmierung weit verbreitet und wird von den Grafikkarten und Treibern sehr gut unterstützt.
Unter http://www.opengl.org/resources/code/samples/glut_ex…
sind auch Beispiele zu finden, die das recht gut zeigen.
Für deine ersten Schritte kann ich dir empfehlen im Netz nach einem 3DS- oder VRML-Loader zu suchen. So kannst du direkt .3ds oder .vrm Objekte laden und verwenden. Einen 3DS-Loader gibt es sicher, den hab ich sogar selbst schon verwendet. Für VRML bin ich mir auch sicher, dass es einen solchen gibt.

Gruß
Kai

Hallo Ilona,

ich habe bisher in begrentem Umfang mit OpenGL gearbeitet. Zu der Verwendung von SVG habe ich einen Thread gefunden http://stackoverflow.com/questions/1027179/displayin…
vielleicht hilft es dir.
Im Laufe meines Studiums musste ich ein Computergrafikpraktikum absolvieren in dem unter anderem auch mit OpenGL ein kleines „Spiel“ erstellt wurde, in dem ein in einem 3D Modellierprogramm (Maya) erstelltes Schiff aus einem bestimmten Format geladen wurde. Wir mussten damals einen kleinen Importer schreiben um dieses 3D Modell zu verwenden. Das verwendete Exportformat verwendet war „obj“. Die Datenorganisation sah ungefähr folgendermaßen aus:
g default
v -0.230066 0.997541 -1.866997
v -0.200374 0.997541 -1.961249
v -0.170683 0.997541 -2.055501
v -0.140992 0.997541 -2.149753
v -0.111300 0.997541 -2.244005
v -0.081609 0.997541 -2.338256

g polySurface7
f 32 33 508
f 33 34 508
f 34 35 508

Es wurden also zuerst die Vertices angegeben und danach die polygone(triangle) durch die angabe aus welchen drei vertices diese bestehen. Der importer musste damit umgehen können. Ist aber alles etwas aufwendig und wie die Texturierung durchgeführt wurde weiss ich leider nicht mehr.

Warum wir dieses selbst schreiben mussten kann ich leider nicht sagen, evtl. war das Verwenden zusätzlicher libs nicht erlaubt…

Ich hoffe das es dir etwas nützt. Wenn OpenGL und QT nicht pflicht sind könnte man auch eine freie Render Engine wie OGRE nehmen, da es dort Werkzeuge und Klassen zum Importieren von Meshes(3D Modellen) aus diversen Modellierprogrammen gibt. Ist aber auch nicht so einfach zu verwenden bzw. müsste man sich da einarbeiten.

viele grüße
rudolf

hi illona,

na was ganz einfaches hast du dir zum
einstieg ja nicht ausgesucht, aber wenn
du geometrien laden und animieren willst,
schau dir mal lib3ds an - kann 3ds modelle
laden und via opengl darstellen.
Hier gibt es ein tutorial. Viel spass!
http://www.donkerdump.nl/node/207

Gruss
Hendrik

ps. 3ds modelle kannst du mit blender
erstellen.

Es gibt meines Wissens nach keine Bilder die 3Dimensional sind. Was man allerdings verwenden kann sind 3D Modelle. Diese enthalten dann die Informationen bezüglich der Vertices, Normalen, Texturen etc. und man muss diese „nur“ noch Laden und darstellen. Formate sind z.B. das etwas veraltete „3DS“.

Ich kann diesbezüglich das Forum von Delphigl.com empfehlen. Dort sind auch einige Linuxentwickler und sicherlich findet man da auch Leute mit qt Erfahrung. Da es aber um prinzipielle Fragen vorerst geht, ist dort garantiert jemand da der helfen kann.