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

Aktuelle Zeit: Mo Jul 28, 2025 21:59

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



Ein neues Thema erstellen Auf das Thema antworten  [ 75 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 20, 2005 16:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
@Flash: Lossy. Wie verlustbehaftet. ;-)

@CubeMaps: Gar nicht!

Also mit Cubemaps kenne ich mich nicht aus. Natürlich habe ich das beim Designen der Klassen dann auch nicht berücksichtigt. Und momentan ist es einfach so, dass das TexturTarget zum Generieren und zum Hochladen der Bilder verwendet wird. Aber wenn ich das richtig gesehen habe, dann sind das Bind und das TexImage 2 Unterschiedliche Targets. Abgesehen davon benötigen wir 6 Komplett getrennte Bilder. Entweder über 6 eigenständige Klassen die aber irgendwie wissen müssen woran sie sich heften dürfen oder über eine Klasse die die 6 Bilder beinhält. Und dazu bräuchte ich 6 getrennte Speicherbereiche. Und logischerweise habe ich das auch nicht mit bedacht. Ich werde mir da aber auf jeden Fall mal nen Kopf machen wie man das am Besten umsetzten kann. Für kreative Vorschläge bin ich aber jederzeit offen. ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 20, 2005 19:08 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Machs doch einfach so, dass wenn man bei der glBitmap2D als Target die CubeMap angibt, man beim Laden der Textur eine der 6 Ziele angeben muss (extra parameter Standardwert GL_FALSE). Denn bei den Texparametern, ruft man ja immer noch GL_TEXTURE_2D auf. Deshalb die Verwandschaft. Aber du grigst das bestimmt auch eleganter hin. 8)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 20, 2005 22:11 
Offline
DGL Member

Registriert: Mi Apr 13, 2005 16:06
Beiträge: 67
Wohnort: Fulda
Lossy eX hat geschrieben:
Also mit Cubemaps kenne ich mich nicht aus. Natürlich habe ich das beim Designen der Klassen dann auch nicht berücksichtigt. Und momentan ist es einfach so, dass das TexturTarget zum Generieren und zum Hochladen der Bilder verwendet wird. Aber wenn ich das richtig gesehen habe, dann sind das Bind und das TexImage 2 Unterschiedliche Targets. Abgesehen davon benötigen wir 6 Komplett getrennte Bilder. Entweder über 6 eigenständige Klassen die aber irgendwie wissen müssen woran sie sich heften dürfen oder über eine Klasse die die 6 Bilder beinhält. Und dazu bräuchte ich 6 getrennte Speicherbereiche. Und logischerweise habe ich das auch nicht mit bedacht. Ich werde mir da aber auf jeden Fall mal nen Kopf machen wie man das am Besten umsetzten kann. Für kreative Vorschläge bin ich aber jederzeit offen. ;-)


Dass die 6 Bilder komplett getrennt sind, stimmt so nicht ganz. Und 6 eigenständige Klassen würden (soweit meine bescheidene Meinung ;)) auf keinen Fall funktionieren.
Auch brauchst du nicht eine Klasse, die 6 Bilder beinhaltet, sondern eine Klasse, die nacheinander 6 Bilder in die selbe Textur lädt. Ein Speicherbereich würde vollkommen ausreichen, da du ihn nach jedem Ladevorgang wieder freigeben und neu nutzen kannst.

