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

Aktuelle Zeit: Di Apr 23, 2024 17:44

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Jan 16, 2015 22:35 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
Hi, ich hab eine kurze Frage an die Gurus hier.

Ich habe mich bisher nie großartig um Texturformate gekümmert, da ich sonst nur mit GL_RGBA oder GL_DEPTH_COMPONENT gearbeitet habe. Nun ist es aber so, dass ich versuche SSAO zu implementieren und dazu gerne eine vorgenerierte "Noise"-Textur und einen SampleKernel als Textur im Shader verarbeiten will. Diese sollen als GL_RG32F und GL_RGBA32F vorliegen, da die NoiseTextur 2 Floats für die Kernelrotation vorhalten soll und der Kernel selbst eine 1D-Textur ist, in der die Vektoren der zu untersuchenden Punkte abgelegt sind. Alle Werte befinden sich im Wertebereich -1.0 bis 1.0. Jetzt steht in der Spezifikation von OpenGL 4.x, dass die Werte alle auf 0-1 geclampt werden. trifft das auch auf die von mir gewählten Formate zu? Wie würde der Aufruf von TexImage2D/1D aussehen, wenn ich ein Array von 4Float bzw. 2Float in die Textur schreiben will?

Aktuell sieht mein Code dazu wie folgt aus:
Code:
  1.  
  2. procedure GenerateSSAOKernel(aSampleCount:integer);
  3. var KernelData : array of tVec4; // tVec4 = array[0..3] of single
  4. begin
  5.   SetLength(KernelData, aSampleCount);
  6.  
  7.   // Berechne KernelData
  8.  
  9.   glGenTextures(1, @fKernelID);
  10.   glBindTexture(GL_TEXTURE_1D, fKernelID);
  11.   glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA32F, aSampleCount, 0, GL_RGBA, GL_FLOAT, @KernelData[0]);
  12.   glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  13.   glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  14.   glBindTexture(GL_TEXTURE_1D, 0);
  15. end;
  16.  


Bevor ich jetzt stundenlang im Kreis programmiere, würde ich gerne das Thema etwas durchleuchtet haben, da mir auch noch nach etlichen Forensuchen immer noch nicht genau klar ist, was da eigentlich intern passiert.

Vielen Dank!

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jan 17, 2015 16:29 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

was genau dort intern passiert kann ich dir leider nicht sagen, aber ich würde mich da einfach an die Spec halten (dafür is sie ja da).
Wenn du den Kernel-Daten in die Textur lädst, dann konvertier die Daten vorher, das sie im Bereich von 0-1 liegen: Value = (Value + 1.0) / 2.0;
Und genau die umgedrehte Operation machst du dann im Shader, nachdem du die Daten aus der Textur gelesen hast: Value = (texture(sampler, coord).rgba * 2.0) - 1.0;
Das ist zwar minimal mehr Rechenaufwand, aber das macht die Grafik-Karte mit links und du bist Spec-konform.

Ne andere Möglichkeit wäre es, das einfach mit einem kleinen Test-Programm auszuprobieren (mach ich auch öfters). Einfach ne Textur mit den Daten -1.0, 0.0 und 1.0 und dann im Shader: gl_FragColor = (texture(sampler, coord).rgba + 1.0) / 2.0;
Wenn du da jetzt einen scharzen, einen grauen und einen weißen Pixel hast, dann können Float Texturen -1.0 bis 1.0, wenn nicht, dann hast du 2 graue und einen weißen Pixel. Aber wie oben schon gesagt würde ich da lieber nach Spec arbeiten.

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jan 17, 2015 16:43 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
Und wenn du dann beim Konvertieren der -1…1 Werte nach 0…1 Probleme kriegst, weil es zu ungenau ist, musst du halt Doubles nehmen. Eine andere Möglichkeit fiele mir direkt nicht ein.

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jan 17, 2015 17:00 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Gibts überhaupt Texturen mit double precision?

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jan 17, 2015 18:36 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
Oh. Scheinbar nicht.

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jan 17, 2015 19:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Bergmann89 hat geschrieben:
Gibts überhaupt Texturen mit double precision?


Nein, aktuell noch nicht, siehe z.B. hier (Issue 6).

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Jan 18, 2015 10:50 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
Ich hab die Vektoren jetzt einfach in den Wertebereich 0.0 - 1.0 gemappt, das klappt ganz gut. Der SSAO-Shader macht jetzt zwar noch anderweitig Probleme, aber Kernel und Noise kommen richtig an.

_________________
Klar Soweit?


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


Wer ist online?

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