OpenGL - Alphawert aus Textur lesen liefert immer 1



  • Hallo Leute,

    ich möchte in OpenGL(OpenTK) eine Textur mit Alphawerten nutzen und anzeigen. So lade ich die Textur in die Grafikkarte:

    int id = GL.GenTexture();
                GL.BindTexture(TextureTarget.Texture2D, id);
    
                BitmapData bmp_data = image.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
    
                GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, bmp_data.Width, bmp_data.Height, 0,
                    OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, bmp_data.Scan0);
    
                image.UnlockBits(bmp_data);
    

    Auf diese Weise kontrolliere ich meine Texturdaten:

    byte[] data = new byte[4 * tex.Width * tex.Height];
                GL.GetTexImage(TextureTarget.Texture2D, 0, global::OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data);
                Bitmap result = new Bitmap(tex.Width, tex.Height);
                BitmapData resultData = result.LockBits(new Rectangle(0, 0, tex.Width, tex.Height), ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                Marshal.Copy(data, 0, resultData.Scan0, data.Length);
                result.UnlockBits(resultData);
    

    In result stehen bei den Alphawerten unterschiedliche Werte (Höhenkarte). Soweit ist also alles richtig.

    So zeige ich nun die Textur an:

    Fragment-Shader:

    #version 330
    
    precision highp float;
    
    in vec2 textcoord;
    
    uniform sampler2D Texture0;	// Farbtextur
    uniform sampler2D Texture1; // Bumpmap
    
    out vec4 out_frag_color;
    
    void main()
    {
      float a = texture2D(Texture1, textcoord.st).a; //Wenn ich hier statt a r schreibe, dann sehe ich was
      out_frag_color = vec4(a,a,a,1); //Wenn als 4. Parameter 0 übergeben wird, sehe ich nur weiß
    }
    

    Warum bekomme ich als Alphawert immer nur eine eins? Was mach ich falsch?

    Nachtrag:

    Ich setze außerdem noch diese Parameter:

    GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest);
    GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMagFilter.Nearest);
    

    Damit kann man zumindest beeinflussen, ob dauerhaft 0 oder 1 als Alphawert gelesen wird. Kann man damit vielleicht auch irgentwie mein Problem lösen?

    Nachtrag 2:

    Die Alphawerte, die ich mit GetTexImage lese sind dort auch schon alle 1. Also ist das Problem vermutlich doch noch vor dem Shader in der Funktion TexImage2D oder in der Nähe dort. Die Frage bleibt aber weiterhin bestehen^^

    Nachtrag 3: Fehler gefunden. Ich hatte noch eine Funktione vor GetTexImage, welche die Alpahawerte überschrieben hat. Ich hab die jetzt rausgenommen. Nun gehts.


Anmelden zum Antworten