2011-04-09 3 views
2

2D OpenGL 게임 만들기. 프레임을 렌더링 할 때 먼저 계산 된 쿼드 지오메트리를 그린 다음 텍스처가 적용된 스프라이트를 그려야합니다. 내 렌더링 메서드의 본문에서 스프라이트 만 그리면 모든 것이 잘 동작합니다. 그러나 스프라이트 이전에 기하학적 인 사각형을 그리면 스프라이트의 텍스처가 이전에 사용 된 마지막 GL.Color3의 색상으로 변경됩니다. 어떻게 OpenGL (well, OpenTK)에게 "Ok, 우리는 형상을 그리며 스프라이트로 이동할 시간을 얻었습니까?"이전에 GL.Color3을 호출하면 텍스처가 잘못된 색으로 사용됩니다.

 // Let's do some geometry 
     GL.Begin(BeginMode.Quads); 
     GL.Color3(_dashboardBGColor); // commenting this out makes my sprites look right 

     int shakeBuffer = 100; 
     GL.Vertex2(0 - shakeBuffer, _view.DashboardHeightPixels); 
     GL.Vertex2(_view.WidthPixelsCount + shakeBuffer, _view.DashboardHeightPixels); 
     GL.Vertex2(_view.WidthPixelsCount + shakeBuffer, 0 - shakeBuffer); 
     GL.Vertex2(0 - shakeBuffer, 0 - shakeBuffer); 

     GL.End(); 

     // lets do some sprites 
     GL.Begin(BeginMode.Quads); 
     GL.BindTexture(TextureTarget.Texture2D, _rockTextureId); 

     float baseX = 200; 
     float baseY = 200; 

     GL.TexCoord2(0, 0); GL.Vertex2(baseX, baseY); 
     GL.TexCoord2(1, 0); GL.Vertex2(baseX + _rockTextureWidth, baseY); 
     GL.TexCoord2(1, 1); GL.Vertex2(baseX + _rockTextureWidth, baseY - _rockTextureHeight); 
     GL.TexCoord2(0, 1); GL.Vertex2(baseX, baseY - _rockTextureHeight); 

     GL.End(); 

     GL.Flush(); 
     SwapBuffers(); 

답변

3

기본 텍스처 환경 모드는,이 정점 색상으로 질감 색을 곱한 것을하지 GL_MODULATE입니다 : 여기

처럼 어떤 코드를 렌더링하는 모습이다.

간편한 용액으로 1,1,1,1 텍스쳐링 프리미티브 드로잉 전에 정점 색을 설정하는 것이다

glColor4f (1.0F, 1.0F, 1.0F, 1.0F);

또 다른 해결책은 텍스처 색상이 정점 색상을 대체하게하고 문제가없는 GL_REPLACE하는 텍스처 환경 모드로 변경하는 것입니다 :

glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE을);

+0

thx – Dejas

관련 문제