Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Mai 15, 2024 12:32

Foren-Übersicht » DGL » Feedback
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Sa Jun 17, 2006 19:23 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
So erster Post hier im Forum
Ich hab mal angefangen den normalen Wahrnsinn zu dokumentieren:

http://wiki.delphigl.com/index.php/GLSL ... d_Schatten
http://wiki.delphigl.com/index.php/Blenderexporter

Edit: http://wiki.delphigl.com/index.php/TBN_Matrix


Artikel sind noch als Offline makiert

ICh hab mit dem erstem als Tutorial angefangen, was auch zu Anfang recht schnell voran ging, leider waren die Schatten zwar Sichtbar, jedoch als Screenshots nicht sehr räpresentativ (Teapote mich Schachbrettmuster). Es muss einfach eine komplziertere und detailiertere Testumgebung her. Dummerweise konnte mein bisheriger Blenderexporter gerade mal Dreiecke mit Normalen exportieren. Das war grund genug einen neuen zu schreiben. Er sotiert die Daten jetzt so um , dass Vertices, Normalen, Texturecoords und die Gewichtungen der Bones direkt VBO kompatibel in XML verpackt werden.

Wahrscheinlich wird demnächst noch etwas über Bump ,Paralax und Reliefmapping hinzukommen Mit ein paar zusätzlichen Techniken ist dann alles möglich was für ein modernes Spiel notwendig ist....

Als erstes hätte ich ganz gerne ein wenig Feedback, was ich an den Artikeln noch verbessern soll (Außer Bilder bei denen Weiß ich dass sie Fehlen)
Vileicht hat auch jemand lust hat mit Blender einen Testraum zu bauen, bzw eine Scene zur Verfügung stellt, würde ich sie gerne verwenden.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Zuletzt geändert von oc2k1 am So Jun 18, 2006 20:35, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 17, 2006 20:29 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
Spontan fällt mir vom Inhalt nichts auf.

Du (oder Ich, wenn es fertig ist) solltest nochmal korrekturlesen, da sind enorm viele Rechtschreibfehler enthalten.
Dann fehlen wie gesagt noch die Bilder.

Ob sonst inhaltliche Fehler vorhanden sind, kann ich erst sagen, nachdem ich das selbstprobiert habe, was ich vielleicht die Tage mal probiere.

Zum Exporter:
Hier könntest du dich vielleicht mit Tak absprechen, weil er an dem XML-Format arbeitet.
Ansonsten, wie Flo es schon angemerkt hat, den Artikel bitte noch gut verlinken.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 17, 2006 22:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Erstmal muss ich sagen läßt mich dieser Blenderexporter Artikel echt viel erwarten. Würde mir auf jeden Fall noch eine kurze Einleitung (mit Quelltext am besten) wie man dies Modell läd noch freuen.


Willst du mit dem "Offline" Schild nur anmerken das die Artikel noch nicht fertig sind, du sie aber noch fertig machen wirst. Oder sollen wir sie wirklich nicht bearbeiten?

Würde ansonsten gerne noch Python Tags um die Python Quelltextblöcke machen.

Ansonsten hatte ich noch ein Kommentar auf die Diskusionsseite geschrieben(Diskussion:Blenderexporter).

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 18, 2006 02:15 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Naja das Offline bedeutet, das ich noch daran arbeite. Teilweise kopier ich da noch den Text zwischen meinen Quelcodes und dem Wiki hin und her. Wenn da jemand ein neues Unterkapitel einfügt wäre es kein Problem, blos wenn ich etwas von einer Änderung nicht bekomme, dann könnte sie weg sein. Wenn jemand Ideen hat einfach ganz unten ein neues Kapitel drunter hängen...

Beim Blenderexporter sind jetzt die großen Codeteile getestet. (Die vereinfachten noch nicht) und der Guss der in den Wikibooks beschrieben wird lässt sich damit auch schon exportieren. Ich muss aber noch abfragen ob überhaupt Vertexgruppen und Texturkoordinaten unterstützt werden.

