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

Aktuelle Zeit: Mo Jul 28, 2025 21:54

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



Ein neues Thema erstellen Auf das Thema antworten  [ 75 Beiträge ]  Gehe zu Seite 1, 2, 3, 4, 5  Nächste
Autor Nachricht
 Betreff des Beitrags: Cubemap-Tutorial
BeitragVerfasst: Mi Apr 13, 2005 22:13 
Offline
DGL Member

Registriert: Mi Apr 13, 2005 16:06
Beiträge: 67
Wohnort: Fulda
Hallo zusammen!

Erstmal möchte ich mich bei allen, die zum Entstehen dieser Seiten beigetragen haben (seien es die Tuts, das Forum oder das Wiki), für das tolle "Wissensportal" rund um OpenGL bedanken, das hier geschaffen wurde.

Ich selbst kam schon vor einiger Zeit über diese Seite zu OpenGL mit Delphi, habe mich allerdings damals nicht wirklich intensiv und ausführlich damit beschäftigt.
Da ich für eine Delphi-Anwendung (oder besser gesagt die Idee einer Anwendung, die Ausführung starb erstmal wegen Prioritätenverteilung zugunsten OGL) kürzlich gerne OpenGL zur Visualisierung genutzt hätte, mein Wissen aber einfach zu rudimentär war, bin ich inzwischen dabei, mich wirklich intensiv mit OGL zu beschäftigen.
Und zusammen mit dem aktuellen Redbook (1.4) ist diese Seite DER Einstiegspunkt dafür!

Soviel zur Vorgeschichte. ;)

Ich habe ein Problem mit dem Cubemap-Tutorial:
Und zwar scheint dort allem Anschein nach die Cubemap in ein Array mit 6 Texturen abgelegt zu sein. Dies schließe ich jedenfalls aus folgendem Aufruf:

Code:
  1.  
  2. for i := 0 to 5 do
  3.   begin
  4.   Target := GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB+i;
  5.   LoadTexture(CubeMapFileName[i],Cubemap[i], False, GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, False);
  6.  end;


Des weiteren schreibt Sascha, dass Target in die textures.pas von Jan Horn eingefügt wurde, da dort bisher nur das Laden von 2D-Texturen möglich war.

Meine Behauptung: Das kann so doch gar nicht funktionieren (was es bei mir auch nicht tut).
Meines Wissens besteht eine Cubemap aus genau einem (nicht sechs) Texturobjekt, an das die sechs Seiten der Cubemap einzeln mit glTexImage2D übergeben werden.
Das Beispiel im Tut erzeugt jedoch mit LoadTexture aus der textures.pas bei jedem Aufruf eine eigene, also insgesamt sechs Texturen.

Richtig wäre demnach (der Code funktioniert bei mir):
Code:
  1.  
  2. var
  3.   TexData: Pointer;
  4. begin
  5.   glGenTextures(1, @cubemap);
  6.   glBindTexture(GL_TEXTURE_CUBE_MAP, cubemap);
  7.  
  8.   for i := 0 to 5 do
  9.   begin
  10.     // CubemapBild Nummer i in TexData laden
  11.     glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 3,sizeX, sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TexData);
  12.   end;
  13. end;
  14.  


Da ich keinen Sourcecode zu dem Tutorial gefunden habe, konnte ich natürlich nicht überprüfen, ob es so doch irgendwie geht, aber wie gesagt: Bei mir hat diese Methode nicht funktioniert (falls ich sie nicht vollkommen falsch verstanden haben sollte, was ich allerdings nicht glaube).

Gruß,
Robert


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 13, 2005 22:29 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Das zweite Beispiel ist auf jeden Fall richtig. Wie genau Jan Horns Texture Unit funktioniert, weiß ich nicht. Cubemaps haben aber nur ein Textureobjekt und man unterscheidet zwischen den Seiten anhand des Target Parameters.


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

