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

Aktuelle Zeit: Mi Apr 24, 2024 07:26

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Skybox/Cubemap-Unschönheiten
BeitragVerfasst: Do Mai 09, 2013 13:29 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Hallo Leute,
ich habe mich gestern mit Skyboxen, Skyspheren etc. und environmentmapping beschäftigt.
Da die Skybox und das Environment Mapping per Cubemap den anderen Methoden vielerorts als überlegen beschrieben wurde, hab ich mich dafür entschieden.
Zwar hab ich jetzt das ganze zum laufen gebracht,

aber erstens:
Es sind noch ein paar Fehlerchen drin:
-Skyboxkanten sind leicht sichtbar, als schwarze dünnee Striche an den Kanten, sichtbarkeit anhängig von Blickwinkel.
-An den selben Stellen sind auf der Cubemap, die auf reflektierte Objekte projiziert wird rote, gut sichtbare, also etwas dickere Striche zu sehen.
-Die obere Cubemaptextur hat diesen roten Strich in der Mitte und das letzte Viertel fehlt.
Was haben diese roten Striche zu bedeuten?

und zweitens:
Ich bin sehr unzufrieden mit der Methode:
-Beim drehen der Kamera, finde ich, sieht man sehr gut das man sich in einer Box befindet.
-Die Cubemap ist deutlich verpixelter als die ursprünglichen Texturen, mit denen auch die Skybox gezeichnet wird.
Gibt es eine Methode, mit der man verlustfrei Texturen reflektiert reflektieren lassen kann und wo man nicht diese perspektivische Verzerrung des Himmels hat?
Es geht mir (momentan) nur darum den Himmel reflektieren zu lassen.

Grüße
VinZ

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Skybox/Cubemap-Unschönheiten
BeitragVerfasst: Do Mai 09, 2013 16:09 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Vinz hat geschrieben:
-Skyboxkanten sind leicht sichtbar, als schwarze dünnee Striche an den Kanten, sichtbarkeit anhängig von Blickwinkel.

Welchen Wrapmodus hast du für die Texturen gesetzt. Sichtbare Kanten deuten hier auf den falschen (GL_REPEAT?) hin, hier müsste dann ein passender Clamp-Modus gesetzt werden. Also z.B. GL_CLAMP_TO_EDGE.

Vinz hat geschrieben:
-An den selben Stellen sind auf der Cubemap, die auf reflektierte Objekte projiziert wird rote, gut sichtbare, also etwas dickere Striche zu sehen.
-Die obere Cubemaptextur hat diesen roten Strich in der Mitte und das letzte Viertel fehlt.
Was haben diese roten Striche zu bedeuten?

Wird die Cubemap korrekt geladen? Mit einem korrekten Wrapmodus sollte sowas nicht vorkommen. Wie sieht die Clear-Color aus? Wechsel die mal und schau ob die dann durchscheint.

Vinz hat geschrieben:
-Beim drehen der Kamera, finde ich, sieht man sehr gut das man sich in einer Box befindet.

Dann sind die Texturen nicht gut. Wenn die korrekt erzeugt werden merkt man optisch nicht dass man sich in einer Box befindet. Nutze dass ja z.B. für den Weltraumhintergrund in meinem aktuellen Titel, und da merkt man nichts von einer Box.

Vinz hat geschrieben:
-Die Cubemap ist deutlich verpixelter als die ursprünglichen Texturen, mit denen auch die Skybox gezeichnet wird.
Gibt es eine Methode, mit der man verlustfrei Texturen reflektiert reflektieren lassen kann und wo man nicht diese perspektivische Verzerrung des Himmels hat?
Es geht mir (momentan) nur darum den Himmel reflektieren zu lassen.

Wie implementierst du die Reflektionen? Ich tippe mal auf Render-To-Texture (z.B. via FBO). Hier muss man dann halt entsprechend die Texturengröße erhöhen, wobei man hier dann halt einen Mittelpunkt zwischen Texturengröße und Performance (und ggf. Speicherverbrauch) finden muss.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Skybox/Cubemap-Unschönheiten
BeitragVerfasst: Do Mai 09, 2013 19:02 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Danke für die Tipps,
jetzt klappt alles.
Cubemap wirkte pixelig weil, min- und mag-Filter auf nearest gestellt waren.

Für alle nach ähnlichen Problemen Suchenden, hier der Code, der bei mir die CubeMap vernünftig erzeugt:

Code:
  1.  
  2.  
  3.    const short cm_count = 6;
  4.    const int cm_size = 512;
  5.    unsigned char *pixels[cm_count];
  6.    const char *cm_names[cm_count] =
  7.     {"xneg.png", "xpos.png", "yneg.png", "ypos2.png", "zneg.png", "zpos.png"};
  8.    for (int i = 0; i < cm_count; ++i)
  9.    { cubemaps[i] = bindTexture(QPixmap(cm_names[i]), GL_TEXTURE_2D);
  10.      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  11.      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  12.      pixels[i] = (unsigned char *)malloc(3*cm_size*cm_size);
  13.      glGetTexImage(GL_TEXTURE_2D, 0 , GL_RGB, GL_UNSIGNED_BYTE, pixels[i]);
  14.    }
  15.  
  16.    glActiveTexture(GL_TEXTURE11);
  17.    glEnable(GL_TEXTURE_CUBE_MAP);
  18.    glGenTextures(1, &cubemap);
  19.    glBindTexture(GL_TEXTURE_CUBE_MAP, cubemap);
  20.    glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  21.    glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  22.    glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
  23.    glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
  24.    glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R,GL_CLAMP_TO_EDGE);
  25.  
  26.    glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA, cm_size, cm_size, 0, GL_RGB, GL_UNSIGNED_BYTE,pixels[0]);
  27.    glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGBA, cm_size, cm_size, 0, GL_RGB, GL_UNSIGNED_BYTE,pixels[1]);
  28.    glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGBA, cm_size, cm_size, 0, GL_RGB, GL_UNSIGNED_BYTE,pixels[2]);
  29.    glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGBA, cm_size, cm_size, 0, GL_RGB, GL_UNSIGNED_BYTE,pixels[3]);
  30.    glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGBA, cm_size, cm_size, 0, GL_RGB, GL_UNSIGNED_BYTE,pixels[4]);
  31.    glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGBA, cm_size, cm_size, 0, GL_RGB, GL_UNSIGNED_BYTE,pixels[5]);
  32.  


grüße
Vinz

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Skybox/Cubemap-Unschönheiten
BeitragVerfasst: Do Mai 09, 2013 23:21 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Sascha Willems hat geschrieben:
Wie implementierst du die Reflektionen? Ich tippe mal auf Render-To-Texture (z.B. via FBO). Hier muss man dann halt entsprechend die Texturengröße erhöhen, wobei man hier dann halt einen Mittelpunkt zwischen Texturengröße und Performance (und ggf. Speicherverbrauch) finden muss.


Ich übergebe dem Shader die CubeMap und nehme für diese im Pixelshader als Texturkoordinaten die Reflexion des Ortsvektors an der Normalen.

Grüße
Vinz

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 52 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.190s | 17 Queries | GZIP : On ]