OpenGL纹理映射

发布于 2024-09-09 18:56:03 字数 201 浏览 4 评论 0原文

我在 openGL 的屏幕上绘制了两个对象,一个是使用 GLU 对象的球体,一个是纹理映射的星形。无论 z 坐标如何,纹理映射的星星似乎总是绘制在前面。这是正常的 openGL 行为吗?有办法防止这种情况吗?

注意:我正在 worldwind 框架内工作,所以可能是其他原因导致了这种情况。但我只是想知道纹理映射对象出现在前面是否正常?我不这么认为,但我不确定......

I have two objects drawn on screen in openGL, one is a sphere using the GLU object and one is a texture mapped star. Regardless of the z coordinates, the texture mapped star always seems to draw in front. Is this normal openGL behavior? Is there a way to prevent this?

Note: I am working within the worldwind framework, so maybe something else is going on causing this. But I'm just wondering is it normal for the texture mapped objects to appear in front? I don't think so but I'm not sure...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

要走干脆点 2024-09-16 18:56:03

这不是世界风中的错误,这实际上是期望的行为。使用 glVertex2f() 与使用 glVertex3f() 并设置 z = 0 相同。因此它只是在非常靠近观察者的平面上绘制星星(也取决于您的投影)。

要解决您的问题,您可以使用 glDepthMask(0) 禁用深度写入,然后绘制星星,调用 glDepthMask(1) 然后绘制球体,该球体现在位于星星的前面。

您还可以在星体上使用 glDepthFunc(GL_GREATER) 或在球体上使用 glDisable(GL_DEPTH_TEST) 来快速达到相同的效果。

要使任何事情变得更复杂(例如星星与球体相交),您需要使用矩阵将星星放在所需的位置。

This isn't a bug in worldwind, this is actually desired behavior. Using glVertex2f() is the same as using glVertex3f() and setting z = 0. So it simply draws the star at a plane very close to the viewer (also depending on your projection).

To solve your issue, you can either disable depth writes using glDepthMask(0), then draw the star, call glDepthMask(1) and then draw the sphere, which will now be in front of the star.

You can also use glDepthFunc(GL_GREATER) on the star or glDisable(GL_DEPTH_TEST) on the sphere to quickly achieve the same effect.

To make anything more complicated (such as star intersecting the sphere), you need to use matrices to put the star at the desired position.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文