Damit eine TBN Matrix exportiert werden kann muss ich mir wohl erst noch ein passendes Tutorial schreiben. Mann kann sie zwar auch aus den Vorhandenen Daten berechnen, jedoch ist das extrem kompliziert.

Eventuiell wären noch ein paar Vorschläge sinvoll, wie die Bones am besten animiert werden sollen, Zur Zeit sind es nur die Abhängigkeiten zu den Bones die gespeichert werden. Wenn Ageia endlich mal ein LinuxSDK rausbringen würde gäbe es wenigstends eine sinvolle Möglichkeit das ganz gleich mit eine Physikengine zu koppeln.
Immerhin könnte man die Vertexgruppen schon dazu benutzen, Zweige von Bäumen zu bewegen, so das Landschaften nicht mehr ganz statisch sind. Die gewichtung gibt dann an, wie stark die Bewegung ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 18, 2006 07:14 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3827
Wohnort: Tespe (nahe Hamburg)
Denkt bitte in jedem Fall daran mir kurz ne Mail vorbei zu schreiben, wenn Ihr den Artikel als "fertigt" betrachtet, damit wir ihn auch entsprechend angekündigt bekommen und er nicht am Ende hier abseits in einem Thread verstaubt. ;)

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 18, 2006 10:53 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
oc2k1 hat geschrieben:
Wenn Ageia endlich mal ein LinuxSDK rausbringen würde gäbe es wenigstends eine sinvolle Möglichkeit das ganz gleich mit eine Physikengine zu koppeln.


Bild

Ageia Physx ist pöhse! Mit heutigen Multi-Prozessor-Systemen braucht man sowas nicht, da soll man gefälligst Newton ( http://newton.delphigl.de , http://newtondynamics.com ) oder ODE hernehmen!

Das ist nix als Geldmacherei, was die da machen wollen. (Ich glaub, da gabs hier sogar mal ne Diskussion, hier oder in nem anderen Forum... ne, war nur n nebensatz, hier: viewtopic.php?t=4766&highlight=ageia letzter post auf der ersten seite.)

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 18, 2006 13:23 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Naja deren Physikengine ist nicht auf die Karte angewiesen, allerdings können die unmanegen von Objekten erst berechnet werden wenn eine Karte vorhanden ist. MIt einem normalem Prozessor ist das kaum möglich, da er nicht darauf spezialisiert ist.
Die Grafikkarte dafür zweckentfremden kommt auch nicht so toll, da dort eh ein permanenter Leistungsmangel herscht... In einen Server kann man ein Grafikkarte auch nicht umbedingt reistecken, da hätte so ne Karte irgend wie schon sinn...

Gegebenfalls sollten wir noch mal schauen ob sich am Fileformat des Exporters noch etwas verbessern lässt. Sehr Wahrscheinlich werde ich noch eine umfangreichere ersion bauen, die noch mehr kann.

Meine eigene kleine Roadmap:

Licht und Schatten:
Noch Bilder einbauen, sobald ich sie rendern kann

Blender exporter:
Noch um TBN Matrix und optimierungen ergänzen.
Importer in C bzw in C++ schreiben. (Irgend jemand kann es dann übersetzten. Ich kann kein Pascal schreiben)

TBN Matrix:
Tutorial schreiben weil ich es sonst selbst nicht verstehe.

Animationen per Vertexshader:
Das ist eigendlich nicht schwer wo ich jetzt die Daten hab. Es bleibt aber noch die groe Frage womit animieren... Es wäre sinvoll wenn die Animationsdaten aus irgend einer Physikengine kommen.

Bumpmapping,Paralaxmapping, Reliefmapping
Wenn die TBN Matrix erst mal korrekt berechnet wird sind die 3 Formen des Bummapings nur noch eine Kleinigkeit

Alles zusammenbauen
Damit dürfte dann genug Code da sein um Grafikdemos und Engines zu schreiben, die grafisch auf Farcry und Quake4 nivo liegen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 18, 2006 20:52 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Alle die gut in Geometrie und Mathe sind könnten folgenden Artikel überprüfen. Es ist nach dem Prinzip geschrieben " Wenn du was nicht verstehst dokumentiere es"

http://wiki.delphigl.com/index.php/TBN_Matrix

Für den Blender Exporter benötige ich halt auf jeden Fall funktionierende Formeln


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 19, 2006 08:09 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Wir beide stehen ja sowieso im Kontakt aber trotzdem will ich nochmal sagen "nice".
I0n0s sein Vorschlag mich wegen ein kleinen Testlevel zu fragen ist akzeptabel :wink:.
Mach das Octree noch fertig und ich leg mich ins Zeug.
Für genaueres können wir ja im irc weiter komunizieren.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 19, 2006 18:16 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Schön das hier richtig Bewegung reinkommt. Das Wiki hatte schon lange nicht mehr so viele Änderungen auf einmal. :)