Registriert: Mi Apr 13, 2005 16:06
Beiträge: 67
Wohnort: Fulda
LarsMiddendorf hat geschrieben:
Das zweite Beispiel ist auf jeden Fall richtig. Wie genau Jan Horns Texture Unit funktioniert, weiß ich nicht. Cubemaps haben aber nur ein Textureobjekt und man unterscheidet zwischen den Seiten anhand des Target Parameters.


Nun, die Funktion LoadTexture aus Jan Horns textures.pas nimmt als Parameter den Dateinamen einer Textur und gibt über einen Variablenparameter ein Texturobjekt zurück, in welches das Bild im Dateinamen abgelegt wurde. Fakt ist auf jeden Fall, dass ein Aufruf von LoadTexture ein neues Texturobjekt erzeugt.

Im Tutorial wird LoadTexture nun in der Schleife sechs mal aufgerufen, was zu 6 unabhängigen Texturobjekten führen muss und daher nicht funktionieren kann.

Der Code im Tutorial ist also entweder schlichtweg fehlerhaft oder (wenn die textures.pas so umgebaut wurde, dass es doch funktioniert) zumindest irreführend, da niemand, der den Originalquelltext (welchen ich nirgends gefunden habe) nicht einsehen kann, nicht versteht, wie denn so eine Cubemap nun geladen wird und warum das Tut im Endeffekt nicht funktioniert.

Gruß,
Robert


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

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das sollte man dann infolge des Qualitätsoffensive auch nochmal auf die Todo Liste setzen. (Ob der Fehler von Sascha wohl absichtlich eingebaut wurde um Feedback zu erzeugen ;) )
Der der sich darum kümmert (ich hoffe Magellan ist net allein) kann das ja mal vermerken.


PS: Ich hab mich schon gewundert wer der neue Wikischreiber war 8)

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


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

Registriert: Mi Apr 13, 2005 16:06
Beiträge: 67
Wohnort: Fulda
Flash hat geschrieben:
Ob der Fehler von Sascha wohl absichtlich eingebaut wurde um Feedback zu erzeugen ;)


Ich frage mich vor allem, warum der Fehler scheinbar noch nicht gefunden wurde. Denn soweit ich mich erinnern kann, gibts das Tut schon ziemlich lange.


Flash hat geschrieben:
PS: Ich hab mich schon gewundert wer der neue Wikischreiber war 8)


Jep, das war ich. :)
glGenTextures stand ziemlich weit oben in der Liste gewünschter Artikel und war nicht so schwer zu beschreiben, deshalb hab ich mir das mal vorgeknöpft.
Werde mich bemühen, weiterhin auch am Wiki mitzuarbeiten, auch wenn ich im Moment ein wenig im Stress bin in Sachen Abitur. Also nicht gleich Wunderwerke erwarten! ;)

Robert


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

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Allein der Ansatz ist genau richtig. Niemand erwartet hier , dass jemand das WIKI alleine schreibt, aber hin und wider mal ein Artikelchen ... das wär schon ne dolle Sache. ;)

Hier kannste ja mal noch deine Stimme abgeben: http://www.delphigl.com/forum/viewtopic.php?t=3905

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 19, 2005 21:21 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich glaub es kann trotzdem gehn. Wenn man die CubeMap wie im Tutorial erzeugt:
Code:
  1.   for i := 0 to 5 do
  2.       begin
  3.            CubeMap[i] := TGLBitmap2D.Create;
  4.            CubeMap[i].TextureTarget := GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB+i;
  5.            CubeMap[i].LoadFromFile(CubeMapFileName[i]);
  6.            glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  7.            glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  8.       end;
  9.  
  10.   glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_ARB);
  11.   glTexGenf(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_ARB);
  12.   glTexGenf(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_ARB);
  13.   glEnable(GL_TEXTURE_GEN_S);
  14.   glEnable(GL_TEXTURE_GEN_T);
  15.   glEnable(GL_TEXTURE_GEN_R);
  16.   glEnable(GL_TEXTURE_CUBE_MAP_ARB);


