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

Aktuelle Zeit: Fr Jul 18, 2025 08:44

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Fragen zum ASE - Format ...
BeitragVerfasst: Sa Aug 02, 2003 14:32 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
Hiho Leutz ! Hab da paar Fragen zum ASE - Format ...

Erstmal ein kurzer Ausschnitt ...
Code:
  1. *MATERIAL_CLASS "Standard"
  2.         *MATERIAL_AMBIENT 0.1791    0.0654  0.0654
  3.         *MATERIAL_DIFFUSE 0.5373    0.1961  0.1961
  4.         *MATERIAL_SPECULAR 0.9000   0.9000  0.9000
  5.         *MATERIAL_SHINE 0.2500
  6.         *MATERIAL_SHINESTRENGTH 0.0500
  7.         *MATERIAL_TRANSPARENCY 0.0000
  8.         *MATERIAL_WIRESIZE 1.0000
  9.         *MATERIAL_SHADING Blinn
  10.         *MATERIAL_XP_FALLOFF 0.0000
  11.         *MATERIAL_SELFILLUM 0.0000
  12.         *MATERIAL_FALLOFF In
  13.         *MATERIAL_SOFTEN
  14.         *MATERIAL_XP_TYPE Filter


1.) Ich habe versucht, die Info *MATERIAL_CLASS "Standard" zu verändern, aber scheinbar kennt TrueSpace4 nur "Standard". Kann mir jemand sagen, was es sonst noch für Materialklassen gibt ?
2.)Die Zeilen
Code:
  1.  *MATERIAL_AMBIENT 0.1791   0.0654  0.0654
  2.         *MATERIAL_DIFFUSE 0.5373    0.1961  0.1961
  3.         *MATERIAL_SPECULAR 0.9000   0.9000  0.9000

stellen die Infos für Materialfv dar, oder ? Wenn ja, dann mach ich irgendwo nen Fehler ....
3.) Wie stellt man die Materialeigenschaften *MATERIAL_SHINE 0.2500 und *MATERIAL_SHINESTRENGTH 0.0500 ein ?
4.) In der Zeile *MATERIAL_SHADING Blinn wird ja die Shading - Art angegeben. Wie wird denn in OpenGL Flat-, Gouraud und Phong - Shading realisiert ? (Wenn möglich, bitte einen Link zu einem Tut beifügen. Programmiersprache is scheisegal (Bitte kein Assembler *gg*)). Hab bisher nur diese gefunden : http://www.mb.fh-wiesbaden.de/Hilfe/Glossar/z_shading.htm
5.) Kann mit den Zeilen
Code:
  1. *MATERIAL_XP_FALLOFF 0.0000
  2.         *MATERIAL_SELFILLUM 0.0000
  3.         *MATERIAL_FALLOFF In
  4.         *MATERIAL_SOFTEN
  5.         *MATERIAL_XP_TYPE Filter

nix anfangen. Kann mir jemand sagen, was diese Zeilen bedeuten ? Wie man Selbstillumination darstellt, wird mir wahrscheinlich ewig ein Rätsel sein. Kennt jemand ein Tutorial ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fragen zum ASE - Format ...
BeitragVerfasst: Sa Aug 02, 2003 15:23 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Eines mal vorweg : Im ASE-Format gibts jede Menge Parameter, deren Funktion und Nutzung im Verborgenen liegt, da es keine eindeutige Spezifikation gibt.
Ausserdem musst du dir im Hinterkopf behalten, das dieses Format für 3D-Raytracer entwickelt wurde und deshalb auch Parameter enthält, die man in OpenGL nicht (oder nur sehr umständlich) umsetzen kann.
Deshalb wär es auch keine gute Idee, alle Eigenschaften des ASE-Formats interpretieren zu wollen!

Alzheimer hat geschrieben:
1.) Ich habe versucht, die Info *MATERIAL_CLASS "Standard" zu verändern, aber scheinbar kennt TrueSpace4 nur "Standard". Kann mir jemand sagen, was es sonst noch für Materialklassen gibt ?

Aus meiner Erfahrung mit diesem Format her kenn ich auch nur zwei verschiedene Material-Klassen, wobei es wohl auch kaum mehr gibt.Das eine ist Standard für ein normales Material, und dann gibts auch noch ne Klasse für Untermaterialien.

Alzheimer hat geschrieben:
2.)Die Zeilen
Code:
  1.  *MATERIAL_AMBIENT 0.1791   0.0654  0.0654
  2.         *MATERIAL_DIFFUSE 0.5373    0.1961  0.1961
  3.         *MATERIAL_SPECULAR 0.9000   0.9000  0.9000

stellen die Infos für Materialfv dar, oder ? Wenn ja, dann mach ich irgendwo nen Fehler ....

Ja, die Stellen die Werte zur Übergabe an die Materialeigenschaften von OpenGL dar.