Das Problem bei der textures.pas wie auch bei der glBitmap.pas ist, dass die beiden Vorgänge Binden und Bilddaten laden (glBindTexture und glBitmap2D) immer mit demselben Target durchgeführt werden und auch nicht getrennt voneinander angesprochen werden können (was ja auch auf Grundlage des eigentlichen Verwendungszwecks (nämlich Texturen <> Cubemap) überhaupt nicht nötig ist.

Ich könnte mir folgendes vorstellen:

Du schreibst eine Basisklasse für den Loader.
Ein Nachfolger dieser Klasse ist genau die Klasse, die jetzt auch in der glBitmap vorhanden ist. D.h. eine Klasse zum Laden und Verwenden von 1D-, 2D- oder 3D-Texturen.
Ein weiterer Nachfolger dieser Klasse wird eine Klasse allein für Cubemaps. Dabei wird hier unterschieden zwischen Textur erstellen und Bild laden. Etwa so:

Code:
  1.  
  2. Cube: TglCubemapTexture;
  3.  
  4. // Erstellen der Textur
  5. Cube := TglCubemapTexture.Create;
  6. Cube.CreateCubemap(hier Parameter wie Filterung etc.)
  7.  
  8. // Laden der 6 Bilder
  9. Cube.Filenames := @FilenameArray; // Array mit den 6 Dateinamen
  10. Cube.LoadCubemap;
  11.  


Das ganze könnte man natürlich auch in einer Methode zusammenfassen, die dann entsprechend mehr Parameter erhält. Auch TglCubemapTexture.Create und TglCubemapTexture.CreateCubemap könnte verbunden werden.

In den Methoden zum Erstellen der Textur befänden sich prinzipiell folgende Aufrufe:
Code:
  1.  
  2. Cube := glGenTextures(1);
  3. glBindTexture(GL_TEXTURE_CUBE_MAP, @Cube);
  4. glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_MAG_FILTER, GL_LINEAR)
  5. usw.
  6.  


Während in der Methode zum Laden der Cubemap (nach Übergeben der 6 Dateinamen) folgendes stünde (während die oben erstellte Textur immer noch gebunden ist, sonst gehts ja nicht):
Code:
  1.  
  2. for i := 0 to 5 do
  3. begin
  4.   TexData := LoadImage(i); // Bild i in den Speicher laden => Entscheidung ob bmp, jpg, png und entsprechendes Laden
  5.   glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, ..., @TexData)
  6. end;
  7.  


Schlussendlich kann dann noch die automatische Texturgenerierung und das Cubemapping selbst angeschaltet werden, was ich persönlich allerdings nicht mit in die Klasse packen würde.

Die Verwendung einer gemeinsamen Basisklasse hätte den Vorteil, dass zum Beispiel Methoden wie Bind, Free u.ä. benutzt werden können, ohne zwischen Cubemap oder normaler Textur unterscheiden zu müssen. Ein Array vom Typ der Basisklasse könnte also beliebige Kombinationen von normalen Texturen und Cubemaps aufnehmen, die, wenn sie erstmal geladen sind, alle gleich behandelt werden können. Dies würde zum Beispiel den Einsatz in einer Texturverwaltung eines größeren Programms vereinfachen.

So, ich hoffe dass ich keine Denkfehler in die ganze Sache gepackt habe und das ganze auch wirklich so funktionieren kann.

Schön wäre so eine Klasse auf jeden Fall, da sowohl die textures als auch die glBitmap so wie sie sind einfach nicht für Cubemaps benutzt werden können. Dieser Umstand zwang mich bei meinen Cubemap-Gehversuchen dazu, erstmal mit der glaux zu arbeiten.

@Flash: Auch bei den Texturparametern wird nicht GL_TEXTURE_2D sondern GL_TEXTURE_CUBE_MAP verwendet.

Robert


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 21, 2005 08:01 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Bei den 6 eigenständigen Klassen hätte man das Riesenproblem wie man sie miteinder verbunden bekommt. Aber ich hatte auch schon mit dem gedanken gespielt, dass ich um eine neue Ableitung nicht drumherum komme. Was eigentlich auch gar nicht verkehrt ist.

Aber Robert. In der glBitmap habe ich bereits eine Basisklasse und jeweils eine Ableitung für 1D und 2D. ;-) Da werde ich wohl noch eine für Cubemaps machen. Allerdings wird die dann wohl auf der 2D Klasse basieren. Will das Rad ja nicht doppelt implementieren.

Das mit dem Array von Dateinamen finde ich nicht gut, da mein Loader nun mal überhaupt nichts mit Dateinamen anfängt und mir so etwas eine menge Flexibilität nimmt. Ich denke mal, dass ich es so gestallten werde, dass man ganz normal die Textur erzeugen kann und wenn ein Teilbild fertig ist, dann ruft man GenerateCubeMap auf und er lädt das ein Teilstück hoch. So bleiben mir noch alle Features erhalten die ich bisher implementiert habe. Also die Funktionsschnittstelle. Ich denke auch mal, dass ich eine (oder zwei) Procedure(n) implementieren werde die 6 Dateinamen übergeben bekommt und entweder die TexturID oder die Klasse zurückliefern wird. Um den Schreibaufwand ein wenig einzuschränken.

