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

Aktuelle Zeit: Di Jul 15, 2025 11:41

Foren-Übersicht » Sonstiges » Community-Projekte
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 178 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6, 7 ... 12  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 08, 2005 12:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 16, 2003 15:20
Beiträge: 198
Frage 1 :
beides macht meiner Meinung nach nur den Laoder komplizierter und vereint die Nachteile beider (Langsam zu laden, da Textanteile, nicht immer lesbar da Binäranteile ...). Ich tendiere inzwischen auch zu einem Textformat, da dieses extrem leicht erweiterbar ist, und für schnelles Laden in Binärform gespeichert werden könnte (extra funktion des Loaders ??)

_________________
Bevor du definierst, was etwas ist, versichere dich seiner Existenz.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 08, 2005 12:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Mal eine Frage meinerseits:

Wer hat sich schon im wishlist Wiki die Formate mal angeschaut?

Dort gibt es schon eine Vor und Nachteilssammlung:
http://wishlist.delphigl.com/index.php/ ... _Vorschlag

Erweiterbar ist zum Beispiel die Binäre Baumsturktur genauso, sie bietet genausoviel wie XML nur noch ein bischen mehr da man nicht auf Text beschränkt ist (zum Beispiel könnte man einen Typ Vertex Array definieren). Das editieren und anschauen der Modelldateien ohne 3D Programm könnt ihr vergessen. (Wers nicht glaubt sollte mal mein altes 3D Modeller Program rauskrammen; bei dem Projekt ist mir das klar geworden das man gute Objekte nicht durch die Eingabe von Zahlen erstellen kann). Dazu könnte man ja so eine binäre Baumtstruktur zwecks debuggen des Loaders gut in eine XML Form umwandeln. Anders rum, also von XML zur binären ist das ohne weitere Formatvorgaben nicht so gut möglich.

Ein Vertex-Array Typ könnte dann zum Beispiel in das umgewandelt werden:
Code:
  1.  
  2. <vertexArray>
  3. (234,123523 / 45,123461 / 662.123516)
  4. (364,125423 / 65,123841 / 162.163416)
  5. (256,126423 / 75,123361 / 162.123416)
  6. (733,123623 / 45,123461 / 162.123416)
  7. </vertexArray>
  8.  

oder auch(wenn man es möchte) in:
Code:
  1.  
  2. <Array>
  3.   <Vertex> <x>234,123523</x> <y>45,123461</y> <z>662.123516</z></Vertex>
  4.   <Vertex> <x>234,123523</x> <y>45,123461</y> <z>662.123516</z></Vertex>
  5. ...
  6.  

wobei erste Version fürs überprüfen des Loaders wohl doch anschaulicher ist.

Im binären Format würde so ein Vertex gerade mal 12 Bytes belegen. In der zweiten (XML richtigeren) Version 72 Bytes !!
(die Konotenpunkte dürften ungefähr gleich viel Platz benötigen, wenn man die bei der binären Version benötigte Tabelle berücksichtigt)

MfG
Flo

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 08, 2005 12:43 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Den Loader müßte man gar nicht doppelt schreiben wenn das Text und Binärformat 1:1 übereinstimmen. Man braucht nur eine Klasse Reader mit Funktionen wie ReadToken, ReadInt, ReadFloat usw.. und dann davon abgeleitet TextFormatReader und BinaryFormatReader. (Writer dann entsprechend)
Ganz wichtig bei so einem Format sind aber vollständige Typeinformationen. Alle Objekte die innerhalb der Datei gespeichert sind müssen vorher beschrieben werden. Eigentlich will man ja, egal bei welchen Format auch immer, nichts anderes als seine Objektstruktur in eine Datei schreiben und die gleiche Struktur nacher wieder herauslesen. Bei vollständiger Beschreibung kann man dann nur aus der Datei heraus die Klassen und Objekte erstellen und auch wenn sich z.B. im Programm einiges an Formaten geändert hat ist man aufgrund der Typeinformationen abwärtskompatibel. Damit meine ich ganz konkrete Klassendefinitionen wie man sie in Delphi hat. Also in der Datei müßte stehen die Klasse Vertex hat z.B. die Felder x,y,z vom Type single und r,g,b,a vom Type byte. Die Klasse AnimationSequence hat ein Feld Name vom Type string und ein Array Keys von Type AnimationKey. usw... Am besten speichert man die Typen am Anfang der Datei und möglichst einfach.
Erst auf so einem allgemeinen Format aufbauen kann man dann den DGL Standard definieren, der dann minimale Vorraussetzngen beschreibt, z.B. dass es eine Meshklasse geben muß, bei der die Vertex Daten in einem Feld "VertexArray" gespeichert werden usw...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 08, 2005 12:55 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Wenn ich dich richtig verstehe willst du eine Tag basierte variante in binary damit vorstellen.
Sprich ein tag hat ein Wert zwischen 0 und 255 und per konstanten werden diese festgehalten.
Sprich
const
Command_Tag=0
Header_Tag_Open=1
Header_Tag_Close=1
Verticearray_Tag_Open=2
Verticearray_Tag_Close=2

