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

Aktuelle Zeit: Fr Jul 18, 2025 20:01

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



Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Mal wieder das liebe ASE - Format
BeitragVerfasst: Do Sep 04, 2003 17:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
Hiho ich hab folgende Probs mit dem ASE - Format (mal wieder) :

Erstmal ein kleiner Ausschnitt aus einer Renderloop :
Code:
  1.  
  2. //Objekt darstellen
  3. for i:=low(ase_vertex_array) to high(ase_vertex_array) do
  4.         begin
  5.                 glBegin(GL_TRIANGLES);
  6.                 if (DoUseMaterials = true) and (ase_file_info.num_materials >0) then begin
  7.                    glMaterialfv(GL_FRONT,GL_AMBIENT,@ase_material_info[ase_Objects[ObjectNumber-1].MATERIAL_REF].MATERIAL_AMBIENT);
  8.                 glMaterialfv(GL_FRONT,GL_DIFFUSE,@ase_material_info[ase_Objects[ObjectNumber-1].MATERIAL_REF].MATERIAL_DIFFUSE);
  9.                 glMaterialfv(GL_FRONT,GL_SPECULAR,@ase_material_info[ase_Objects[ObjectNumber-1].MATERIAL_REF].MATERIAL_SPECULAR);
  10.                 glMaterialfv(GL_FRONT,GL_SHININESS,@ase_material_info[ase_Objects[ObjectNumber-1].MATERIAL_REF].MATERIAL_SHINE);
  11.                 end;
  12.                 glVertex3f(ase_vertex_array[ase_indicies_array[i,0],vertex_array_index[ObjectNumber-1,0]],
  13.                            ase_vertex_array[ase_indicies_array[i,0],vertex_array_index[ObjectNumber-1,1]],
  14.                            ase_vertex_array[ase_indicies_array[i,0],vertex_array_index[ObjectNumber-1,2]]);
  15.                 glVertex3f(ase_vertex_array[ase_indicies_array[i,1],vertex_array_index[ObjectNumber-1,0]],
  16.                            ase_vertex_array[ase_indicies_array[i,1],vertex_array_index[ObjectNumber-1,1]],
  17.                            ase_vertex_array[ase_indicies_array[i,1],vertex_array_index[ObjectNumber-1,2]]);
  18.                 glVertex3f(ase_vertex_array[ase_indicies_array[i,2],vertex_array_index[ObjectNumber-1,0]],
  19.                            ase_vertex_array[ase_indicies_array[i,2],vertex_array_index[ObjectNumber-1,1]],
  20.                            ase_vertex_array[ase_indicies_array[i,2],vertex_array_index[ObjectNumber-1,2]]);
  21.                 glEnd;
  22.         end;
  23. glPopMatrix;

Wie man sieht, übergebe ich mittels glMaterialfv die Werte für die Materialeigenschaften. Ich habe die Funktion mittels glGetMaterialfv geprüft und es liefert die entsprechenden Werte wieder zurück. Mein Problem an dieser Renderloop ist die Materialfarbe. Ich finde leider in keiner ASE - Datei Farbwerte im RGB - Format und weis auch nicht, woher ich diese bekommen sollte. Die Objekte bleiben jedenfalls weiss.

Dann hätte ich noch eine weitere Frage ...