Aber auf jeden Fall danke für die Anregungen. Die haben mich auf den richtigen Weg gebracht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 21, 2005 08:10 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@Robert: Ich hab mich daran gehalt:

LarsMiddendorf hat geschrieben:
Code:
  1.  
  2. glGenTextures(1,@texid);
  3. glBindTexture(GL_TEXTURE_CUBE_MAP,texid);
  4. glTexParameteri(gl_texture_2d, GL_GENERATE_MIPMAP_SGIS, GL_TRUE);
  5. glTexParameteri(gl_texture_2d, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
  6. glTexParameteri(gl_texture_2d, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  7.  
  8. for i:=0 to 5 do
  9. begin
  10.   glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB+i,0,GL_RGBA8,0,cubemapfile[i]);
  11. end;
  12.  

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 21, 2005 11:18 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Ja das ist natürlich ein Tipfehler bzw. eher STRG+C Fehler gewesen. Da es hier aber überhaupt nicht um 2D Texturen geht, ist ja klar, dass bei den Parametern auch gl_texture_cube_map hin muß. Also überall wo es um die ganze Texture geht gl_texure_cube_map und bei den einzelnen Seiten dann eben die entsprechende Konstante.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 21, 2005 13:29 
Offline
DGL Member

Registriert: Mi Apr 13, 2005 16:06
Beiträge: 67
Wohnort: Fulda
Lossy eX hat geschrieben:
Aber Robert. In der glBitmap habe ich bereits eine Basisklasse und jeweils eine Ableitung für 1D und 2D. ;-) Da werde ich wohl noch eine für Cubemaps machen. Allerdings wird die dann wohl auf der 2D Klasse basieren. Will das Rad ja nicht doppelt implementieren.


Hmm, dass die glBitmap schon auf einer Basisklasse aufbaut, wusste ich nicht. Jetzt wo du's sagst fällt mir aber wieder ein, dass ich beim Durchsehen der Unit eine Basisklasse plus Ableitungen gefunden hab... Ja ja, der Kalk rieselt schon... :mrgreen:
Ist aber umso besser dass das ganze schon so aufgebaut ist, da ist eine weitere Ableitung ja nicht mehr problematisch.

Deinen Ansatz mit den Dateinamen finde ich gut so! Ob ich jetzt die Dateinamen in einem Array übergebe oder über ne Schleife 6 Aufrufe mache, ist ja kein großer Unterschied.

Freue mich schon auf den neuen Loader!! ;)

Robert


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 21, 2005 18:22 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hab gerade folgendes versucht.

Code:
  1. procedure TForm1.Init;
  2. var i : integer;
  3. begin
  4.   GLError:= GL_NO_ERROR;
  5.   Q      := gluNewQuadric;
  6.  
  7.   //------------------------------------------ Cube Map ------------------------------------------
  8.  
  9.   for i := 0 to 5 do
  10.       begin
  11.            // Daten laden
  12.            CubeMap[i] := TGLBitmap2D.Create;
  13.            CubeMap[i].LoadFromFile(CubeMapFileName[i]);
  14.       end;
  15.  
  16.   //CubeMap Container erstellen
  17.   glGenTextures(1,@CubeMapName);
  18.   glBindTexture(GL_TEXTURE_CUBE_MAP,CubeMapName);
  19.  
  20.  
  21.   //Daten der Cubemap zuweisen
  22.   for i := 0 to 5 do
  23.       begin
  24.            glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB+i,
  25.                         0,
  26.                         GL_RGBA8,
  27.                         CubeMap[i].Width, CubeMap[i].Height, 0,
  28.                         GL_BGR_EXT, GL_UNSIGNED_BYTE,
  29.                         PByte(CubeMap[i].GetData));
  30.       end;
  31.  
  32.   glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  33.   glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  34.  
  35.   glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_ARB);
  36.   glTexGenf(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_ARB);
  37.   glTexGenf(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_ARB);
  38.   glEnable(GL_TEXTURE_GEN_S);
  39.   glEnable(GL_TEXTURE_GEN_T);
  40.   glEnable(GL_TEXTURE_GEN_R);
  41.   glEnable(GL_TEXTURE_CUBE_MAP_ARB);
  42. end;