Alzheimer hat geschrieben:
3.) Wie stellt man die Materialeigenschaften *MATERIAL_SHINE 0.2500 und *MATERIAL_SHINESTRENGTH 0.0500 ein ?

So :
Code:
  1. glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

Allerdings gibts in OpenGL wohl keinen Unterschied zwischen den von dir aufgelisteten zwei Parametern.

Alzheimer hat geschrieben:
4.) In der Zeile *MATERIAL_SHADING Blinn wird ja die Shading - Art angegeben. Wie wird denn in OpenGL Flat-, Gouraud und Phong - Shading realisiert ? (Wenn möglich, bitte einen Link zu einem Tut beifügen. Programmiersprache is scheisegal (Bitte kein Assembler *gg*)). Hab bisher nur diese gefunden : http://www.mb.fh-wiesbaden.de/Hilfe/Glossar/z_shading.htm

OpenGL an sich kann nur Flatshading und Smoothshading (=Gouraud).Alles was darüber hinaus geht (z.B. Phong/Blinn) muss man sehr umständlich (z.B. über Pixelshader) selbst realisieren.Phong-Shading (bei dem ja "nur" dir normalen Interpoliert werden) kann man natürlich auch "einfacher" implementieren, in dem man die Normalen über ein Objekt hinweg interpoliert.
Lass das aber lieber links liegen, da jeder ja eigene Beleuchtungen machen will und sich nicht vom ASE-Loader eine aufzwingen lassen will.

Alzheimer hat geschrieben:
5.) Kann mit den Zeilen
Code:
  1. *MATERIAL_XP_FALLOFF 0.0000
  2.         *MATERIAL_SELFILLUM 0.0000
  3.         *MATERIAL_FALLOFF In
  4.         *MATERIAL_SOFTEN
  5.         *MATERIAL_XP_TYPE Filter

nix anfangen. Kann mir jemand sagen, was diese Zeilen bedeuten ? Wie man Selbstillumination darstellt, wird mir wahrscheinlich ewig ein Rätsel sein. Kennt jemand ein Tutorial ?

Über einige dieser Parameter kann man eigentlich nur mutmassen, und an deiner Stelle würde ich auch die nicht interpretieren, aber ich versuch trotzdem mal Infos zu geben :
MATERIAL_XP_FALLOFF -> Exponentieller Abschwächungsfaktor (Beleuchtung)
MATERIAL_SELFILLUM -> Ambientes "Glühen"
MATERIAL_SOFTEN -> Den Parameter gibts z.B. bei durch 3DS exportierten ASEs nicht, und auch google hat hier nicht geholfen...
MATERIAL_XP_TYPE -> Hier gibts anscheinend nur den Wert "Filter" und scheint ohne besonderen Nutzen zu sein.

P.S. : Viele zusätzliche Parameter (besonders bei Materialien) im ASE-Format sind auf Raytracer (und nicht auf Echtzeitrenderer) zugeschnitten und deshalb nur mit sehr viel Mühe zu implementieren.Solche Sachen wie Blinn-Beleuchtung oder Selbsillumination lassen sich eigentlich (wenns korrekt sein soll) nur über Fragmentprogramme realisieren.Ignoriere diese Parameter deshalb am besten!

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Hab nochmal ne Frage
BeitragVerfasst: Do Aug 07, 2003 16:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
Hab nochmal ne Frage zum ASE - Format ... und zwar zu den Animationsdaten :

Bei der Bewegung z.B.:
Code:
  1. *CONTROL_BEZIER_POS_KEY 0   2.5000  -2.5000 0.0000  0.0000  0.0000  0.0000  -0.0031 0.0000  0.0000  0

steht ja der erste Wert für die Zeit in msec, dann x,y,z. Nur was bedeuten die restilichen Daten ? z.B. -0.0031 sieht aus wie eine Bewegungskorrektur.

Genauso Rotation :
Code:
  1. *CONTROL_TCB_ROT_KEY 160    0.0000  0.0000  1.0000  0.0175  0.0000  0.0000  0.0000  0.0000  0.0000


und Skalierung :
Code:
  1. *CONTROL_BEZIER_SCALE_KEY 1760  1.0000  1.0500  1.0000 0.0000   0.0000  0.0000  0.0000  0.0000  -0.0003 0.0000  0.0000  0.0003  0.0000  0


Bisher hab ich immer nur die Zeit sowie X,Y,Z eingelesen. Da ich nicht weis, was der Rest bedeutet, kann ich nicht sagen, ob es für die spätere Animation wichtig ist.

Als letzte Frage habe ich noch : Kann man einen Array zur Laufzeit nur mit
Code:
  1.  VarArrayCreate(const Bounds, array of Integer, VarType: TVarType): Variant