Erstmal ein Ausschnitt aus einer ASE - Datei :
Code:
  1. *MESH_NORMALS {
  2.             *MESH_FACENORMAL 0  0.1949  0.0388  0.9800
  3.                 *MESH_VERTEXNORMAL 4    0.4408  0.0877  0.8933
  4.                 *MESH_VERTEXNORMAL 38   0.3531  0.1463  0.9241
  5.                 *MESH_VERTEXNORMAL 6    0.1949  0.0388  0.9800
  6.             *MESH_FACENORMAL 1  0.1653  0.1104  0.9800
  7.                 *MESH_VERTEXNORMAL 38   0.3531  0.1463  0.9241
  8.                 *MESH_VERTEXNORMAL 3    0.3118  0.2801  0.9079
  9.                 *MESH_VERTEXNORMAL 7    0.1653  0.1104  0.9800


Wenn man die Normalen für das erste Face eingeben würde, wie müsste man da glNormal anwenden ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 04, 2003 17:48 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zitat:
Wie man sieht, übergebe ich mittels glMaterialfv die Werte für die Materialeigenschaften. Ich habe die Funktion mittels glGetMaterialfv geprüft und es liefert die entsprechenden Werte wieder zurück. Mein Problem an dieser Renderloop ist die Materialfarbe. Ich finde leider in keiner ASE - Datei Farbwerte im RGB - Format und weis auch nicht, woher ich diese bekommen sollte. Die Objekte bleiben jedenfalls weiss.

Die glMaterialfv-Parameter bringen dir nichts, wenn du keine Beleuchtung aktiviert hast.Deshalb wird da wohl auch nix eingefärbt.
Ansonsten kannst du ganz einfach die Ambient-Farbe via glColor3f übergeben um dein Objekt entsprechend der Materialfarbe auch ohne Beleuchtung einzufärben.

Zitat:
Wenn man die Normalen für das erste Face eingeben würde, wie müsste man da glNormal anwenden ?

Warum übergibst du die Normalen nicht per-Vertex, wenn diese so bereits in der Datei drinstehen?Per-Vertex-Normale sehen unter Beleuchtung weitaus besser aus als per-Face-Normale, und so einfach lassen sich interpolierte Vertexnormale AFAIK nicht in Face-Normale umrechnen.

P.S. : Thema verschoben.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re
BeitragVerfasst: Do Sep 04, 2003 18:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
Also ich hab jetzt die Farbwerte vorerst per glColor3f übergeben. Das mit der Beleuchtung und den Normalen muss ich mir nochmal reinziehen ... da haperts auch noch ein bisschen.

Wenn ich die Normalen per Vertex übergebe, dann müsste ich nach jedem glVertex3f das glNormal3f aufrufen, richtig ? Was bedeuten die Zahlen zwischen *MESH_VERTEXNORMAL und den Koordinaten ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Re
BeitragVerfasst: Fr Sep 05, 2003 17:12 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Alzheimer hat geschrieben:
Wenn ich die Normalen per Vertex übergebe, dann müsste ich nach jedem glVertex3f das glNormal3f aufrufen, richtig ? Was bedeuten die Zahlen zwischen *MESH_VERTEXNORMAL und den Koordinaten ?

Nein, genau umgekehrt.Zuerst die Vertexnormale an OpenGL übergeben, und dann erst das Vertex selbst.Für ein Dreieck sieht das in etwa so aus :
Code:
  1. glNormal3f(VertexNormale0);
  2. glVertex3f(Vertex0);
  3. glNormal3f(VertexNormale1);
  4. glVertex3f(Vertex1);
  5. glNormal3f(VertexNormale2);
  6. glVertex3f(Vertex2);


P.S. : Auch wenn es nicht komplett ist, könnte dir bei deinen Anstrengungen folgendes Dokument behilflich sein : http://www.solosnake.com/main/ase.htm

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Eine weitere Frage ...
BeitragVerfasst: Fr Sep 05, 2003 19:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
Das mit den Normalen hat geholfen ... Danke

Ich habe noch eine weitere Frage ...

Ich habe im ASE - Format bisher 5 verschiedene Lichter in den Speicher geladen. (Benutzt habe ich bisher immer nur eines). Es gibt Zielspotlichter, freie Spotlichter, Punktlichter, Zielrichtungslichter, freie Zielrichtungslichter. Meine Frage wäre : Kann man in OGL alle diese Lichttypen realisieren oder ist das wieder ASE - spezifisch ? (Nimmt man anstatt 3DSMax Caligari True Space her, so hat man im ASE - Format wieder 2 neue Lichttypen (habe noch nicht rausgefunden, welcher Lichttyp "Ambient Target" und "Ambient Sum Target" darstellen soll))


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 06, 2003 17:03 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Um eines vorweg zu nehmen : Die in 3D-Studio und Co. zur Verfügung gestellten Lichttypen wirst du mittels der normalen von OpenGL angebotenen per-Vertex-Beleuchtung nicht darstellen können, es sei denn du tust deine Geometrie sehr stark tesselieren.Der Grund liegt darin, das 3DSMax die Szene Raytraced, also auch Beleuchtungen per-Pixel funktionieren.Wenn du die verschiedenen Lichtquellen also 1:1 umsetzen willst, wirst du um sowas wie Lightmapping oder (besser) per-Pixel-Beleuchtung via Fragmentprogrammen nicht herumkommen.

Aber nun zu deinen verschiedenen Lichttypen.Ich hab sie mir grade mal wieder im 3D-Studio angesehen, und kann dir dazu folgendes sagen :
Zielspotlichter : Lassen sich über die OpenGL-Beleuchtung realisieren.Siehe dazu die Lichtparameter GL_SPOT_CUTOFF, GL_SPOT_DIRECTION und GL_SPOT_EXPONENT.Allerdings wirst du keinen Spot sehen, solange deine Geometrie nicht weit genug tesseliert wurde.Ein Spotlight auf ein einfaches Quad wirst du "dank" der per-Vertex-Beleuchtung nicht als solches erkennen können.
freie Spotlichter : Gleicht bis auf die Tatsache, das man hier nicht so viele Einstellungen vornehmen kann (fester Winkel zur Kamera) obigem Lichttyp.
Punktlichter : Ich gehe mal davon aus, das damit Omni-Lichtquellen gemeint sind.Wenn ja, dann entspricht das einer normalen OpenGL-Lichtquelle die in alle Richtungen strahlt (z.B. Glühbirne)
Zielrichtungslichter, freie Zielrichtungslichter : Das sind die selben Lichtquellen wie die Spotlichter, mit dem Unterschied das es hier keinen Spot-Cuttoff gibt, also anstatt einem Kegel ein Zylinder das Lichtvolumen beschreibt.Auch hier benötigst du stark tesselierte Geometrie für einen brauchbaren Effekt.

(P.S.: : Alle Angaben ohne Gewähr)

Zu den anderen Lichttypen : Das ASE-Format ist nur ein Quasi-Standarformat, das von eigentlich jedem Programm das es exportiert andere Attribute und Eigenschaften verpasst bekommt.So kann es z.B. sein das die komplette gleiche Szene nach ASE exportiert später ein anderes File hervorbringt, je nachdem mit welchem Programm sie exportiert wurde.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 07, 2003 14:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
Kennst Du ein Tutorial zur Tesselation ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 08, 2003 13:09 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Leider kenn ich kein Tut zum Thema Tesselation, und es wird da wohl auch kaum viele geben.Denn Tesselation bedeutet ja ganz "einfach", die Zahl der pro Primtive verwendeten Polygone mathematisch zu erhöhen, was darauf hinausgeht, das die ganze Szene dann oft sehr viel polygonlastiger und damit langsamer darzustellen wird.
Deshalb greift man auch zu solchen Dingen wie Per-Pixel-Lighting, da dort die Tesselation der Szene keine Rolle spielt.An deiner Stelle würde ich mich deshalb erst gar nicht damit beschäftigen, und auch die OpenGL-Beleuchtung erstmal nur für grundlegende Dinge nutzen.

P.S. : Wenn du auf ner ATI-Radeon-Karte arbeitest, dann kannst du über die Extension GL_PN_TRIANGLES_ATI (aka TRUFORM) allerdings ganz leicht tesselieren...aber da dies nur auf Radeon-Karten geht, und neuere Karten (ab Radeon9500) das sowieso nur in Software realisieren, ists keine echte Alternative.Evtl. könntest du allerdings mal nen Blick auf die glu-Tesselation werfen, die das über eine Callback-Funktion realisiert und nicht allzu schwer zu nutzen sein dürfte.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 08, 2003 13:50 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
In GLScene ist so etwas auch eingebaut. Evtl. kannst du dir da inspirationen holen. ;)