Code:
  1. procedure TForm1.Render;
  2. var i : integer;
  3. begin
  4. //
  5.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  6.  
  7.   glMatrixMode(GL_PROJECTION);
  8.   glLoadIdentity;
  9.   gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  10.  
  11.   glTranslatef(0, 0, -5);
  12.   glRotatef(0.360 * TimeCount,1,1,0);
  13.  
  14.   glMatrixMode(GL_MODELVIEW);
  15.   glLoadIdentity;
  16.  
  17.   glbindTexture(GL_TEXTURE_CUBE_MAP, CubeMapName);
  18.  
  19.   gluQuadricTexture(Q,true);
  20.   gluQuadricNormals(Q,GLU_SMOOTH);
  21.   gluCylinder(Q,1,1,1, 24,24);
  22.  
  23.   SwapBuffers(DC);
  24. end;


Könnt ihr mir sagen wieso das net geht? Keine OpenGL Fehler aber auch keine CubeMap :(
Ich benutze Losseys 2D-Klassen nur als Datenspeicher wie ihr seht. Der Rest sollte doch so gängig sein....Oder :?:

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 21, 2005 18:26 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Eventuell liegt es daran, dass keine Mipmaps erstellt wurden, aber Mipmapping an. Ich meine der Standardwert für den gl_texture_min_filter wäre gl_nearest_mipmap_linear.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 21, 2005 18:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Japp. Kann ich nur zustimmen. Das liegt in der Tat daran. Schau dir mal im loader die Methode GenTexture an. Da frage ich expliziet ab ob MipMaps an sind oder nicht und dann stelle ich die entsprechend um. GluBuiödMipsMaps funktioniert im übrigen bei CubeMaps auch nicht. ;-) Dann musst du so etwas nehmen wie sgis_generate_mip_maps.

Werde aber morgen mal was hochladen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 21, 2005 18:58 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Das gluBuild2DMipmaps funktioniert auch mit Cubemaps. Man kann da ja auch einen Target Parameter angeben. Aber heutzutage ist dieses sgis_generate_mip_maps ja schneller und daher besteht gar kein Bedarf mehr an der alten Funktion. Das muß man nur setzen bevor man die Texture lädt. Alternativ kann man auch mittels GenerateMipmapEXT aus der neue Framebuffer Object Extension verwenden um jederzeit Mipmaps zu erzeugen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 21, 2005 19:04 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hmmm. Merkwürdig. Bei mir lieferte gluBuildMipMaps ne AccessViolation. Und zwar bei sonst 100%tig funktionierendem Code. Da war lediglich das Target anders.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 21, 2005 20:26 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wie kann ich MipMaps auschalten? glDisable(GL_MIPMAP) gibts ja net.
Bzw. würde es dann noch gehn?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 21, 2005 20:34 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
glTexParameteri(gl_texture_2d, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(gl_texture_2d, GL_TEXTURE_MAG_FILTER, GL_LINEAR);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 22, 2005 13:31 
Offline
DGL Member

Registriert: Mi Apr 13, 2005 16:06
Beiträge: 67
Wohnort: Fulda
LarsMiddendorf hat geschrieben:
Das gluBuild2DMipmaps funktioniert auch mit Cubemaps. Man kann da ja auch einen Target Parameter angeben. Aber heutzutage ist dieses sgis_generate_mip_maps ja schneller und daher besteht gar kein Bedarf mehr an der alten Funktion. Das muß man nur setzen bevor man die Texture lädt. Alternativ kann man auch mittels GenerateMipmapEXT aus der neue Framebuffer Object Extension verwenden um jederzeit Mipmaps zu erzeugen.


Kann mich mal jemand aufklären, was dieses genau sgis_genarate_mip_maps ist und wie man es benutzt? Im Wiki hab ich nichts dazu gefunden, kannte bisher auch nur die gluBuildMipmaps-Funktionen.

Vielen Dank schonmal!

Robert


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


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.018s | 15 Queries | GZIP : On ]