müsste man doch nur vor dem zeichnen folgendes machen:
Code:
  1.   for i := 0 to 5 do
  2.       CubeMap[i].Bind;
  3.   gluCylinder(Q,1,1,1, 24,24);


Oder irr ich mich hier?

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


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

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Anscheinend ist das doch noch net gängig. Beim Aufruf von Bind grig ich ne AccesViolation. :? Geklärt.

Es funktioniert noch nicht. Es kommt zwar kein Fehler und auch sonst nix böses, aber die Cubemap seh ich trotzdem net. Könnte eventuell daran liegen, dass ich mit Quadriken arbeite. Hier mal mein Rendercode:
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(30,1,1,0);
  13.  
  14.   glMatrixMode(GL_MODELVIEW);
  15.   glLoadIdentity;
  16.  
  17.   for i := 0 to 5 do
  18.       CubeMap[i].Bind(false);
  19.  
  20.   gluQuadricTexture(Q,true);
  21.   gluQuadricNormals(Q,GLU_SMOOTH);
  22.   gluCylinder(Q,1,1,1, 24,24);
  23.  
  24.   SwapBuffers(DC);
  25. end;


Die Frage stellt sich jetzt, warum die Map nicht gemappt wird.

PS: Sind die ganzen Konstanten im Kern verfügbar? In der DGLOpenGL stehn Sie ja schon drinnen (ohne _ARB).

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


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

Registriert: Mi Apr 13, 2005 16:06
Beiträge: 67
Wohnort: Fulda
Flash hat geschrieben:
müsste man doch nur vor dem zeichnen folgendes machen:
Code:
  1.   for i := 0 to 5 do
  2.       CubeMap[i].Bind;
  3.   gluCylinder(Q,1,1,1, 24,24);


Oder irr ich mich hier?


Damit ist doch beim Aufruf von gluCylinder(Q,1,1,1,24,24); nur die Textur CubeMap[5] aktiv, also nur eine Seite der Cubemap. Kann mir nicht vorstellen, dass das geht.

Außerdem wird mit dem Aufruf

Code:
  1.  
  2. CubeMap[i].TextureTarget := GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB+i;
  3. CubeMap[i].LoadFromFile(CubeMapFileName[i]);


glBindTexture mit dem Target GL_TEXTURE_CUBE_MAP_POSITIV_X_ARB+i aufgerufen, was keine dafür gültige Konstante ist. glBindTexture erwartet als Target GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D oder GL_TEXTURE_CUBE_MAP. die anderen Konstanten werden erst dann benötigt, wenn über glTexImage2D die Bilddaten der Textur bestimmt werden.

Bin also immer noch der Meinung, dass das nicht funktionieren kann.

Robert


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 20, 2005 09:57 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Das stimmt. Beim Binden der Cubemap gibt man GL_TEXTURE_CUBE_MAP an und die Cubemap besteht aus alles sechs Seiten, die nicht einzeln gebunden werden können. Bei glTexImage2D nimmt man hingegen die Seite der Cube Map.


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

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Und wie ladt ich dann die 6 Texturen in die Cubemap. Anscheinend ist das Tutorial ja wirklich richtig falsch(!). :shock:

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 20, 2005 14:24 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Unter .Net geht es so. Da kann man bei glTexImage2D direkt den Dateinamen angeben, aber es sollte auch leicht übertragbar sein. Wie es mit der textures.pas geht, weiß ich nicht.

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.  


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

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
die Textures verwende ich nicht. Ich bin gleich zur glBitmap aufgestiegen ;) .

Hm....werds mal ausprobieren.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 20, 2005 14:30 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Kann man bei glBitmap eigentlich direkt das Texture Target angeben oder Cubemaps in einem Rutsch laden?


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

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Du kannst bei den einzelnen Klassen ein Target angeben. Wie das mit Cubemaps funktioniert könnte Lossey ja mal hier vermelden.

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


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 1, 2, 3, 4, 5  Nächste
Foren-Übersicht » DGL » Feedback


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder 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.011s | 14 Queries | GZIP : On ]