Aber wie man auch schön auf dem Bild sieht lohnt es kaum einen solchen Aufwand zu betreiben, wenn der qualitative "Gewinn" nur so gering ausfällt.
Bild


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

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
Ich werds mir mal reinziehen ... Danke für die Hilfe :D

Jetzt hab ich noch eine Frage zu den Texturkoordinaten im ASE - Format : Wie hängen die Koords zusammen ?
Code:
  1. *MESH_NUMTVERTEX 12
  2.         *MESH_TVERTLIST {
  3.             *MESH_TVERT 0   0.0000  0.0000  0.0000
  4.             *MESH_TVERT 1   1.0000  0.0000  0.0000
  5.             *MESH_TVERT 2   0.0000  1.0000  0.0000
  6.             *MESH_TVERT 3   1.0000  1.0000  0.0000
  7.             *MESH_TVERT 4   0.0000  0.0000  0.0000
  8.             *MESH_TVERT 5   1.0000  0.0000  0.0000
  9.             *MESH_TVERT 6   0.0000  1.0000  0.0000
  10.             *MESH_TVERT 7   1.0000  1.0000  0.0000
  11.             *MESH_TVERT 8   0.0000  0.0000  0.0000
  12.             *MESH_TVERT 9   1.0000  0.0000  0.0000
  13.             *MESH_TVERT 10  0.0000  1.0000  0.0000
  14.             *MESH_TVERT 11  1.0000  1.0000  0.0000
  15.         }
  16.         *MESH_NUMTVFACES 12
  17.         *MESH_TFACELIST {
  18.             *MESH_TFACE 0   9   11  10
  19.             *MESH_TFACE 1   10  8   9
  20.             *MESH_TFACE 2   8   9   11
  21.             *MESH_TFACE 3   11  10  8
  22.             *MESH_TFACE 4   4   5   7
  23.             *MESH_TFACE 5   7   6   4
  24.             *MESH_TFACE 6   0   1   3
  25.             *MESH_TFACE 7   3   2   0
  26.             *MESH_TFACE 8   4   5   7
  27.             *MESH_TFACE 9   7   6   4
  28.             *MESH_TFACE 10  0   1   3
  29.             *MESH_TFACE 11  3   2   0

Ich habs zwar schonmal probiert, aber da kam die Textur "verdreht" raus.
1.) War mein Gedanke richtig, dass in diesem Beispiel hier die Texkoords für das erste Face aus den Vertex 9,11 und 10 bestehen ?
2.) Habe ich mit der Funktion glTexcoord3f(s,t,r) die richtige verwendet ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 08, 2003 14:56 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Alzheimer hat geschrieben:
1.) War mein Gedanke richtig, dass in diesem Beispiel hier die Texkoords für das erste Face aus den Vertex 9,11 und 10 bestehen ?

