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

Aktuelle Zeit: So Jul 13, 2025 16:47

Foren-Übersicht » Programmierung » Einsteiger-Fragen
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: Gaussian Blur ?
BeitragVerfasst: Sa Jun 10, 2006 11:33 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Hi, für Texturen benutze ich die glBitmap.pas, jetzt habe ich eine Textur als glUInt gespeichert,
wie kann ich jetzt zb einen gaussian blur effekt hinzufügen, zb radius 5 pixel. wie mache ich sowas ?


danke schonmal ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 10, 2006 13:38 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Du hast deine Textur nicht als GLUint gespeichert.
Ein GLUint ist ein (Open)GL Unsigned Integer. Dort passt kein Bild rein. Du hast nur einen Index bekommen, über den du auf die Texture zugreifen kannst.

Daher solltest du den Filter an der Stelle anwenden bevor du die (Bild)Daten an OpenGL weiterreichst.
Dazu bietet dir glBitmap die Möglichkeiten an.

Doch davor solltest du verstanden haben, wie dein Bild im Speicher aussieht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 10, 2006 14:34 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
Ansonsten könnte hier auch ein Shader zur Anwendung kommen, denke ich mal?

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 10, 2006 15:39 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
die textur wird aber aus der szene generiert, bzw die szene wird in diese textur gerendert


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 10, 2006 20:08 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo Seth,

gaussian blur kannst ganz einfach mit einem Convolution-Filter auf deine Textur anwenden.

Als Filterkern versuchst du am besten zuerst diese Matrix (Radius 4).

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 11, 2006 09:08 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
das klingt vielversprechend, aber der 2. link gunzt leider net ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 11, 2006 11:39 
Offline
DGL Member

Registriert: Sa Okt 22, 2005 20:24
Beiträge: 291
Wohnort: Frauenfeld/CH
doch der geht - verweist auf den artikel gaussian blur in der englischen wikipedia ;)

_________________
bester uo-shard: www.uosigena.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 11, 2006 11:56 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
stimmt, nur spinnt mein internet ab und zu, kA warum aber dann geht nichts mehr außer icq ^^ danke


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 11, 2006 21:35 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
bei dem letzten parameter von glConvolutionFilter2D bin ich mir net schlüssig, da muss doch jetzt irgendwie ein zeiger auf diese 7*7 matrix hin, nur wie stelle ich das an ?

so bekomme ich ne zugriffsverletzung:
Code:
  1.  
  2. type
  3.   TBlurMatrix = array [0..6, 0..6] of single;
  4.   PBlurMatrix = ^TBlurMatrix;
  5.  
  6. {...}
  7.  

Code:
  1.  
  2. const
  3.   blurmatrix: TBlurMatrix =
  4.   ((0.00000067, 0.00002292, 0.00019117, 0.00038771, 0.00019117, 0.00002292, 0.00000067),
  5.    (0.00002292, 0.00078633, 0.00655965, 0.01330373, 0.00655965, 0.00078633, 0.00002292),
  6.    (0.00019117, 0.00655965, 0.05472157, 0.11098164, 0.05472157, 0.00655965, 0.00019117),
  7.    (0.00038771, 0.01330373, 0.11098164, 0.22508352, 0.11098164, 0.01330373, 0.00038771),
  8.    (0.00019117, 0.00655965, 0.05472157, 0.11098164, 0.05472157, 0.00655965, 0.00019117),
  9.    (0.00002292, 0.00078633, 0.00655965, 0.01330373, 0.00655965, 0.00078633, 0.00002292),
  10.    (0.00000067, 0.00002292, 0.00019117, 0.00038771, 0.00019117, 0.00002292, 0.00000067));
  11.  
  12. var
  13.   pbmat: Pblurmatrix;
  14.  

OnCreate:
Code:
  1.  
  2.   pbmat := @blurmatrix;
  3.  

