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 ?
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.
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 ?
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.
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 ?
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
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.
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.
Mitglieder in diesem Forum: 0 Mitglieder und 3 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.