OpenGL绘制半透明物体技巧

阅读: 评论:0

OpenGL绘制半透明物体技巧

OpenGL绘制半透明物体技巧

转载自绘制半透明物体

一、使用混合来实现半透明效果

  • 混合是什么呢?混合就是把两种颜色混在一起。具体一点,就是把某一像素位置原来的颜色和将要画上去的颜色,通过某种方式混在一起,从而实现特殊的效果。
  • 假设我们需要绘制这样一个场景:透过红色的玻璃去看绿色的物体,那么可以先绘制绿色的物体,再绘制红色玻璃。在绘制红色玻璃的时候,利用“混合”功能,把将要绘制上去的红色和原来的绿色进行混合,于是得到一种新的颜色,看上去就好像玻璃是半透明的。
  • 要使用OpenGL的混合功能,只需要调用:glEnable(GL_BLEND); 即可。
  • 要关闭OpenGL的混合功能,只需要调用:glDisable(GL_BLEND); 即可。
  • 注意:只有在RGBA模式下,才可以使用混合功能,颜色索引模式下是无法使用混合功能的。源因子和目标因子是可以通过glBlendFunc函数来进行设置的。

二、二维图形混合

三、三维混合

  • 深度缓冲是这样一段数据,它记录了每一个像素距离观察者有多近。在启用深度缓冲测试的情况下,如果将要绘制的像素比原来的像素更近,则像素将被绘制。否则,像素就会被忽略掉,不进行绘制。这在绘制不透明的物体时非常有用——不管是先绘制近的物体再绘制远的物体,还是先绘制远的物体再绘制近的物体,或者干脆以混乱的顺序进行绘制,最后的显示结果总是近的物体遮住远的物体。
  • 然而在你需要实现半透明效果时,发现一切都不是那么美好了。**如果你绘制了一个近距离的半透明物体,则它在深度缓冲区内保留了一些信息,使得远处的物体将无法再被绘制出来。**虽然半透明的物体仍然半透明,但透过它看到的却不是正确的内容了。
  • 要解决以上问题,需要在绘制半透明物体时将深度缓冲区设置为只读 ,这样一来,虽然半透明物体被绘制上去了,深度缓冲区还保持在原来的状态 。如果再有一个物体出现在半透明物体之后,在不透明物体之前,则它也可以被绘制(因为此时深度缓冲区中记录的是那个不透明物体的深度)。以后再要绘制不透明物体时,只需要再将深度缓冲区设置为可读可写的形式即可。
  • 怎么绘制一个 一部分半透明一部分不透明 的物体?只需要把物体分为两个部分,一部分全是半透明的,一部分全是不透明的,分别绘制就可以了。
  • 即使使用了以上技巧,我们仍然不能随心所欲的按照混乱顺序来进行绘制。必须是先绘制不透明的物体,然后绘制透明的物体

总结起来,绘制顺序就是:

  • 首先绘制所有不透明的物体。如果两个物体都是不透明的,则谁先谁后都没有关系。
  • 然后,将深度缓冲区设置为只读。接下来,绘制所有半透明的物体。如果两个物体都是半透明的,则谁先谁后只需要根据自己的意愿(注意了,先绘制的将成为“目标颜色”,后绘制的将成为“源颜色”,所以绘制的顺序将会对结果造成一些影响)。
  • 最后,将深度缓冲区设置为可读可写形式
    • 调用glDepthMask(GL_FALSE);可将深度缓冲区设置为只读形式。
    • 调用glDepthMask(GL_TRUE);可将深度缓冲区设置为可读可写形式。

本文发布于:2024-02-01 22:16:03,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170679696439776.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:物体   技巧   OpenGL
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23