Aber eine Anmerkung noch: Momentan lesen sich die Artikel wie Anleitungen. Weniger wie Tutorials. Das liegt vorallem daran, dass es zu schnell zur Sache geht und am Ende einfach aufhört. :mrgreen:
Was ich damit sagen will: Gibt den Tutorials noch ne persönliche Note. Ein paar Sätze am Anfang wieso das Tutorial geschrieben wurde (siehe erster Post in diesem Thread), und am Ende ein Nachwort damit das Tutorial etwas ausklingt.

Dann sollte man sich nochmal gedanken machen in welche Kategorie die Tutorials gehören. Ans Ende eines jeden Tutorials gehört dann noch die Kategoriesierung und die TUTORIAL_NAVIGATION Vorlage.

So das war erstmal mein Senf.... ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 19, 2006 18:52 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Also ich finde sie gut wie sie sind. Nicht jeder gute Artikel muss ein Tutorial werden.

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 20, 2006 00:13 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Beim Exporter tut sich gerade noch eine Menge. Der Code ist inzwischen 350 Zeilen lang und es ist immer noch nicht alles implementiert was rein muss.Die Triangles sind zwar inzwischen in Form von Octrees angeordnet (eine art Hashfunktion vereinfacht die Sortierung ungemein). Allerdings ist mir inzwischen eigefallen, wie man das ganze noch effektiver machen kann.

Zwingend notwendig wird noch der Tangentvektor sein, alle die sich damit auskennen, sollten umbedingt den artikel mit der TBN Matrix überprüfen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 20, 2006 13:59 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Im TBN Matrixatikel wir das Dreieck korrekt im Matiematisch positivem Sinne gezeichent (gegen den Uhrzeigersinn) Dazu gab es ein neues Bild. Ich hoffe, das es jetzt inhaltlich richtig ist...


