Frage

Ich mache eine Renderer OpenGL. Ich habe texturierte Modelle in Blender / Sketchup (Ich kann zwischen den beiden leicht austauschen), und ich möchte in der Lage sein, diese Dateien in meine Renderer zu exportieren. Meine ursprüngliche Idee war, einfach die rohen Gesichter zu exportieren und diese Dreiecke machen, aber ich möchte einfach meine Textur-Dateien schneiden in Textur und koordiniert.

Damit meine ich, dass mein Modell Gesichter bekommen in Dreiecke geschnitten. Sie können sehen, in dieses Bild (reproduziert unten), dass meine Kurve 24 Dreiecken wird. Ich möchte wissen, welche Texturkoordinaten für jedes Dreieck zu verwenden.

polygonisiert gekrümmtes 3D-Objekt

Würde eine DAE-Datei der einfachste Weg, das zu tun? Ich habe für das Format die Angaben zu lesen und es sieht einfach genug. Ich glaube, ich könnte die XML analysieren und getreulich die Modelle in OpenGL neu erstellen. Ich frage mich, ob es ein einfacher Weg ist (das heißt eines, das nicht das Rad nicht neu erfinden).

War es hilfreich?

Lösung

Wenn Sie beim Parsen der .dae-Format vertraut sind, verwenden Sie es sicher. Allerdings, wenn Sie nur daran interessiert sind, beim Export von strukturierten Dreiecksnetzen halte ich würde mit dem OBJ-Format , die ist viel einfacher zu analysieren. Von dem, was ich sowohl Sketchup und Blender sagen kann, kann dieses Format exportieren.

Andere Tipps

Wenn Binärformaten Sie nicht erschrecken, ich würde vorschlagen, ein Blender & Sketchup Plug-in schriftlicher Form und die Geometrie vorgebacken in gepackte Vertex Arrays exportieren.

Die schöne an dieser Methode ist, dass es in Ihrer Anwendung keine Parsing oder Typumwandlung ist. Alles ist bereit, auf die GPU in einfachen zusammenhängenden Speicher kopiert werden gesendet. Groß für statische Geometrie.

Eine abgespeckte Mixer Exporteur sieht ungefähr wie folgt aus:


#!BPY
import bpy, struct
from Blender import *

self.fh = open("MyFileName", "w")
m = bpy.data.meshes["MyMeshName"]
faces = m.faces
for face in faces:
    for (vertex, uv) in zip(face.verts, face.uv):
        self.fh.write(struct.pack('<fff', *vertex.co)) # coords
        self.fh.write(struct.pack('<fff', *vertex.no)) # normals
        self.fh.write(struct.pack('<ff',  uv.x, uv.y)) # uvs

self.fh.close()

Wenn Sie .dae Dateien zu analysieren, würde ich schauen vorschlagen Collada Parser. .dae ist eigentlich die Erweiterung für Collada-Dateien, die neueste Aufwand aus der Khronos-Gruppe (Maintainer von OpenGL) zu haben, ein einziges einheitliches Dateiformat für 3D-Datenaustausch.

Wie bei den bestehenden Parser, hier ist das, was ich bin gekommen, über:

  • collada-dom , die Referenzimplementierung. Wie der Name schon sagt, es ist nur eine Abstraktion von der XML-Struktur.
  • FCollada , ein schöner Abstraktion. Allerdings hat dieses Projekt schon seit fast zwei Jahren tot, und das, was ich gesammelt habe, ist es unwahrscheinlich, dass wir keine Aktualisierung in Zukunft sehen werden.
  • OpenCollada eine kürzlich neue Anstrengung. Habe es nicht ausprobiert, aber es ist eine aktive Community dahinter.

Dass gesagt wird, wenn Ihr einziges Ziel ist ein einfaches Stück Geometrie mit den Eckpunkten, Normalen und Texturkoordinaten Laden, mit dem .obj Dateiformat gehen könnte ein schnellerer Weg sein.

Jede anständige Dateiformat durch die Modellierung Programme (wie Blender oder Sketchup) gehören alle Informationen, die die Geometrie neu erstellen Sie sehen. Dies sollte den Geometrietyp (zum Beispiel Dreiecksstreifen, einzelne Dreiecken, usw.), die Scheitelpunkte und Normalen für die Geometrie enthält, die Materialeigenschaften verwendet werden, und auch die zusammen mit den entsprechenden Texturkoordinaten verwendet Texturen. Wenn etwas von einem möglichen Dateiformat fehlt, wählen Sie eine andere.

Wenn Sie denken, dass das Parsen von XML einfach ist, dann hoffe ich, Sie planen, auf die bestehenden Bibliotheken, dies zu tun, wie expat, Xerces oder eine andere Sprache spezifische Implementierung.

Beim Import / Export unter Berücksichtigung, versuchen Sie zunächst eine Open-Source-Bibliothek zu finden, die den Import für Sie behandeln können und die Daten zu Ihrem Programm in einem angemessenen Format zur Verfügung stellen. Wenn das nicht verfügbar ist, und Sie müssen Ihre eigenen Importeur schreiben, dann versuchen, eine einfache ASCII zu finden ( nicht XML-basierte ) oder Binär-Format, das Ihren Bedürfnissen entspricht. PLY könnte geeignet sein. Nur als letztes Mittel, würde ich empfehlen daher, einen Importeur für ein XML-basiertes Format zu implementieren.

Es gibt auch: Lib3ds - http://www.lib3ds.org/ LibOBJ (lassen mich nicht schreiben Link)

Sie sollten einen Blick auf:

http://sketchup.google.com/community/developers.html

Das sketchup Team bietet eine C kostenlos ++ COM-Server. Mit diesem können Sie den Zugriff auf viele Informationen über eine .skp-Datei erhalten.

Sie sollten diesen COM-Server verwenden, um einen .skp Importeur für Ihre Anwendung zu schreiben.

Sie sollten versuchen, die TLB-Datei zu erhalten, wenn Sie können. Dies wird Ihnen auf intelligente Zeiger zugreifen, die Ihren Importeur (COM-Client) vereinfachen

Ich habe die Version 6 SDK (das die TLB-Datei enthalten). Die aktuelle Version des SDK nicht erscheint diese Datei enthält.

Jemand hat eine Lösung (für die fehlende TLB-Datei) auf den Entwicklerforen: http://groups.google.com/group/su-sdk-fileshare/ Themen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top