Blenderexporter: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Aufbau eines Exporters)
(Aufbau eines Exporters)
Zeile 11: Zeile 11:
 
==Aufbau eines Exporters==
 
==Aufbau eines Exporters==
  
Jeder Blenderexporter verfügt über einen Header, in dem Daten stehen, wie er in die Menüstruktur eingefügt wird. Anschließen folt der Python code.
+
Jeder Blenderexporter verfügt über einen Header, in dem Daten stehen, wie er in die Menüstruktur eingefügt wird. Anschließen folt der Python code. Näheres dazu steht in den Wikibooks.
  
 
   #!BPY
 
   #!BPY
Zeile 18: Zeile 18:
 
   Blender: 241
 
   Blender: 241
 
   Group: 'Export'
 
   Group: 'Export'
   Tooltip: 'DGL Wiki sample exporter'
+
   Tooltip: 'DGL Wiki Exporter'
 
   """
 
   """
 
   import Blender
 
   import Blender
   def write_obj(filepath):
+
   def write(file):
         out = file(filepath, 'w')
+
         out = file(file, 'w')
         object = Blender.Object.GetSelected()[0]
+
         obj = Blender.Object.GetSelected()[0]
         mesh = object.getData()
+
         msh = obj.getData()
          
+
         #hier wird Code eingefügt, der die zu exportierenden Daten in das File schreibt
        for vert in mesh.verts:
 
                out.write( 'v %f %f %f\n' % (vert.co.x, vert.co.y, vert.co.z) )
 
       
 
        for face in mesh.faces:
 
                out.write('f')
 
               
 
                for vert in face.v:
 
                        out.write( ' %i' % (vert.index + 1) )
 
                out.write('\n')
 
 
         out.close()
 
         out.close()
   Blender.Window.FileSelector(write_obj, "Export")
+
   Blender.Window.FileSelector(write, "Export")
 +
 
 +
Wichtig ist, das man bei Python die Einrückungen beachtet. Als erstes wird eine Funktion definiert, die vom Fileexportdialog aus aufgerufen wird. Dabei wird der Filename als Argument übergeben. Die folgenden Zeilen öffnen ein File zum schreiben und hohlen sich die Meshdaten des erstem selektiertem Objektes.
 +
Starten tut das Script eigendlich erst in der letzten Zeile, die den Exportdialog aufruft.
  
 
==Externe Links==
 
==Externe Links==
  
 
http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/Advanced_Tutorials/Python_Scripting/Export_scripts
 
http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/Advanced_Tutorials/Python_Scripting/Export_scripts

Version vom 16. Juni 2006, 15:11 Uhr

Hinweis: Dieser Artikel wird gerade Offline bearbeitet!

Bitte haben Sie etwas Geduld und nehmen Sie keine Änderungen vor, bis der Artikel hochgeladen wurde.

(weitere Artikel)
WIP Offline.jpg

Vorwort

Hier werde ich einige Codeschnipsel zeigen, mit denen man sich einen eigenen Blenderexporter bauen kann. Der Schwerpunkt liegt dabei darauf, die Daten so vorzubereiten, dass sie direkt als VertexBufferObjekt in die Grafikkarte hochgeladen werden können.

Dieses Tutorial, soll kein festes Format beschreiben. Es ist sowohl möglich die Daten sauber in XML zu kapseln, als auch ganz dirty mal eben ein Includierbares C oder Pascalfile zu erzeugen. Der Compiler wird einen dafür aber mit erheblich längeren compelierungszeiten bestrafen.

Prinzipell bin ich der Meinung, das eine eigene Engine nicht zwangshaft mit einem Universalformat wie Collada verwendet werden muss. Auch beliebte Formate wie 3DS haben gewaltige Nachteile, da sie nicht alle Daten speichern können, die beim Arbeiten mit Shadern benötigt werden. 3DS ist eine gut wahl, solang man nicht viel mehr als Vertices, Normals und UV Coordinaten benötigt. Sobald Bones Vertexgruppen, TBN Matrizen und möglicherweise weitere eigene Daten gespeichert werden müssen gibt es große Probleme.

Aufbau eines Exporters

Jeder Blenderexporter verfügt über einen Header, in dem Daten stehen, wie er in die Menüstruktur eingefügt wird. Anschließen folt der Python code. Näheres dazu steht in den Wikibooks.

 #!BPY
 """
 Name: 'DGL Wiki'
 Blender: 241
 Group: 'Export'
 Tooltip: 'DGL Wiki Exporter'
 """
 import Blender
 def write(file):
       out = file(file, 'w')
       obj = Blender.Object.GetSelected()[0]
       msh = obj.getData()
       #hier wird Code eingefügt, der die zu exportierenden Daten in das File schreibt
       out.close()
 Blender.Window.FileSelector(write, "Export")

Wichtig ist, das man bei Python die Einrückungen beachtet. Als erstes wird eine Funktion definiert, die vom Fileexportdialog aus aufgerufen wird. Dabei wird der Filename als Argument übergeben. Die folgenden Zeilen öffnen ein File zum schreiben und hohlen sich die Meshdaten des erstem selektiertem Objektes. Starten tut das Script eigendlich erst in der letzten Zeile, die den Exportdialog aufruft.

Externe Links

http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/Advanced_Tutorials/Python_Scripting/Export_scripts