Code:
  1.  
  2.   ///////////////////////////////////////////////////////////////////
  3.   //Renderpass 001  /////////////////////////////////////////////////
  4.   ///////////////////////////////////////////////////////////////////
  5.   glMatrixMode(GL_PROJECTION);
  6.   glLoadIdentity;
  7.  
  8.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  9.   glViewport(0, 0, 256, 256);
  10.   gluPerspective(60, 1, 0.1, 1000);
  11.  
  12.   glMatrixMode(GL_MODELVIEW);
  13.   glLoadIdentity;
  14.  
  15.   glDisable(GL_TEXTURE_2D);
  16.  
  17.   DrawTriangle;
  18.  
  19.   glEnable(GL_TEXTURE_2D);
  20.  
  21.   glBindTexture(GL_TEXTURE_2D, rendertex);
  22.   glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 256, 256, 0);
  23.  
  24.   //Convolution Filter für Gaussian Blur
  25.   glEnable(GL_CONVOLUTION_2D);
  26.   glConvolutionFilter2D(GL_CONVOLUTION_2D, GL_RGB, 7, 7, GL_RGB, GL_FLOAT, pbmat);
  27.   ///////////////////////////////////////////////////////////////////
  28.   ///////////////////////////////////////////////////////////////////
  29.   ///////////////////////////////////////////////////////////////////
  30.  


problemstelle ist hier:
Code:
  1.  
  2.   glConvolutionFilter2D(GL_CONVOLUTION_2D, GL_RGB, 7, 7, GL_RGB, GL_FLOAT, pbmat);
  3.  


Zuletzt geändert von Seth am Mo Jun 12, 2006 07:27, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 11, 2006 22:44 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
zuerst mal solltest du dich für die Matrix auf einen Datentyp festlegen. Die Konstantenmatrix dürfte von Delphi als extended angenommen werden, definieren tust du für TBlurmatrix Double und am Ende übergibst du mit GL_FLOAT effektiv single. da darf man sich nich wundern wenn nichts vernünftiges rauskommt.

Da der Speicherbereich aber groß genug sein dürfte, liegt das problem vermutlich wonaders. Ich würd mal annehmen, das du ne ATI karte hast. Diese unterstützen iirc kein ARB_Imaging (bzw imaging subset von opengl 1.2) und damit auch keine convolutionfilter. Dementsprechend zeigt der Funktionspointer auf nil und damit verabschiedet sich das ganze dann auch.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 07:24 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
GL_FLOAT konnte ich net einsetzen, kA warum, dachte auch das es daran liegt, aber single, was ja afaik gehen müsste geht auch net, aber wenns an der grafikkarte liegt, was kann ich dann machen ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 07:34 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo Seth,

ich kenne mich mit Delphi zwar nicht so gut aus, aber ich glaube du hast noch einen anderen Fehler in deinem Code :

Dein Pointer ist kein Single-Array sondern vom Typ TBlurMatrix, der OpenGL natürlich vollkommen unbekannt ist.
Ausserdem wird glConvolutionFilter keine zweidimensionalen Arrays kennen, du musst wahrscheinlich ein 49-elementiges eindimensionales Array nehmen.

Deine Grafikkarte müsste die Funktion eigentlich unterstützen, falls sie OpenGL 1.2 - fähig ist :wink:

Viele Grüße
dj3hut1

P.S.

Ausserdem sollte dein Pixelformat (5. Parameter) GL_LUMINANCE sein, da jede Komponente in deinem Array nur einen Wert enthält.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 08:19 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
das mit dem typ muss ich wohl so machen, opengl scheint es ja auch als eine matrix anzuerkennen, den rest werde ich testen, danke

//EDIT: genau der gleiche Fehler :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 11:55 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
Ob das ganze als matrix oder 1D Array deklariert ist, ist da egal, da beide auf die gleiche Weise im speicher liegen dürften.

Und nach allem was ich weiß ist das Imaging subset optionaler Bestandteil von OpenGL 1.2 und wird von ATI nicht unterstützt.
Ich hatte da jedenfalls auch bisher immer nur nil bei den Funktionspointern, wenn da kein bug beim laden vorliegt deckt sich das also mit meinen informationen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 13:51 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
soweit so schlecht, also was gibt es für alternativen ?


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 » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 6 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.009s | 16 Queries | GZIP : On ]