type
header:record;
ID:cardinal=1;
data:array of byte;
end;

header_advanced:record;
ID:cardinal=2;
name:string;
blakeks:cardinal;
end;

und dann durch z.B. der Kombination 01 darauf hinweisen das der header aufgemacht wurde, dann die daten rausgelsen werden(durch den passenden typ) und wenn ein 01 kommt der Header zuende ist und wenn nicht halt die nächste struktur gelesen wird.

Oder hab ich da was falsch verstanden ?
Weil diese Variante so wäre sehr Praktisch.
Es würde die alle Vorteile von Binär mit der Flexibilität von Text vereinen.
Der einzige nachteil ist man müsste erst mit einem Tool die daten in lesbaren text convertieren, was aber eher ein kinderspiel ist.

Edit:
Wenn ich das bisher richtig verfolgt habe, sind wir einer Meinung bezüglich eines auf Tag basiertem Formates.
Aufgrund der Flexibilität und lesbarkeit.

Ob Text oder Binär sehe ich noch als ungeklärt an.

_________________
"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: Do Sep 08, 2005 13:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich bin ein überzeugter Fan von Binärformaten und benutze nur recht selten Textformate. Aber allen erstes bin ich der Überzeugung, dass man beides unterstützen muss! Bei der derzeit recht übersichtlichen Anzahl an Stimme die sich melden hat man schon klar zwei Lager. Binärlager und Textlager. Entweder man schafft es sich auf eines zu einigen oder beides muss implementiert werden. Anderenfalls dürfte sich das Format recht fix in Wohlgefallen auflösen, da dann alle ein wenig frustriert sind.

Wenn man sich ein Format ausdenkt was sowohl Text auch Binär kann dürfte man die wenigsten Problem haben. Der strukturelle Aufbau muss bei beiden gleich sein. Lediglich die Informationen sollten unterschiedlich abgelegt werden. Ein paar abstrakte Objekten wirken da Wunder. Genau wie Lars das auch meinte.

Delphi DFMs sind ja auch Text, Binär, Text aus Resource oder Binär aus Resource. Wo die Daten nun her kommen halte ich für so etwas von unwichtig. Viel wichtiger ist doch die Struktur der Daten. Aber so blockbasiert ist immer schon eine sehr praktische Erfindung.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 08, 2005 13:42 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Mit den Tags meinte ich das ungefähr so:

Code:
  1. class Vertex
  2. x float
  3. y float
  4. z float
  5. end
  6. class Mesh
  7. VertexData array Vertex
  8. end
  9. object Mesh
  10. 1
  11. 1.0 0.0 0.0
  12. end
  13.  


Code:
  1.  
  2. class = 1
  3. end = 2
  4. float = 3
  5. name = 4
  6. object = 5
  7. array = 6
  8.  


Namen sollten spezielle Arten von Strings sein die sich häufig wiederholen. Da braucht man in der Binärvariante nur beim ersten Mal den String und danach nur noch einen Index zu speichern. Die Tabelle mit den Namen kann man während des Schreibens und Lesens aufbauen.

