[英]OpenGL ES 1.1 depth buffer not working using MonoTouch on iOS 5
[英]Initializing OpenGL with depth buffer and depth testing
我想在不使用 GLUT 的情况下以独立于平台的方式使用深度缓冲区初始化 OpenGL。
如何使用 c# 包装器移除 OpenGL 场景中的隐藏表面。 我没有使用 GLUT,所以我不能使用 glutInitDisplayMode。 任何的想法?
更多细节:
我发现了这些关于隐藏表面去除的步骤:
通过 glutInitDisplayMode 请求 z-buffer:
// GLUT_DEPTH to request for depth-buffer glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
启用 z-buffer 进行深度测试:
glEnable(GL_DEPTH_TEST);
当我们清除颜色缓冲区时清除 z 缓冲区:
// Clear color and depth buffers glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
据我所知,glutInitDisplayMode 是 GLUT 函数之一。 我可以在没有不良影响的情况下消除这个电话吗? 如果不是,那么可以解决问题的替代纯 opengl 调用是什么。
我正在使用由(Colin P. Fahey)编写的 c# 包装器
GLUT不是OpenGL!
无论GLUT做什么,你的C#包装器也可能提供它,也许更好。 您需要的是深度缓冲和启用深度测试 。
获取深度缓冲区的确切步骤完全取决于您使用的包装器。 因此,告诉我们哪个包装器是必不可少的。
您是否考虑过使用不那么奇怪的界面?古怪的? 我都是为了寻找随机人写的不同而有趣的工具,但这些文档非常糟糕。
我查看了它,看来它的InitializeOpenGL命令不允许你为GL初始化设置任何参数。 完全没有。 这意味着你几乎受控制的支配。
现在,默认情况下它可能会给你一个深度缓冲区(坦率地说,如果没有,那么它就完全没用了,你应该立即放弃它,如果不是更快的话)。 但由于没有办法告诉它你想用缓冲区做什么,所以你无法做到确保它。
就个人而言,我建议你放弃这个工具,使用像OpenTK这样的主流。 当然,OpenTK的稳定发布是相当古老的,但它仍然比你现在使用的更好。
这是激活深度缓冲区和启用深度测试的一系列 OpenGL 调用(在 C 中):
GLuint depth_buffer;
// Generate an id for the buffer object
glGenRenderbuffers(1, &depth_buffer);
// Bind the object to the OpenGL context
glBindRenderbuffer(GL_RENDERBUFFER, depth_buffer);
// Allocate storage
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height);
// Attach the depth buffer to the frame buffer
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
GL_RENDERBUFFER, depth_buffer);
// Enable OpenGL depth test
glEnable(GL_DEPTH_TEST);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.