Für das Format des Blenderexporters ist noch einiges offen dafür mach ein einen neuen Thread auf


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 22, 2006 21:55 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
So der Code für den Blenderexporter ist jetzt massiv zusammengeschrumpft und viel leichter verständlich, da jetzt erst die Quads in Triangles umgewandelt werden. Damit ist der Artikel wieder ungefähr auf dem Stand wie der Exporter selbst.
http://wiki.delphigl.com/index.php/Blenderexporter


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 23, 2006 01:50 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Die Arbeit mit dem Blenderexporter nähert sich dem Ende, da das meiste geschafft ist. Hier ist der aktuelle Code:
Code:
  1.  
  2. #!BPY
  3. """
  4. Name: 'DGL Wiki 2'
  5. Blender: 241
  6. Group: 'Export'
  7. Tooltip: 'DGL Wiki Exporter 2'
  8. """
  9. import Blender
  10. from Blender import NMesh
  11. from Blender.BGL import *
  12. from Blender.Draw import *
  13. import math
  14. from math import *
  15.  
  16. num_of_vertexgroups = Create(4)
  17. TMenu = Create(1)
  18. EVENT_NOEVENT = 1
  19. EVENT_EXPORT  = 2
  20. EVENT_CANCEL  = 3
  21.  
  22.  
  23. def draw():
  24.   global num_of_vertexgroups,TMenu
  25.   global EVENT_NOEVENT,EVENT_EXPORT
  26.   glClear(GL_COLOR_BUFFER_BIT)
  27.   glRasterPos2d(10, 125)
  28.   Text("DGL Exporter Options")
  29.  
  30.   TMemu = Menu("Normal|Normal+Tangent|TBN-Matrix",EVENT_NOEVENT,10,75,210,18,  1)
  31.   num_of_vertexgroups= Number("No of Vertgroups: ", EVENT_NOEVENT, 10, 55, 210, 18,num_of_vertexgroups.val, 0, 10, "Number of Vertgroups per Vertex");
  32.   Button("Export",EVENT_EXPORT, 140, 10, 80, 18)
  33.   Button("Cancel",EVENT_CANCEL, 10, 10, 80, 18)
  34.  
  35. def event(evt, val):
  36.    if (evt == QKEY and not val):
  37.       Exit()
  38.  
  39. def bevent(evt):
  40.   global EVENT_NOEVENT,EVENT_EXPORT
  41.   if (evt== EVENT_EXPORT):
  42.     Blender.Window.FileSelector(write, "Export")
  43.   elif (evt == EVENT_CANCEL):
  44.     Exit()
  45.  
  46. def minimum(a,b):
  47.   if (a<b):return a
  48.   return b
  49.  
  50. def maximum(a,b):
  51.   if (a>b):return a
  52.   return b
  53.  
  54. def quad2tri(msh):
  55.   flist=[]
  56.   for face in msh.faces:
  57.     if (len(face.v)==3):
  58.       flist += [face]
  59.     else:
  60.       d1 =(msh.verts[face.v[0].index].co.x - msh.verts[face.v[2].index].co.x) ** 2
  61.       d1+=(msh.verts[face.v[0].index].co.y - msh.verts[face.v[2].index].co.y) ** 2
  62.       d1+=(msh.verts[face.v[0].index].co.z - msh.verts[face.v[2].index].co.z) ** 2
  63.       d2 =(msh.verts[face.v[1].index].co.x - msh.verts[face.v[3].index].co.x) ** 2
  64.       d2+=(msh.verts[face.v[1].index].co.y - msh.verts[face.v[3].index].co.y) ** 2
  65.       d2+=(msh.verts[face.v[1].index].co.z - msh.verts[face.v[3].index].co.z) ** 2
  66.       if (d1<d2):
  67.         flist += [Blender.NMesh.Face([face.v[0],face.v[1],face.v[2]])]
  68.     flist[len(flist)-1].uv=[face.uv[0],face.uv[1],face.uv[2]]
  69.     flist[len(flist)-1].col=[face.col[0],face.col[1],face.col[2]]
  70.         flist[len(flist)-1].smooth=face.smooth
  71.    
  72.     flist += [Blender.NMesh.Face([face.v[0],face.v[2],face.v[3]])]
  73.         flist[len(flist)-1].uv=[face.uv[0],face.uv[2],face.uv[3]]
  74.     flist[len(flist)-1].col=[face.col[0],face.col[1],face.col[2]]
  75.     flist[len(flist)-1].smooth=face.smooth
  76.       else:
  77.     flist += [Blender.NMesh.Face([face.v[0],face.v[1],face.v[3]])]
  78.         flist[len(flist)-1].uv=[face.uv[0],face.uv[1],face.uv[3]]
  79.     flist[len(flist)-1].col=[face.col[0],face.col[1],face.col[3]]
  80.     flist[len(flist)-1].smooth=face.smooth
  81.    
  82.     flist += [Blender.NMesh.Face([face.v[1],face.v[2],face.v[3]])]
  83.         flist[len(flist)-1].uv=[face.uv[1],face.uv[2],face.uv[3]]
  84.     flist[len(flist)-1].col=[face.col[1],face.col[2],face.col[3]]
  85.     flist[len(flist)-1].smooth=face.smooth
  86.   msh.faces=flist
  87.   return msh
  88.  
  89. def createFaceTan(msh):
  90.   ftan = []
  91.   for face in msh.faces:
  92.     tan = msh.verts[face.v[2].index].co - msh.verts[face.v[0].index].co
  93.     #if (face.uv[2][1] != face.uv[1][1]):
  94.     m = (face.uv[2][1]-face.uv[0][1])/(face.uv[2][1]-face.uv[1][1])
  95.     tan += (msh.verts[face.v[1].index].co - msh.verts[face.v[2].index].co) * m
  96.     tan.normalize()
  97.     ftan += [tan]
  98.   return ftan
  99.  
  100. def createFaceBit(msh):
  101.   fbit = []
  102.   for face in msh.faces:
  103.     bit = msh.verts[face.v[1].index].co - msh.verts[face.v[0].index].co
  104.     #if (face.uv[1][0] != face.uv[2][0]):
  105.     m = (face.uv[1][0]-face.uv[0][0])/(face.uv[1][0]-face.uv[2][0])
  106.     bit += (msh.verts[face.v[2].index].co - msh.verts[face.v[1].index].co) * m
  107.     bit.normalize()
  108.     fbit += [bit]
  109.   return fbit
  110.  
  111. def interpolate(msh,ftan):
  112.   vtan = []
  113.   for vert in msh.verts:
  114.     vtan += [Blender.NMesh.Vert().co]
  115.   for face in msh.faces:
  116.     if (face.smooth == 1):
  117.       for vert in face.v:
  118.         vtan[vert.index] += ftan[vert.index]
  119.   for i in range(0,len(msh.verts)):
  120.     vtan[i].normalize()
  121.   return vtan  
  122.  
  123. def octree(msh):
  124.   ### Boundingbox for Quad Octree
  125.   mini = msh.verts[0].co * 1.0
  126.   maxi = msh.verts[0].co * 1.0
  127.   for vert in msh.verts:
  128.     mini.x = minimum (mini.x,vert.co.x)
  129.     mini.y = minimum (mini.y,vert.co.y)
  130.     mini.z = minimum (mini.z,vert.co.z)
  131.     maxi.x = maximum (maxi.x,vert.co.x)
  132.     maxi.y = maximum (maxi.y,vert.co.y)
  133.     maxi.z = maximum (maxi.z,vert.co.z)
  134.   size = max (maxi.x-mini.x,maxi.y-mini.y,maxi.z-mini.z)
  135.   optindex = []
  136.   count = 0
  137.   for face in msh.faces:
  138.     center = msh.verts[0].co * 0.0
  139.     for vert in face.v:
  140.        center += msh.verts[vert.index].co
  141.     center *= 1.0 /( len(face.v) * size * 2.0)
  142.     center.x += 0.5
  143.     center.y += 0.5
  144.     center.z += 0.5
  145.  
  146.     ix = int (center.x * 1023)
  147.     iy = int (center.y * 1023)
  148.     iz = int (center.z * 1023)
  149.    
  150.     sortby  = (ix&512)<<18 | (ix&256)<<16 |(ix&128)<<14 | (ix&64)<<12 |(ix&32)<<10 | (ix&16)<<8 |(ix&8)<<6 | (ix&4)<<4 |(ix&2)<<2 | (ix&1)<<0
  151.     sortby |= (iy&512)<<19 | (iy&256)<<17 |(iy&128)<<15 | (iy&64)<<13 |(iy&32)<<11 | (iy&16)<<9 |(iy&8)<<7 | (iy&4)<<5 |(iy&2)<<3 | (iy&1)<<1
  152.     sortby |= (iz&512)<<20 | (iz&256)<<18 |(iz&128)<<16 | (iz&64)<<14 |(iz&32)<<12 | (iz&16)<<10|(iz&8)<<8 | (iz&4)<<6 |(iz&2)<<4 | (iz&1)<<2
  153.     optindex += [(sortby,count)]
  154.     count += 1
  155.   optindex.sort()
  156.   flist=[]
  157.   for i in optindex:
  158.     flist += [msh.faces[i[1]]]
  159.   msh.faces=flist
  160.   return msh
  161.  
  162. def write(filename):
  163.   global num_of_vertexgroups,TMenu
  164.   out = file(filename, 'w')
  165.   obj = Blender.Object.GetSelected()[0]
  166.   msh = obj.getData()
  167.  
  168.   msh = quad2tri(msh)
  169.  
  170.   out.write('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n')
  171.   out.write('<vbo name="%s" verts="%i" type="GL_TRIANGLE">\n' % (msh.name, len(msh.faces)*3))
  172.  
  173.   msh = octree(msh)
  174.  
  175.   out.write('<vertices comp="3">\n')
  176.   for face in msh.faces:
  177.     for vert in face.v:
  178.       out.write( ' %f %f %f' % (msh.verts[vert.index].co.x, msh.verts[vert.index].co.y, msh.verts[vert.index].co.z))
  179.     out.write('\n')
  180.   out.write('</vertices>\n')
  181.  
  182.   if (msh.hasFaceUV()==1):
  183.     out.write('<texturecoords comp="2">\n')
  184.     for face in msh.faces:
  185.       for vert in face.v:
  186.         out.write( ' %f %f %f %f %f %f\n' % (face.uv[0][0],face.uv[0][1],face.uv[1][0],face.uv[1][1],face.uv[2][0],face.uv[2][1]) )
  187.     out.write('</texturecoords>\n')
  188.  
  189.   out.write('<normals>\n')
  190.   for face in msh.faces:
  191.     if (face.smooth==1):
  192.       for vert in face.v:
  193.         out.write( ' %f %f %f' % (msh.verts[vert.index].no.x, msh.verts[vert.index].no.y, msh.verts[vert.index].no.z))
  194.       out.write('\n')
  195.     else:
  196.       #Drei Normalvektoren für ein Solid Triangle
  197.       for vert in range(0,3):
  198.         out.write( ' %f, %f, %f,' % (face.no[0], face.no[1], face.no[2]))
  199.       out.write('\n')
  200.   out.write('</normals>\n')
  201.  
  202.   #Aufbauen des Vertesguppenindexes
  203.   vertGroupData = []
  204.   groups = msh.getVertGroupNames()
  205.   for vert in msh.verts:
  206.     list = []
  207.     count = 1
  208.     for group in groups:
  209.       if (len(msh.getVertsFromGroup(group,0,[vert.index]))==1):
  210.         list += [(msh.getVertsFromGroup(group,1,[vert.index])[0][1],count)]
  211.       count += 1
  212.       list.sort()
  213.       list.reverse()
  214.       for i in range(0,num_of_vertexgroups.val):
  215.         list += [(0.0, 0)]
  216.       vertGroupData += [(list[0:num_of_vertexgroups.val])]
  217.      
  218.   out.write('<vertexgroups comp="%i">\n' % num_of_vertexgroups.val)
  219.   out.write('<weight>\n')
  220.   for face in msh.faces:
  221.     for vert in face.v:
  222.       for group in vertGroupData[vert.index]:
  223.         out.write( ' %f' % (group[0]))
  224.     out.write('\n')
  225.   out.write('</weight>\n')
  226.   out.write('<index>\n')
  227.   for face in msh.faces:
  228.     for vert in face.v:
  229.       for group in vertGroupData[vert.index]:
  230.         out.write( ' %i' % (group[1]))
  231.     out.write('\n')
  232.   out.write('</index>\n')
  233.   out.write('</vertexgroups>\n')
  234.  
  235.   ftan = createFaceTan(msh)
  236.   vtan = interpolate(msh,ftan)
  237.   fbit = createFaceBit(msh)
  238.   vbit = interpolate(msh,fbit)
  239.  
  240.   out.write('<tan>\n')
  241.   for i in range(0,len(msh.faces)):
  242.     face = msh.faces[i]
  243.     if (face.smooth==1):
  244.       for vert in face.v:
  245.         out.write( ' %f %f %f' % (vtan[vert.index].x, vtan[vert.index].y, vtan[vert.index].z))
  246.       out.write('\n')
  247.     else:
  248.       for vert in range(0,3):
  249.         out.write( ' %f %f %f' % (ftan[i].x, ftan[i].y, ftan[i].z))
  250.       out.write('\n')
  251.   out.write('</tan>\n')
  252.  
  253.   out.write('<bit>\n')
  254.   for i in range(0,len(msh.faces)):
  255.     face = msh.faces[i]
  256.     if (face.smooth==1):
  257.       for vert in face.v:
  258.         out.write( ' %f %f %f' % (vbit[vert.index].x, vbit[vert.index].y, vbit[vert.index].z))
  259.       out.write('\n')
  260.     else:
  261.       for vert in range(0,3):
  262.         out.write( ' %f %f %f' % (fbit[i].x, fbit[i].y, fbit[i].z))
  263.       out.write('\n')
  264.   out.write('</bit>\n')
  265.  
  266.   out.write('<tbn>\n')
  267.   for i in range(0,len(msh.faces)):
  268.     face = msh.faces[i]
  269.     if (face.smooth==1):
  270.       for vert in face.v:
  271.     out.write( ' %f %f %f' % (vtan[vert.index].x, vtan[vert.index].y, vtan[vert.index].z))
  272.         out.write( ' %f %f %f' % (vbit[vert.index].x, vbit[vert.index].y, vbit[vert.index].z))
  273.         out.write( ' %f %f %f\n' % (msh.verts[vert.index].no.x, msh.verts[vert.index].no.y, msh.verts[vert.index].no.z))
  274.     else:
  275.       for vert in range(0,3):
  276.         out.write( ' %f %f %f' % (ftan[i].x, ftan[i].y, ftan[i].z))
  277.         out.write( ' %f %f %f' % (fbit[i].x, fbit[i].y, fbit[i].z))
  278.     out.write( ' %f %f %f\n' % (face.no[0], face.no[1], face.no[2]))
  279.   out.write('</tbn>\n')
  280.   out.write('</vbo>\n')
  281.   out.close()
  282.   Exit()
  283.  
  284. Register(draw, event, bevent)
  285.  


Wichtig ist alle, die sich der der Berechnung von TBN Matrizen auskennen mal einen Blick auf den Code werfen, ich habe den verdacht, das da noch nicht alles stimmt. Die 3 Vektoren scheinen zwar Senkrecht zueinander ausgerichtet zu sein, jedoch weiß ich nicht ob die Matrizen eventuell gespiegelte komponenten enthalten. Zum testen sollte auf jedenfall ein Modell mit Bones und UV Mapping verwendet werden. Wer keins hat, sollte sich einen guss aus den Wikibooks bauen.

Prinzipiell fehlen jetzt nur noch die Bonedaten, die möglichst um Körper für Physikengines ergänst werden sollten. Weiterhin müssen noch die Optionen in der GUI erhöht werden, da zur Zeit nur die Anzahl der Vertuxgruppen einstellbar ist.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » DGL » Feedback


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.036s | 17 Queries | GZIP : On ]