2014-03-31 1 views
0

안녕하세요 Open TK를 사용하여 OpenGL에서 텍스처를 사용하려고합니다. official page of OpenTK Framework에서 기본 예제를 얻었지만 작동하지 않았습니다. 여기에 stackoverflow에 대한 도움이 필요하며 코드 일부가 변경되었지만 여전히 작동하지 않습니다. (찾을 수 및 시험 : OpenTk texture not display the image를)렌더러가 Open TK에서 텍스처를 사용하지 않습니다

지금까지 나는이 조각과 함께, 그러나 이것은 텍스처 (대신 흰색 표시) 표시되지 않습니다

(@The 들러 제안)

업데이트]

GL.ClearColor(Color.MidnightBlue); 
GL.Enable(EnableCap.Texture2D); 

GL.Viewport(0, 0, control.Width, control.Height); 

GL.MatrixMode(MatrixMode.Projection); 
GL.LoadIdentity(); 
GL.Ortho(0, 4, 0, 3, -1, 1); 

GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest); 

GL.GenTextures(1, out textureId); 
GL.BindTexture(TextureTarget.Texture2D, textureId); 
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear); 
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); 

var bmp = new Bitmap(@"C:\myfolder\texture.png"); 
var data = bmp.LockBits(new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height), 
    ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 

GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, data.Width, data.Height, 0, 
    OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0); 

System.Windows.Forms.MessageBox.Show("Erro: " + GL.GetError()); 

bmp.UnlockBits(data); 

OpenTK.GLControl.Paint 이벤트 처리기에서 :

이벤트 핸들러에서
GL.Clear(ClearBufferMask.ColorBufferBit); 

GL.MatrixMode(MatrixMode.Modelview); 
GL.LoadIdentity(); 
GL.BindTexture(TextureTarget.Texture2D, textureId); 

GL.Begin(BeginMode.Quads); 

GL.TexCoord2(0, 0); GL.Vertex2(0, 0); 
GL.TexCoord2(0, 1); GL.Vertex2(0, 1); 
GL.TexCoord2(1, 1); GL.Vertex2(1, 1); 
GL.TexCoord2(1, 0); GL.Vertex2(1, 0); 

GL.End(); 

control.SwapBuffers(); 

에로 코드의 첫 번째 부분은 1281 = ErrorCode.InvalidValue입니다. 텍스처를 렌더링하지 않는 이유는 누구나 알 수 있습니까?

+0

InvalidValue 오류의 원인이되는 행을 찾아야합니다. 'GL.GetError()'에 더 많은 호출을 추가하거나 OpenTK.dll의 디버그 버전을 컴파일하고 사용하십시오 (OpenGL 오류가 발생할 때마다 디버그 버전은 예외를 던집니다). –

답변

0

흰색 질감은 일반적으로 (a) 불완전한 질감 정의 또는 (b) 렌더링이 엉망인 OpenGL 오류 상태를 의미합니다. 텍스처 정의가 정확하니 GL.GetError()을 호출하여 OpenGL 오류가 발생하는지 확인하십시오.

PixelInternalFormat.Rgb8은 OpenGL 3.x가 필요하므로 사용하기 전에 OpenGL 3.x가 지원되는지 확인해야합니다. 또는 OpenGL 1.1로 다시 지원되는 PixelInternalFormat.Rgb 또는 PixelInternalFormat.Rgba을 사용해보십시오.

편집 : "Texture.cs"에서 전체 작동 예제를 찾을 수 있습니다. OpenTK 설치 (OpenGL -> 1.x -> Textures)에서 예제 브라우저를 통해이를 실행할 수 있습니다.

+0

'GL로 업데이트를 추가합니다. GetError()'. 또한 이미지의 매개 변수를 변경하십시오. 그것을 확인하시기 바랍니다. –

관련 문제