Code:
  1.  
  2. $01 $04 $06 'V' 'e' 'r' 't' 'e' 'x' // class name'Vertex'
  3. $04 $01 'x' $03 // name'x' float
  4. $04 $01 'y' $03 // name'y' float
  5. $04 $01 'z' $03 // name'z' float
  6. $02
  7.  
  8. $01 $04 $05 'M' 'e' 's' 'h'
  9. // Name 'Vertex' hier nur noch als Index 0
  10. // $06 $04 $00 entspricht array name00='Vertex'
  11. $04 $0A 'V' 'e' 'r' 't' 'e' 'x' 'D' 'a' 't' 'a' $06 $04 $00  
  12. $02
  13.  
  14. $05 $04 $01 // object name01 ='Mesh'
  15. $01             // Array Länge
  16. $3F $80 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00  // 1.0 0.0 0.0
  17. $02
  18.  


Aus so einem Format bekommt man die Daten immer wieder heraus. Man kann sich zudem z.B. ein Tool schreiben, dass aus einer Datei die entsprechenden Delphi Klassen generiert und eine Loader Unit erstellt.


Zuletzt geändert von LarsMiddendorf am Do Sep 08, 2005 14:44, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 08, 2005 14:22 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also die Klassendefintion würde ich so nicht machen. Wenn man konfigurieren kann welche Felder in einem Vertex enthalten sind, dann solte das vollkommen ausreichen. Es würde genügend flexibilität bietet und würde vom Parsen und benutzen her nicht zu kompliziert sein.

Ich würde dann auch darauf achten, dass Binär auch wirklich Binär wäre. So hat es mich noch zu viel Textzüge. Also dadurch, dass X, Y und Z alleine auch schon als Text enthalten sind. Irgendwo muss man dem Loader dann ja auch sagen was er mit welchen Daten anfangen soll. Und da würde ich sagen ein Vertex hat eine bestimmte Anzahl an möglichen Feldern. (Koordinaten, Farben, Texturkoodinaten, Sonstige Parameter)

Code:
  1. Vertexinfo
  2. X Float
  3. Y Float
  4. Z Float
  5. End
  6.  
  7. Object
  8. Vertex 1.0 0.0 0.0 End
  9. Vertex 1.0 0.0 0.0 End
  10. End

Ich denke mal, man sollte es nicht zu perfekt machen. Der Vorteil ist im Vergleich zum Aufwand eher ungerechtfertigt.

Code:
  1. // Hauptobjekte
  2. Vertexinfo $01
  3. Object $02
  4. Vertex $03
  5. End $FF
  6.  
  7. // Vertexinfo felder
  8. X $01
  9. X $02
  10. Z $03
  11.  
  12. // Datentypen
  13. Float $01
  14.  
  15. == Beispiel ==
  16. $01
  17. $01 $01
  18. $02 $01
  19. $03 $01
  20. $FF
  21.  
  22. $02
  23. $03 Daten $FF
  24. $03 Daten $FF
  25. $FF

Ob ein Vertex auch abgeschlossen werden muss stelle ich mal so dahin. Normal ist seine größe durch die Definition festgelegt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 08, 2005 14:51 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Gut das begin/end kann man sich innerhalb der Daten sparen (Beitrag oben editiert). Der Type ist ja durch die Deklaration festgelegt und so liegen die Vertexdaten im binären Format wenigstens hintereinander. Aber vollständige Typeinformationen(nicht nur konfigurierbar) sollten schon drin sein und das Format sollte unabhängig von konkreten Typen sein. Der Loader soll gar nichts mit den Daten anfangen, denn es geht ja um ein allgemeines flexibeles Format. In deinem Bsp sind nicht genug Informationen enthalten um die Objekte aus der Datei ohne Zusatzwissen zu extrahieren .


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 08, 2005 15:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Ja so habe ich mir das auch ungefähr mit dem Binären Typformat vorgestellt:

Es gibt eine Tabelle (bzw. Liste)die am Anfang die Typdeklarationen enthält. Ein Block beginnt immer mit einen Index auf diese Typdeklaration.

In der Typdeklaration ist ganz für jeden Typ eindeutig festgelegt:
* Wie groß er ist
* oder das er eine Variable größe hat. und nach dem Typ-Index bei jedem Block die größen Angabe des Blockes folgt.

Das hätte den Vorteil das man sobalt man Kopf und falls vorhanden Größenangabe eingelesen hat sofort zum Ende springen kann.