Ja, das ist korrekt.Das geht mit den Texturkoordinaten genauso wie mit dern Vertices.

Alzheimer hat geschrieben:
2.) Habe ich mit der Funktion glTexcoord3f(s,t,r) die richtige verwendet ?

Du musst die Texturkoordinaten per-Vertex mittels glTexcoord2f übergeben, ungefähr so :
Code:
  1. glTexcoord2f(s1,t1); glVertex3fv(@MyVertex1);
  2. glTexcoord2f(s2,t2); glVertex3fv(@MyVertex2);

Die dritte Koordinaten ist die W-Koordinate, und eigentlich nie (oder nur sehr selten) verwendet, weshalb du diese nicht benötigst.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 08, 2003 14:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Alzheimer hat geschrieben:
1.) War mein Gedanke richtig, dass in diesem Beispiel hier die Texkoords für das erste Face aus den Vertex 9,11 und 10 bestehen ?

Ja, das ist korrekt.Das geht mit den Texturkoordinaten genauso wie mit dem Vertices.

Alzheimer hat geschrieben:
2.) Habe ich mit der Funktion glTexcoord3f(s,t,r) die richtige verwendet ?

Du musst die Texturkoordinaten per-Vertex mittels glTexcoord2f übergeben, ungefähr so :
Code:
  1. glTexcoord2f(s1,t1); glVertex3fv(@MyVertex1);
  2. glTexcoord2f(s2,t2); glVertex3fv(@MyVertex2);

Die dritte Koordinaten ist die W-Koordinate, und wird eigentlich nie (oder nur sehr selten) verwendet, weshalb du diese nicht benötigst.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 09, 2003 14:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
Ich hab das ganze mit den Texturkoordinaten jetzt nochmal probiert und das Ergebnis ist allerdings das selbe wie vorher ...

Irgendwie mache ich einen Fehler in der Reihenfolge und komm nicht drauf, denn meiner Meinung nach ist es richtig, die Texturkoordinaten faceweise abzuarbeiten. Das Ergebnis sieht dann aber aus wie im Bild.
Da ich mir keinen Rat mehr weis, hab ich den Sourcecode mit dran gehängt und würde mich freuen, wenn jemand den Fehler findet ... oder auf Anhieb weis, woher das kommt ...


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 09, 2003 14:37 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
In meinem ASE-Loader klappt das wunderbar.Du hast doch für jedes Face deines Meshes auch ein Texturkoordinaten-Face.TFace0 gehört dann zu TFace1, und wenn du die Koordinaten korrekt übergibst (also per-Vertex) sollte das eigentlich einwandfrei funzen.

Und eigentlich wollt ich mir auch mal deinen Quellcode ansehen, allerdings hast du denn Quellcode für die wichtigste Unit (dgl_ase_loader.pas) nicht mit ins ZIP gepackt, weshalb daraus nichts wird.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 09, 2003 14:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
OOOPS :oops:
Jetzt muss aber alles drinnen sein ... tschuldigung


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


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


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 2 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.038s | 16 Queries | GZIP : On ]