Shader Hintergrundfarbe ignorierenn



  • Okay gemacht. Wie schon gedacht. Gleicher Effekt. Hat nichts verändert.



  • Du verwendest ja auch den immidiate-mode, da werden doch die shader garnicht berücksichtigt.
    Im Pinrzip kannst du die shader komplett weglassen - und solltest immernoch dsa gleiche Ergebniss erhalten.



  • Nee also wenn ich den Shader komplett weglasse, dann bekomme ich eine einheitliche Farbe übers ganze Bild.

    was muss ich denn anders machen?



  • ogl schrieb:

    Du verwendest ja auch den immidiate-mode, da werden doch die shader garnicht berücksichtigt.
    Im Pinrzip kannst du die shader komplett weglassen - und solltest immernoch dsa gleiche Ergebniss erhalten.

    Das stimmt so nicht afaik. Er wird schon berücksichtig. Habe das auch schon selbst gemacht. Aber es ist ein böser Mix.

    @krone
    Denke mal drüber nach komplett nach OpenGL 3.x zu migrieren und die fixed Pipeline hinter dir zu lassen. Da gehören Shader dann auch zum Core.
    Ob das jetzt dein Problem behebt mag ich allerdings nicht zu sagen.



  • Du meinst dann also statt dem glBegin usw. einfach glutSolidCube und so zu verwenden oder gibts noch mehr was ich in dem alten Stil mache?



  • die.krone schrieb:

    Du meinst dann also statt dem glBegin usw. einfach glutSolidCube und so zu verwenden oder gibts noch mehr was ich in dem alten Stil mache?

    Nein, es gibt einen gravierenden Unterschied zwischen OpenGL 3.x und OpenGL 1.x was du hier verwendest, bzw OpenGL 2.x.

    OpenGL 1.x verwendet eben den von dir benutzen Immediate Mode mit glBegin/glEnd.
    OpenGL 2.x verwendet clientseitige Vertex Arrays.

    Beide Versionen haben gemeinsam, dass sie eine sogenannte Fixed Pipeline haben, wo die Matrizen etc von OpenGL angeboten werden.

    OpenGL 3.x verwendet dagegen Vertex Buffer Objects, das sind Speicherblöcke im VRAM. Die Geometrie wird an die GraKa gesendet und dann mittels glDrawBuffers dargestellt. Auch gibt es hier keine Matrizen mehr die angeboten werden von OpenGL, man muss die Transformation selbst im Vertex Shader übernehmen.
    Man braucht dazu auch DirectX10 fähige Hardware, da nur diese die sog. "Programmable" Pipeline anbieten.

    Das ist jetzt nur ein großer Abriss, aber so läuft es im Endeffekt. Falls du keine DX10 Karte hast, bzw keine die OpenGL 3.x unterstützt, dann solltest du zumindest über Vertex Arrays mit OpenGL 2.x nachdenken.

    Aber wie gesagt, ich denke nicht dass Dein Problem daher kommt^^. Aber kann schon sein. Zur not mal auf OpenGL.org im Forum fragen.



  • Schade, dann krieg ich das wohl nicht gelöst.



  • Ich glaub es kaum..aber ich hab das Problem gelöst.
    Eigentlich ist die Lösung simpel.
    Man muss nur beim displayMode noch das Attribut GLUT_ALPHA eintragen. Ein reines GLUT_RGBA hat wohl nicht gelangt.

    Danke trotzdem für die Hilfe!



  • die.krone schrieb:

    Ich glaub es kaum..aber ich hab das Problem gelöst.
    Eigentlich ist die Lösung simpel.
    Man muss nur beim displayMode noch das Attribut GLUT_ALPHA eintragen. Ein reines GLUT_RGBA hat wohl nicht gelangt.

    Danke trotzdem für die Hilfe!

    Dang... daran habe ich nicht gedacht xD. Naja, so lernt man dazu.



  • Tja man lernt nie aus, gell 😉

    Nochmal kurz:
    Ich hab jetzt folgenden Effekt. Krieg ich noch weg, dass die Farbe beim Übergang zu weiß wechselt?

    http://img59.imageshack.us/i/colorcoder.png/



  • Eine bitte:
    Kein Imageshack mehr pls. Die nerven total mit ihrem undefined image wenn mans größer sehen will :(.
    http://abload.de oder http://pic-upload.de

    Da ichs nicht richtig erkenne, rate ich mal und sag, probier GL_NEAREST als Texturfilter.



  • Sorry. War der erste Anbieter den ich gefunden hab.

    Texturfilter war es leider nicht.
    Ich meine auch dass das gelb zu blau wird, wenn der Hintergrund weiß ist. Nicht dass wir aneinander vorbeireden.



  • Also ich hab es rausgefunden.
    Wenn ich die if-Abfrage im Shader rauslösche und einfach nur:

    uniform sampler2D left;
    uniform sampler2D right;
    
    void main(void)
    {
      vec4 cleft = texture2D(left, gl_TexCoord[1].st).rgba;
      vec4 cright = texture2D(right, gl_TexCoord[2].st).rgba;
    
       vec3 col = vec3(0.0,0.0,0.0), coeff = vec3(0.15, 0.15, 0.7);
    
        // falls sowohl in Textur1 als auch in Textur2 der Hintergrund sichtbar ist:
      if (cleft.a == 0.0 && cright.a == 0.0) {
          // ignorieren
          discard;
      } else {
            col.r = cleft.r;
    	col.g = cleft.g;      
        	col.b = dot(cright.rgb, coeff);
    
       }
    
       gl_FragColor = vec4(col,1.0);
    }
    

    schreibe, dann gibt es keine unterschiedlichen Farben.

    Das Resultat ist folgendes http://www.abload.de/image.php?img=colcodegsu3.png

    Allerdings ist das gelb und blau sehr matt. Hat jemand eine Idee wie ich das gelb und blau dunkler/greller bekomme?


Anmelden zum Antworten