05 - Usando texturas con shaders

Para llegar a hacer lo mismo que habíamos conseguido sin shaders, tan solo nos queda conseguir usar las texturas que cargábamos en el tutorial de texturizado con la ayuda de los shaders, para ello vamos a cambiar el VertexShader y el FragmenShader:



-VertexShader:

            int vertexShader = LoadShader(
            @"
             void main()
            {
                gl_FrontColor = gl_Color;
                gl_Position = ftransform();
                gl_TexCoord[0]=gl_MultiTexCoord0;
            }", ShaderType.VertexShader);
En el que hemos añadido una linea que le asigna la coordenada de la textura a una variable que usaremos luego en el FragmentShader.

-FragmentShader:
            @"
            uniform sampler2D MyTexture;
            void main()
            {
                gl_FragColor = texture2D(MyTexture, gl_TexCoord[0].st);
            }" 
En el que usamos la función texture2D para obtener el color de la textura correspondiente. Podemos observar dos cosas, por una parte el uso de '.st' que no es más que otro de los sistemas de coordenadas que podemos usar. Y el uso de la variable MyTexture a la que vamos a asignar la textura mediante el uso de la función BindTexture():

        private void BindTexture(ref int textureId, TextureUnit textureUnit, string UniformName, int shaderProgram)
        {
            GL.ActiveTexture(textureUnit);
            GL.BindTexture(TextureTarget.Texture2D, textureId);
            int diUniform = GL.GetUniformLocation(shaderProgram, UniformName);
            GL.Uniform1(diUniform, textureUnit - TextureUnit.Texture0);
        }
Esta función la usaremos después de cargar la textura para decirle al shader qué textura debe usar.

Con esta pequeña modificación, ya estaremos renderizando texturas a través de los shaders.

No hay comentarios:

Publicar un comentario