|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 01.10.2008, 23:36 Titel: 3D Programm + FreeBasic/OpenGL |
|
|
Beim Experimentieren mit Blender(3D-Modeller) und Yafray(Raytracer) ist mir mal folgendes aufgefallen:
Wenn man als Renderer in Blender Yafray benutzt und eine 3D Szene berechnen lässt erzeugt eines der beiden
Programme neben dem Bild(.tga) auch eine .xml Datei, welche die Szene beschreibt....
hier mal ein Beispiel:
- <scene>
- <shader type="blendershader" name="MAMaterial">
- <attributes>
<color r="0.800000" g="0.800000" b="0.800000" />
<specular_color r="1.000000" g="1.000000" b="1.000000" />
<mirror_color r="1.000000" g="1.000000" b="1.000000" />
<diffuse_reflect value="0.800000" />
<specular_amount value="0.500000" />
<alpha value="1.000000" />
<emit value="0.000000" />
<matmodes value="traceable shadow" />
<diffuse_brdf value="lambert" />
<specular_brdf value="blender_cooktorr" />
<hard value="50" />
</attributes>
</shader>
- <transform m00="1.000000" m01="0.000000" m02="0.000000" m03="0.000000" m10="0.000000" m11="1.000000" m12="0.000000" m13="0.000000" m20="0.000000" m21="0.000000" m22="1.000000" m23="0.000000" m30="0.000000" m31="0.000000" m32="0.000000" m33="1.000000">
- <object name="OBCube" shadow="on" shader_name="MAMaterial">
<attributes />
- <mesh autosmooth="0.1" has_orco="off">
- <points>
<p x="1.000000" y="1.000000" z="-1.000000" />
<p x="1.000000" y="-1.000000" z="-1.000000" />
<p x="-1.000000" y="-1.000000" z="-1.000000" />
<p x="-0.999999" y="1.000000" z="-1.000000" />
<p x="1.000000" y="1.000000" z="0.999999" />
<p x="-1.000000" y="1.000000" z="1.000000" />
<p x="-1.000000" y="-1.000000" z="1.000000" />
<p x="0.999999" y="-1.000000" z="1.000000" />
</points>
- <faces>
<f a="0" b="1" c="2" shader_name="MAMaterial" />
<f a="2" b="3" c="0" shader_name="MAMaterial" />
<f a="4" b="5" c="6" shader_name="MAMaterial" />
<f a="6" b="7" c="4" shader_name="MAMaterial" />
<f a="0" b="4" c="7" shader_name="MAMaterial" />
<f a="7" b="1" c="0" shader_name="MAMaterial" />
<f a="1" b="7" c="6" shader_name="MAMaterial" />
<f a="6" b="2" c="1" shader_name="MAMaterial" />
<f a="2" b="6" c="5" shader_name="MAMaterial" />
<f a="5" b="3" c="2" shader_name="MAMaterial" />
<f a="4" b="0" c="3" shader_name="MAMaterial" />
<f a="3" b="5" c="4" shader_name="MAMaterial" />
</faces>
</mesh>
</object>
</transform>
- <light type="pointlight" glow_intensity="0.000000" glow_offset="0.000000" glow_type="0" name="LAMP1" power="29.999983" cast_shadows="on">
<from x="4.076245" y="1.005454" z="5.903862" />
<color r="1.000000" g="1.000000" b="1.000000" />
</light>
- <background type="constant" name="world_background">
<color r="0.056563" g="0.220815" b="0.400000" />
</background>
- <camera name="MAINCAM" type="perspective" resx="800" resy="600" focal="1.093750" aspect_ratio="1.000000" dof_distance="0.000000" aperture="0.000000" use_qmc="on" bokeh_type="disk1" bokeh_bias="uniform" bokeh_rotation="0.000000">
<from x="7.481132" y="-6.507640" z="5.343665" />
<to x="6.826270" y="-5.896974" z="4.898420" />
<up x="7.163762" y="-6.195171" z="6.239008" />
</camera>
- <render camera_name="MAINCAM" raydepth="5" gamma="1.000000" exposure="0.000000" AA_passes="2" AA_minsamples="4" AA_pixelwidth="1.5" AA_threshold="0.05" bias="0.001000" clamp_rgb="on" background_name="world_background">
<outfile value="C:\Users\Muttonhead\Blender Bilder\\YBtest.tga" />
</render>
</scene>
ist einfach nur nen Würfel - die Standard-Szene in Blender.
aber die Points und Faces sind doch recht aussagekräftig!!!
(die Faces sind Dreiecke??)
Ich bin ja nun mal grad dabei, mir FreeBasic beizubiegen, und von OpenGL noch meilenweit entfernt, aber
diese .xml ... nunja die enthält doch alle Infos die man in OpenGL braucht oder ???
.... nur mal nen Gedanke, und warscheinlich extrem blöde
Mutton |
|
Nach oben |
|
|
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
|
Nach oben |
|
|
Eastler_dart
Anmeldungsdatum: 25.09.2005 Beiträge: 177 Wohnort: Baden-Würtemberg + Sachsen
|
Verfasst am: 03.10.2008, 13:24 Titel: |
|
|
hallo Alle, hallo Muttonhead,
ja, die Daten sind informativ, aber es geht noch deutlicher.
Bin aber jetzt nicht in der Lage, Blender zu starten, bei Anim8tor gehts aber bestimmt. Speichere mal deinen Würfel als OBJ Datei, bei Anim8tor wäre es Objekt Export "als Obj.Datei".
Diese Objekt-datei ist eine reine Text-Datei, die z.B. so aussehen kann:
Code: | # Created with Anim8or 0.95
# Object "object01":
# ComRec:
g mesh01
# No. points 8:
v -25.1149 2.41321 -9.38454
v -6.34579 2.41321 -9.38454
v -6.34579 2.41321 9.38455
v -25.1149 2.41321 9.38455
v -25.1149 21.1823 -9.38454
v -6.34579 21.1823 -9.38454
v -6.34579 21.1823 9.38455
v -25.1149 21.1823 9.38455
# No. normals 30:
vn 0 0 -1
vn 0 0 1
vn 1 0 0
vn 0 1 0
vn -1 0 0
vn 0 -1 0
vn 0 0 -1
vn 0 -1 0
vn -1 0 0
vn 0 0 -1
vn 0 -1 0
vn 1 0 0
vn 0 0 1
vn 0 -1 0
vn 1 0 0
vn 0 0 1
vn 0 -1 0
vn -1 0 0
vn 0 0 -1
vn -1 0 0
vn 0 1 0
vn 0 0 -1
vn 0 1 0
vn 1 0 0
vn 0 0 1
vn 0 1 0
vn 1 0 0
vn 0 0 1
vn -1 0 0
vn 0 1 0
# No. texture coordinates 8:
vt 0 0
vt 1 0
vt 1 1
vt 0 1
vt 1 0
vt 0 0
vt 0 1
vt 1 1
# No. faces 6:
f 5/4/19 6/3/22 2/2/10 1/1/7
f 7/8/25 8/7/28 4/6/16 3/5/13
f 6/3/24 7/8/27 3/5/15 2/2/12
f 8/7/30 7/8/26 6/3/23 5/4/21
f 4/6/18 8/7/29 5/4/20 1/1/9
f 2/2/11 3/5/14 4/6/17 1/1/8
|
Hier wird jeder datentyp (vertex etc) mit # No. **** als Titel und darin die Anzahl der Datenzeilen aufgelistet
Hab schon probiert, diese Daten (für eine menschliche Figur) in Excel einzulesen, per "Text-in-Spalten aufteilen" in die einzelnen Werte zu zerlegen, mittels eingefügten Spalten die notwendigen FreeBasic- und openGL-Befehle dazwischen zu schreiben und hinterher wieder zusammenbasteln als Befehlszeilen.
Das läuft, die Figur hat mir dann OpenGL unter FreeBasic einwandfrei angezeigt.
Bedeutet: die manuelle Umsetzung über Excel hat mir gezeigt, mit den Daten (wer hätte das wohl gedacht?) kann man direkt arbeiten.
Wenn ich wiedermal mehr Zeit hab, versuche ich eine Einleseroutine für Obj-Dateien zu schreiben.
Wenn der Quellcode für die "menschliche Figur", den ich manuell aus der Obj-Datei gebastelt hatte, nicht um die eintausend Zeilen hätte, würde ich den ja hier einfügen, aber das ist bestimmt zu lang
Hoffe es bringt Ideen
Eastler _________________ Kaum macht mans richtig, schon geht's |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 03.10.2008, 16:36 Titel: |
|
|
Tach ooch Eastler ...wie's aussieht, kann Blender ".obj" weder lesen noch schreiben. Wer hätte das gedacht... na egal, werd ich mich mal auf die .xml stürzen.
.. halt, ich muss mich verbessern... es gibt nen PythonScript für Im und Ex von und nach .obj
Mutton |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 04.10.2008, 12:08 Titel: |
|
|
Hmmmmm... es sieht ähnlich aus, von gleich will ich jetzt nicht sprechen:
Code: | # Wavefront OBJ (1.0) exported by lynx's OBJ import/export script
# Meshname: Cube
# Total number of Faces: 6
# Total number of Vertices: 8
o Cube
g Cube
v 1.0 0.999999940395 -1.0
v 1.0 -1.0 -1.0
v -1.00000011921 -0.999999821186 -1.0
v -0.999999642372 1.00000035763 -1.0
v 1.00000047684 0.999999463558 1.0
v 0.999999344349 -1.00000059605 1.0
v -1.00000035763 -0.999999642372 1.0
v -0.999999940395 1.0 1.0
vn 0.577349185944 0.577349185944 -0.577349185944
vn 0.577349185944 -0.577349185944 -0.577349185944
vn -0.577349185944 -0.577349185944 -0.577349185944
vn -0.577349185944 0.577349185944 -0.577349185944
vn 0.577349185944 0.577349185944 0.577349185944
vn 0.577349185944 -0.577349185944 0.577349185944
vn -0.577349185944 -0.577349185944 0.577349185944
vn -0.577349185944 0.577349185944 0.577349185944
f 1//1 2//2 3//3 4//4
f 5//5 8//8 7//7 6//6
f 1//1 5//5 6//6 2//2
f 2//2 6//6 7//7 3//3
f 3//3 7//7 8//8 4//4
f 5//5 1//1 4//4 8//8 |
Mutton |
|
Nach oben |
|
|
Eastler_dart
Anmeldungsdatum: 25.09.2005 Beiträge: 177 Wohnort: Baden-Würtemberg + Sachsen
|
Verfasst am: 05.10.2008, 01:18 Titel: |
|
|
hallo Alle, hallo Muttonhead
ja, die spezifikationen des Obj.Formates werden scheinbar unterschiedlich ausgelegt.
in deiner Liste gibt es z.B die Zeile
# Total number of Vertices: 8
welche besagen, die Datei enthält u.a. 8 Vertices-Zeilen,
das sind die Zeilen, die mit v beginnen und 3D-Punkte beschreiben.
Dann gibts noch Texturangaben, solche Zeilen würden mit
vt beginnen, du hast keine drin, also keine Textur verwendet.
Mit vn beginnen Zeilen, in welchen die "Normalen"-Werte
enthalten. Das sind die Angaben, welche OpenGL zu einem
Objekt (Triangle, Quad....) angeben, welche Seite nach
"außen" im Gesamtgebilde zeigen.
In deiner Datei wundert mich nun, daß bezüglich dieser
vn-Zeilen keine Angabe drin ist, wieviele solcher Zeilen
in der Datei vorhanden sind.
In "meiner" Datei gibts dafür die Zeile:
# No. normals 30:
danach 30 Zeilen mit noramls-Werte
Als letztes die Zeilen, welche mit "f" beginnen, also "faces" enthalten.
Dabei wird zugrunde gelegt, daß man die Werte aus den Vertex-Zeilen,
den Normalen-Zeilen und den Textur-Zeilen jeweils in ein Array haut.
Die Faces-Werte sind dann die Index-Nummern innerhalb dieser Arrays.
Die Array-Geschichte kann man aber nicht mit 3 Sätzen erklären, das dauert ein paar Zeilen länger.
Also nich ganz soooo einfach.
Dies soll mal ein Tutorial-Thema werden, jedoch müßte ich davor die Normalen zuerst erklären.
Im Moment sitz ich aber am Schriften-Tutorial.
Die Angaben zur Obj-Datei hatte ich auf einer Internetseite gefunden,
finde aber den Link grad nicht.
Und die Dateien hier anzuzeigen könnte Probleme mit dem Urheber machen.
Wenn ich den Link wiederfinde, schreib ich den hier rein.
hoffe es regt Gedanken an,
Eastler _________________ Kaum macht mans richtig, schon geht's |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|