2014-11-19 4 views
0

OpenTK를 사용하고 있는데 OpenGL을 사용할 수있는 기능의 개념을 이해하는 데 어려움이 있습니다. perspective 매트릭스는 onResize 함수에 있습니다.OpenGL 텍스처 + 번개 + 블렌딩 문제

텍스처를 표시하려고합니다.

기능별 렌더링 내 :

 GL.ClearColor(0.5f, 0.5f, 0.5f, 1.0f); 
     GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); 
     GL.MatrixMode(MatrixMode.Modelview); 
     GL.LoadIdentity(); 
     GL.Enable(EnableCap.Texture2D); 
     GL.Enable(EnableCap.DepthTest); 
     Ground.Draw(); 

내 Ground.Draw() 함수 (sizeXZ.Z, sizeXZ.Y는 상수)

 GL.PushMatrix(); 
     GL.Translate(new Vector3(-sizeXZ.X/2, -1, sizeXZ.Y/2)); 
     GL.BindTexture(TextureTarget.Texture2D, Textures.GetTextureId(textureName)); 
     GL.Begin(PrimitiveType.Quads); 
     GL.Color3(1,1,1); 
     GL.Normal3(0, 1, 0); 
     GL.TexCoord2(1f, 1f); GL.Vertex3(0, 0, 0); 
     GL.TexCoord2(1f, 0f); GL.Vertex3(sizeXZ.X, 0, 0); 
     GL.TexCoord2(0f, 0f); GL.Vertex3(sizeXZ.X, 0, -sizeXZ.Y); 
     GL.TexCoord2(0f, 1f); GL.Vertex3(0, 0, -sizeXZ.Y); 
     GL.End(); 
     GL.PopMatrix(); 

그것은 검정색 비 질감 쿼드를 나타낸다. 나는 질감이 나타납니다 몇 가지 빛을 추가 할 수 있지만 일부 쿼드의 색상을 사라지면 : Color3

1. 사용법을 보면 :

GL.BindTexture(TextureTarget.Texture2D, Textures.GetTextureId(textureName)); 
GL.Begin(PrimitiveType.Quads); 
GL.Normal3(0, 0, 1); 
if (true) GL.Color4(0,1,0,1); // it appears to be the background color, not green 
if (false) GL.TexCoord2(1f, 0f); GL.Vertex3(0, 0, 0); 
if (false) GL.TexCoord2(1f, 1f); GL.Vertex3(3f, 0, 0); 
if (false) GL.TexCoord2(0f, 1f); GL.Vertex3(3f, 3f, 0); 
if (false) GL.TexCoord2(0f, 0f); GL.Vertex3(0, 3f, 0); 
GL.Color4(1, 1, 1, 1); 
GL.End(); 
+0

조명을 활성화하지 않으므로 중요하지 않습니다. 나는 당신이 보통을 지정할 필요가 없다고 생각한다. 쿼드를 보았으므로 좌표 또는 행렬에 문제가되지 않습니다. 텍스처 좌표가 잘 보입니다. 텍스처를 바인딩하지 않으면 어떻게됩니까? 그러면 올바른 색상으로 표시됩니까? –

+0

'GL.Color3 (1,1,1)'- 검은 색을 그립니다. 'GL.Color3 (Color.Aqua)'- 정상적으로 그립니다. –

답변

5

프로그램에서 두 가지 문제가 있습니다 OpenTK Color3 문서, 당신은이 기능의 두 가지 오버로드가 있음을 알 수 있습니다 :

Color3 (Double red, Double green, Double blue) 
Color3 (SByte red, SByte green, SByte blue) 

이유 이유는 GL.Co lor3 (1,1,1)은 값이 [0, 255] 범위에 있다고 가정하는 SByte 버전을 사용한다는 검은 색 객체를 제공합니다. 따라서 1은 매우 어둡다. GL.Color3 (1.0,1.0,1.0)은 Double Overload를 호출합니다.

2 GL_TEXTURE_ENV_MODE 이것은 정점 색 텍스처 컬러를 승산하는 GL_MODULATE 설정되어 기본적

. 1과 함께하면 텍스처가 사라집니다. 이에 대한 자세한 내용은 here