das ergibt eine Kugel und in der Kugel ist dann ein Quad welches immer in Kamerarichtung gedreht ist, als naächstes kopier ich das in eine eigene Textur, binde diese und nutze den shader
anschließend wird das selbe quad welches ich oben schon genommen habe nochmal mit der neuen textur gezeichnet.
soweit so gut das macht er auch alles ohne zu mekern, nur seh ich dann gar nichts mehr wenn ich allerdings glUseProgram auskommentiere seh ich wieder alles, hab ich was vergessen?
Schau dir doch mal das Tutorial_GLSL an. Es ist z.B. ratsam nach dem compilieren und linken jeweils auf Fehler zu testen. In deinem Code sehe ich übrigens nirgendwo ein glLinkProgram. Auch musst du irgendwo die zahlreichen Uniform-Variablen des Shaders initialisieren.
das glLinkprogramm wird an einer anderen stelle ausgeführt das hab ich vergessen mit zu erwähnen,
und mit den variablen dachte ich das reicht weil sie ja im shader drin stehen^^ mit dem tutorial hab ich gearbeitet bzw tu es aber ich find das echt komisch geschrieben
ich hab die fehlerfunction mal eingebaut und sie gibt mir nichts zurück, was darauf schließen lässt das alles einwandfrei funktioniert
und mit den variablen dachte ich das reicht weil sie ja im shader drin stehen^^
Ja, nee...der Sinn von Uniforms ist ja gerade das man sie von außerhalb setzen kann (und muss). Wenn man Werte im Shader festlegen will kann man auch eine Konstante nehmen
Die Textur für den Shader sollte nur ein Integer sein, und zwar die Nummer der Texturunit auf der du die Textur gebunden hast. Das dürfte bei dir einfach "0" sein, also ca. so: glUniform1i(glGetUniformLocation(ProgramObject, PGLCharARB('Texture')), 0);
Für die anderen Uniforms musst du ebenfalls erstmal mit glGetUniformLocation den Namen der Uniform in eine Location umsetzen. Das geht erst nach Aufruf von glLinkProgram, da dort nämlich genau diese Locations festgelegt werden.
Edit: Ah...du hast nochmal editiert...jetzt ist das glGetUniformLocation drin Aber die Textur muss 0 sein...und ein Integer.
mir is die idee gekommen das ich die Textur die ich an den shader übergebe natürlich auch wieder auslesen muss
Ähm, nein da bist du auf dem Holzweg. Der Shader rendert ganz normal in den Framebuffer.
Code:
// Textur an Stage 0 binden glActiveTexture(GL_TEXTURE0); // GL_TEXTURE0 ist das Default-Setting, kannst du also weglassen wenn du kein Multitextuing nutzt glBindTexture(gl_Texture_2D, fBlurTex);
// Shader auf Stage 0 zugreifen lassen glUniform1i(glGetUniformLocation(ProgramObject, PGLCharARB('Texture')), 0);
Beachte das ist glUniform1i und nicht glUniform1f. Wieso heißt die Variable eigentlich fBlurTex? Das kleine f suggeriert das es sich um die sogenannte ungarische Notation für Variablennamen handelt und die Variable vom Typ float ist. Es sollte aber ein GLuint sein, also z.B. uiBlurTex.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
F ist bei Delphi und Lazarus-Anhängern auch die Notation für eine Objekt/Klassenvariable.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Wieso heißt die Variable eigentlich fBlurTex? Das kleine f suggeriert das es sich um die sogenannte ungarische Notation für Variablennamen handelt und die Variable vom Typ float ist. Es sollte aber ein GLuint sein, also z.B. uiBlurTex.
das f nutze ich um privaten von public variablen zu unterscheiden
Weil weder in public noch in private ein "f" vorkommt?
ich weiß nich wer sich das ausgedacht hat aber dort wo ich mir die klassenstruktur und schreibweise abgeguggt habe war das nunmal so gelößt,
ich hab festgestellt das ich nun noch berechnen muss wo sich meine lampe auf dem bildschirm befindet weil ich ja nich den ganzen viewport verwischen will sondern nur ein kleines viereck aber ich hab schonmal sowas gelesen von einer funktion die aus 3d koords 2d berechnet, die muss ich mir nur raussuchen dann meld ich mich wieder
ich glaube die funktion die du gepostet hast macht genau das was ich brauch nur falschherum, ich kenne ja meine objectkoordinaten, ich brauch sie aber als 2D X,Y Pixel-koordinaten
Mitglieder in diesem Forum: 0 Mitglieder und 7 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.