erstellen ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 07, 2003 17:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
@ASE :
Mit Infos zum ASE-Format siehts ganz besonders in Sachen Animation sehr sehr schlecht aus, aber ich bin mir fast zu 100% sicher das die Rotationen, Skalierungen und Verschiebungen bei der Animation nicht als x/y/z sonder als 3x3 Matrix gespeichert sind.Das erklärt zum einen die vielen Zahlenwerte und entspricht dann auch dem Animationsfomrat gängiger 3D-Formate wie 3DS, wo Animationsmatrizen gesichert werden.

@Array :
Noch nie was mit dynamischen Arrays gemacht?Die kannst du zur Laufzeit variieren wie du lustig bist, und die sind allemale schneller als Variants :
Code:
  1. var
  2.  MyDynArray1D : array of Single;
  3.  MyDynArray2D : array of array of Single;
  4.  ...
  5. begin
  6. SetLength(MyDynArray1D, 20);
  7. SetLength(MyDynArray2D, 20, 30);
  8. for i := Low(MyDynArray1D) to High(MyDynArray1D) do
  9.  ...
  10. end;

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 07, 2003 17:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
Nein nein ich meinte ja nicht ein dynamisches Array zur Laufzeit erstellen, sondern eine unbestimmte Anzahl an dynamischen Arrays zur Laufzeit erstellen. Mit VarArrayCreate gehts zwar aber es gibt doch bestimmt auch hier ne Basisklasse zum Datentyp, oder ? Dachte zuerst, es wäre möglich, von TArray abzuleiten und mit .create eines zusammenzuwurschteln, doch gibts des leider nicht. Das Probremerlö ist schlichtweg, dass die Anzahl der dynamischen Arrays unbestimmt ist. Klaro könnte ich ein dynamisches Array nehmen, welches dann eben in die Länge gezogen wird, aber zur Laufzeit erstellen ist halt was feines und es ist übersichtlicher. Bei C++ gings ja auch also gibt es hier bestimmt auch ne Basisklasse, die nicht in der BDN zu finden ist.(Mit SetLength kann man ja dann anschliessend prüfen, ob das Array exisitert)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 07, 2003 17:30 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Das was du willst geht AFAIK in Delphi nicht, und zur Laufzeit Arrays (oder irgendwelche anderen Variablen) erstellen ist auf keine Fall übersichtlicher, und mal davon abgesehen auch weniger performant als vorher fest definierte Variablen.
Ich wüsst jetzt auch spontan gar nicht warum man für nen ASE-Loader irgendwelche Arrays zur Laufzeit erstellen muss, lässt sich doch alles mit vorher definierten dynamischen Arrays wunderbar und performanter lösen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 07, 2003 17:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

wieso machst du nicht:

Code:
  1. bla: Array of Array of XYZ;


is nen 2D Dynamischer Array... ;)

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re
BeitragVerfasst: Fr Aug 08, 2003 15:14 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
Der Grund lag bei mir eigentlich darin, dass jemand, der einen ASE - Loader benutzt, möglicherweise ja seine Objekte aus mehreren ASE - Dateien lädt. Also dachte ich mir, ich erstelle pro geladener Datei ein dynamisches Array. Ansonsten müsste man jedes Objekt ans nächste popeln und irgendwann versagt die Logik und man beginnt zu verzweifeln. Mittlerweile habe ich bei BDN nachgefragt und die sagten mir, es gibt nur VarArrayCreate oder die Pointerübergabe, was heisst, dass der Benutzer seine Arrays selbst basteln muss, was wiederum auch nicht der Hit ist ... Also bleibt nur noch VarArrayCreate ... oder Assembler *gg*. Aber egal ... ich muss die ASE - Loader - Funktion eh neu schreiben, da der Parser für größere Objekte zu langsam ist.

Eine Frage nur noch zu der 3x3 - Matrix : Wenn man sich die Werte ansieht, dann kommt doch nur die Addition beider Matrizen in Frage, oder ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 08, 2003 15:19 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Warum machst du es dann nicht mit einem dynamischen Objektarray :
Code:
  1. ASEObjects : array of TASEObject;


Und lässt den Nutzer dieses in der Größe festlegen und gibst in dann in deiner Laderoutine die Möglichkeit das Ziel in das dein ASE-Objekt geladen wird zu übergeben :
Code:
  1. procedure LoadASEObject(pFileName : String;pASEObject : TASEObject);


Dann kann der User so viele ASE-Objekte laden wie er will, ohne das du dir darum irgendwelche Sorgen machen musst, z.B. so :
Code:
  1. SetLength(ASEObjects , NumASEOBjects);
  2. for i := 0 to High(ASEObjects ) do
  3.  LoadASEObject(ASEFileName[i], ASEObject[i]);  


Das dürfte dann genau dem entsprechen was du versuchst zu erreichen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 08, 2003 15:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
Ha genau das ist der springende Punkt. TASEObject als Record und schon funzt es wunderbar. Danke :D


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Google [Bot] und 19 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 16 Queries | GZIP : On ]