在不透明对象内绘制透明对象

发布于 2024-11-18 15:28:29 字数 502 浏览 3 评论 0原文

我试图在不透明的笼子内绘制一个透明的物体,但无论我尝试什么,我都无法做到正确。

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); 

glDisable(GL_BLEND);

glEnable(GL_DEPTH_TEST);

glEnable(GL_CULL_FACE); 
glCullFace(GL_BACK);

glColor4f(1.0, 1.0, 1.0, 1.0);
drawCage();

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glColor4f(0.0, 0.0, 0.0, 0.5);
drawObject();   

glPopAttrib();

这使得里面的透明物体出现在前面,尽管它在里面。

我做错了什么,可能与我使用的着色器有关

I'm trying to draw a transparent object inside an opaque cage, but what ever I seem to try I can't get it right.

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); 

glDisable(GL_BLEND);

glEnable(GL_DEPTH_TEST);

glEnable(GL_CULL_FACE); 
glCullFace(GL_BACK);

glColor4f(1.0, 1.0, 1.0, 1.0);
drawCage();

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glColor4f(0.0, 0.0, 0.0, 0.5);
drawObject();   

glPopAttrib();

This makes the transparent object within appear in front of the, despite it being inside it.

What am I doing wrong, could it be something to do with the shaders I am using

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

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

发布评论

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

评论(2

风筝在阴天搁浅。 2024-11-25 15:28:29

有几件事。

  1. 检查初始化中的深度函数以及您的像素格式深度缓冲区。
  2. 首先尝试使用标准 gouraud 着色器。
  3. 三次检查透明物体的所有顶点是否都在笼子内。
  4. 每帧使用某种相机旋转,以便您可以从各个角度看到渲染的场景。 (这样你就可以检查是否不小心将对象从里到外渲染了[当我离开一段时间后回到 3D 时经常发生这种情况])

希望有帮助

A few things.

  1. Check the depth function in your initialisation and that your pixel format has a depth buffer.
  2. Try it with the standard gouraud shader first.
  3. Triple check that all the vertices of the transparent object are inside the cage.
  4. Use some sort of camera rotation each frame so that you can see the rendered scene from all angles. (That way you can check if you accidentally rendered the object inside-out [Often happens to me when I go back to 3D after being away for a while])

Hope that helps

日裸衫吸 2024-11-25 15:28:29

那么你的透明度就不会有问题。如果您启用了深度测试,并且您的对象出现在另一个对象的前面,则说明您的几何图形或绘图例程出现了问题。可能是一百万件事,先尝试禁用剔除,然后看看会发生什么。

另一方面,您尝试渲染具有 1.0f alpha 的恒定颜色的透明对象。这意味着完全不透明。你确定吗?

Then you don't have a problem with your transparency. If you've got a depth test enabled, and your object appears in front of the other one, you've got a problem either in your geometry, or in your drawing routine. Could be a million things, try disabling culling first since and see what happens.

On the other hand, you're trying to render a transparent object with a constant colour that has 1.0f alpha. This means fully opaque. Are you sure about that?

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