2011-04-12 81 views
0

我試圖在2D地圖上繪製一個2d字符精靈,但是當我繪製角色時,他身後有奇怪的東西。這不在精靈之中,所以我認爲它是混合。在OpenGL中正確混合的問題

這是我的OpenGL是如何設置:

void InitGL(int Width, int Height)   // We call this right after our OpenGL window is created. 
{ 

    glViewport(0, 0, Width, Height); 
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);  // This Will Clear The Background Color To Black 
    glClearDepth(1.0);    // Enables Clearing Of The Depth Buffer 
    glDepthFunc(GL_LESS);    // The Type Of Depth Test To Do 
    glDisable(GL_DEPTH_TEST);   // Enables Depth Testing 
    //glShadeModel(GL_SMOOTH);   // Enables Smooth Color Shading 
    glEnable(GL_TEXTURE_2D);      // Enable Texture Mapping (NEW) 
    glShadeModel(GL_FLAT); 
    glMatrixMode(GL_PROJECTION); 
    glEnable(GL_BLEND); 
    glBlendFunc(GL_ONE , GL_ONE_MINUS_SRC_ALPHA); 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); 
    glAlphaFunc(GL_GREATER, 0.5f); 

    glMatrixMode(GL_PROJECTION);//configuring projection matrix now 
    glLoadIdentity();//reset matrix 
    glOrtho(0, Width, 0, Height, 0.0f, 100.0f);//set a 2d projection matrix 

} 

我應該如何設置這正常工作(即圖紙沒有他身後奇怪的東西精靈

這是我在說什麼約:http://i.stack.imgur.com/cmotJ.png

PS:我需要能夠把對方的頂部透明/半透明的和有什麼在他們身後可見太

+0

你通常不應該「設置」OpenGL。您在InitGL中設置的所有狀態都應該設置在顯示功能中所需的基礎上。在OpenGL中只有很少的初始化,即紋理和緩衝區對象。一旦你圍繞這個事實思考,你可以在任何時候啓用/禁用混合,並且應該根據當前階段渲染場景的需要來做到這一點,變得更容易。 – datenwolf 2011-04-12 07:45:47

回答

3

您的精靈是否已預乘alpha?你的glBlendFunc設置有點不尋常,如果你沒有預乘alpha,那肯定會造成這個問題。