Neben dieser Typtabelle gibt es dann oben auch noch eine String Tabelle in der sämtliche Tag und Eigenschaftsnamen abgelegt sind. Auf diese kann dann wieder mit einen Index zugegriffen werden.

Beides zu haben binäres und Textformat, wäre möglich wenn genau festgelegt wird wie zum Beispiel ein Block der den Typ Vertex-Array beschreibt in der Text-Version aussieht.

siehe auch: http://wishlist.delphigl.com/index.php/ ... at_Entwurf

Ansonsten weitere Vorschläge bitte ins wishlist Wiki.

MfG
Flo

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 08, 2005 15:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
@Lars: Na ja. Okay. Das ist auch irgendwo wahr. Ich befürchte da nur, dass das eine solche Komplexibilität die Geschwindigkeit, Übersicht und die Unanfälligkeit gegenüber von Fehlern negativ beeinflussen wird. Und ich schätze mal, dass solche eine komplexe Flexibilität nur von einer Hand voll Leuten genutzt wird (werden kann).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 08, 2005 15:07 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Komplexität:
So ein allgemeines Format ist nicht zu komplex, weil man die Funktionalität zum Lesen und Schreiben nur ein einziges Mal programmieren muß.

Zu Tabellen in Formaten:
Tabellen wie z.B. Strings oder Objektreferenzen sind schwer zu schreiben, weil man dann am Anfang erstmal alle Strings durchgehen müßte. Dann lieber die Tabellen die man braucht generell während des Schreibens/Lesens füllen. Also man schreibt immer einen Index und nur beim ersten Vorkommen dann den Eintrag dahinter.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 08, 2005 15:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Zitat:
Tabellen wie z.B. Strings oder Objektreferenzen sind schwer zu schreiben, weil man dann am Anfang erstmal alle Strings durchgehen müßte. Dann lieber die Tabellen die man braucht generell während des Schreibens/Lesens füllen. Also man schreibt immer einen Index und nur beim ersten Vorkommen dann den Eintrag dahinter.

Eigentlich eher Formate(Typdeklaratione) in Tabellen ;)

Also bei Blender läuft das beim Exportieren normalerweise so ab das man erst die Daten in der gewünschten Form in einen Objekt-Baum abspeichert. Danach schreibt man die Daten nur noch in die Datei. Bei diesen Trasfarieren in den Objektbaum das wir sowieso machen müssen, können wir auch gleich die Tabellen aufstellen. Auch andere benötigte Datein wie Blockgrößen können dann ermittelt werden, falls diese nicht offensichtlich sind.

Ich habe jetzt mal ein, zugegen nicht ganz fertiges Beispiel ins Wiki gestellt:

http://wishlist.delphigl.com/index.php/ ... f#Beispiel

MfG
Flo

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 08, 2005 15:27 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@Benutzung: Die meisten Leute werden einfach das Writerscript und den Loader nehmen und denen isses Wurscht was drinnen steht. Die Vielseitigkeit ist dann nur für die "proffesionelleren" anwender interessant. Und die sorgen dafür, dass das Format Verbreitung findet. 8)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 08, 2005 15:28 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Nun ja. Ich weiß nicht inwieweit es da Unterstützung von Blender her gibt, aber so ein zweischrittiges Speichern ist unter Delphi dann doch eher umständlicher. Und wie verschachtelt man dann Objekte ineinander? Man hat ja nichts davon wenn man am Ende ein paar große Listen hat und die Beziehungen dann über Indizes oder Ähnlichem heraussuchen muß.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 08, 2005 15:45 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Ich bin eigentlich davon ausgegaben das wir ein Format brauchen das auf Lade und nicht auf Exportzeiten optimiert ist.

Wenn man vorher schon weis was das format beinhaltet, oder mininmal größere Datein in kaufnimmt kann man auch direkt die Daten exportieren. Den schrtt der Anpassung kann man natürlich nur dann weglassen wenn nichts anders anfällt. Bei Blender ist es oft noch nötig die Mischung aus Vier und Dreiecken einheitlich zu Dreiecken zu machen.

Edit: @ Lars: ach ne so kompliziert habe ich das gar nicht gemeint.
MfG
Flo

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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 178 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6, 7 ... 12  Nächste
Foren-Übersicht » Sonstiges » Community-Projekte


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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.010s | 14 Queries | GZIP : On ]