GLKit & adding tints to textures

前端 未结 1 909
渐次进展
渐次进展 2021-02-10 13:41

I am having issue with tinting a PNG image with GLKit.

I have a white PNG image that I load into the application and then use it to create a texture:

UII         


        
1条回答
  •  花落未央
    2021-02-10 14:10

    I have managed to solve my problem and here is the solution

    -(void)render
    {
     if (texture_m != nil) {
    
              effect_m.texture2d0.enabled = GL_TRUE;
    
              // here you need to env mode to GLKTextureEnvModeModulate rather than GLKTextureEnvModeReplace
    
              effect_m.texture2d0.envMode = GLKTextureEnvModeModulate;
              effect_m.texture2d0.target = GLKTextureTarget2D;
              effect_m.texture2d0.name = texture_m.name;
         }
    
          // then here I have added the tint colour to the GLKBaseEffect class as constant colour which I imagine replaces the calls to  glColor4f for OpenGL1.1
    
         effect_m.useConstantColor = YES;
         float alphaValue = 0.7;
         GLKVector4  colour = GLKVector4Make( 0* alphaValue, 1* alphaValue, 1* alphaValue, alphaValue );
         effect_m.constantColor = colour;
    
         // remember multiplying the alpha value to each colour component
    
         [effect_m prepareToDraw];
    
         glClear(GL_COLOR_BUFFER_BIT);
    
         GLfloat squareVertices[] = {
            50, 50,
            150, 50,
            50, 150,
            150, 150
        };
    
        GLfloat squareTexture[] = {
            0, 0,
            1, 0,
            0, 1,
            1, 1
        };
    
    
    
        // glColor4f not necessary
        // glColor4f( 1, 0, 0, 1 );
    
        glEnableVertexAttribArray(GLKVertexAttribPosition);
        glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
        glEnable(GL_BLEND);
    
         glBlendFunc( GL_ONE, GL_ONE_MINUS_SRC_ALPHA );
    
        glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 0, squareVertices);
        glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, 0, squareTexture );
        glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
    
        glDisable(GL_BLEND);
        glDisableVertexAttribArray(GLKVertexAttribPosition);
        glDisableVertexAttribArray(GLKVertexAttribTexCoord0);
    }
    

    0 讨论(0)
提交回复
热议问题