2013-03-12 66 views
0

我在OpenGLglColor3f有一個奇怪的問題。在下面的代碼中,如果我更改了glColor3f的紅色值,那麼下面的多邊形將變成紅色陰影。但是,如果我改變綠色或藍色,那麼它以某種方式不會改變多邊形的顏色,但會改變遊戲中所有其他對象的顏色。基本上,只有該功能的紅色價值,我需要藍色和綠色的工作。glColor3f Only Colors Red

glColor3f(1.0f,1.0f,0.0f); 
for(int i = 0; i < totalhumans; i++) 
{ 
    if(humans[i].rage) 
    { 
     glPushMatrix(); 
      glTranslatef(humans[i].x,humans[i].y,humans[i].depth); 
      glBegin(GL_QUADS); 
       glVertex3f(-16.0f,-(humans[i].dimen->bodyh/2)-16,0.0f); 
       glVertex3f(-16.0f,-(humans[i].dimen->bodyh/2)-8,0.0f); 
       glVertex3f(16.0f,-(humans[i].dimen->bodyh/2)-8,0.0f); 
       glVertex3f(16.0f,-(humans[i].dimen->bodyh/2)-16,0.0f); 
      glEnd(); 
     glPopMatrix(); 
    } 
} 

這是我的初始化代碼:

void START_GAME() 
{ 
    SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER); 
    Mix_OpenAudio(22050,MIX_DEFAULT_FORMAT,2,2048); 
    SDL_ShowCursor(SDL_DISABLE); 
    loadsettings(); 
    if(fullscreen) 
    { 
     const SDL_VideoInfo *VideoInfo = SDL_GetVideoInfo(); 
     screen = SDL_SetVideoMode(VideoInfo->current_w, VideoInfo->current_h, 32, SDL_OPENGL|SDL_FULLSCREEN); 
    } 
    if(!fullscreen) 
    { 
     screen = SDL_SetVideoMode(640, 480, 32, SDL_OPENGL); 
    } 
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); 
    SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); 
    SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); 
    SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); 
    SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); 
    glClearColor(0.0f,0.0f,0.0f,0.0f); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    glEnable(GL_TEXTURE_2D); 
    glEnable(GL_DEPTH_TEST); 
    glEnable(GL_COLOR_MATERIAL); 
    glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
    glEnable(GL_ALPHA_TEST); 
    glAlphaFunc(GL_GREATER, 0.0f); 

    setvariables(); 
    loadimages(); 
    loadsounds(); 

    SDL_WM_SetCaption("Freshmen Stuffing Boys",NULL); 
    SDL_WM_SetIcon(badge,NULL); 

    running = true; 
} 

編輯:我發現,由於某些原因,禁用GL_TEXTURE_2D後,顏色我想出現。有人可以解釋爲什麼這樣嗎?

這個問題不是重複的,因爲1)我的電腦是新的,它所有的圖形驅動程序都是新的,所以它不是gpu問題,2)我第一次編寫代碼,所以我不知道代碼是否可以在任何其他計算機上工作。

+0

初始化openGL似乎存在一些問題。 – 2013-03-12 05:10:33

+0

從上面的鏈接:「_Solved ..這確實是一個gpu的問題,我從製造商得到的驅動程序,它現在正常工作...去figure_」 – 2013-03-12 05:58:45

回答

1

我想你在其他代碼中啓用了紋理。當繪製該多邊形時,GL將使用上次使用的紋理和紋理座標(因爲您還沒有告訴它),在您的情況下,這可能是一個紅色像素。因此,您的頂點顏色被紅色調製,導致藍色和綠色值被乘以零。

如果你不想紋理,禁用它。如果您確實需要它,請設置正確的紋理並提供紋理座標。

+0

哦。這就說得通了。很好的解釋。 – Ripspace 2013-03-13 18:09:41