2012-07-01 2 views
1

iOS 5의 MonoTouch를 사용하여 깊이 버퍼를 사용할 수 없습니다. 표준 "MonoTouch"OpenGL Application "템플릿을 사용하고 있습니다. 깊이 버퍼 (OpenGL은 ES 1.1)iOS 5의 MonoTouch를 사용하는 OpenGL ES 1.1 깊이 버퍼가 작동하지 않습니다.

GL.Enable(All.DepthTest); 
GL.DepthFunc(All.Greater); 
GL.DepthMask(true); 

// Shape A 
GL.DrawArrays (All.TriangleStrip, 0, 4); 

// Shape B (should be behind Shape A) 
GL.Translate (.5f,.5f,.5f); 
GL.DrawArrays (All.TriangleStrip, 0, 4); 

// Shape C (should be in front of Shape A) 
GL.Translate (-1f,-1f,-1f); 
GL.DrawArrays (All.TriangleStrip, 0, 4); 

두 형태 B 및 C는 동일한 것조차 "GL.DepthFunc (All.Never)"로 발생하는 형태 A. 앞에 당겨진다. 깊이 버퍼는 완전히 무시됩니다. 또한 수동으로 코드를 사용하여 (대신 나를 위해 하나를 만들기 위해 MonoTouch/OpenTK "iPhoneOSGameView"에 의존) 깊이 버퍼를 만드는 시도 : 그것은 여전히 ​​작동하지

protected override void CreateFrameBuffer() 
{ 
    base.CreateFrameBuffer();  
    uint depthbuffer=0; 
    GL.Oes.GenRenderbuffers (1, ref depthbuffer); 
    GL.Oes.BindFramebuffer (All.RenderbufferOes, depthbuffer); 
    GL.Oes.RenderbufferStorage (All.RenderbufferOes, All.DepthComponent16Oes, (int) 768, (int) 1024); 
    GL.Oes.FramebufferRenderbuffer (All.FramebufferOes, All.DepthAttachmentOes, All.RenderbufferOes, depthbuffer); 
} 

. 깊이 버퍼를 어떻게 작동시킬 수 있는지 알고 있습니까? 내가 놓친 게 있니?

답변

2

덕분에, 나는 해결책을 발견 : 나는 깊이 버퍼를 만드는 대신 "OpenTK.Graphics.ES11.GL.Oes"에서 사람들의 "OpenTK.Graphics.ES20.GL"의 방법을 사용 . 버퍼가 생성 된 후 나머지 프로그램은 "OpenTK.Graphics.ES11"에서 표준 OpenGL 1.1 메서드를 사용할 수 있습니다. 코드는 다음과 같습니다.

OpenTK.Graphics.ES20.GL.GenRenderbuffers (1,ref depthRenderBuffer); 
OpenTK.Graphics.ES20.GL.BindRenderbuffer (OpenTK.Graphics.ES20.All.Renderbuffer, depthRenderBuffer); 
OpenTK.Graphics.ES20.GL.RenderbufferStorage (OpenTK.Graphics.ES20.All.Renderbuffer, OpenTK.Graphics.ES20.All.DepthComponent16, Size.Width, Size.Height); 
OpenTK.Graphics.ES20.GL.FramebufferRenderbuffer (OpenTK.Graphics.ES20.All.Framebuffer, OpenTK.Graphics.ES20.All.DepthAttachment, OpenTK.Graphics.ES20.All.Renderbuffer, depthRenderBuffer); 
1

다음을 시도해보십시오.

GL.ClearDepth(1.0f);  
GL.Enable(All.DepthTest); 
GL.DepthFunc(All.Lequal); 

또한 각 렌더링의 깊이를 지우는 것을 잊지 마십시오.

저는 배우는 동안 Github의 MonoTouch를 사용하여 NeHe 수업을위한 코드를 게시했습니다. This은 깊이 테스트가 필요한 첫 번째 수업으로 내게 더 많은 정보를 제공합니다. NeHe-Lesson 홈즈가 게시에

+0

링크를 제공해 주셔서 감사합니다. 그것은 매우 도움이되었습니다. "OpenTK.Graphics.ES11.GL.Oes"에있는 메서드 대신 "OpenTK.Graphics.ES20.GL"의 메서드를 사용하여 깊이 버퍼를 만드는 방식으로 작동하도록했습니다. 버퍼가 생성 된 후 나머지 프로그램은 "OpenTK.Graphics.ES11"에서 표준 OpenGL 1.1 메서드를 사용할 수 있습니다. – Heiko

관련 문제