CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  图形图像/机器视觉

OpenGL中,透明度和深度之间的冲突如何解决?

楼主casia1202(B哥)2005-04-02 18:14:14 在 专题开发/技术/项目 / 图形图像/机器视觉 提问

我现在作一个场景,里面树木的贴图使用mask和blend,以实现部分透明。但我如果去掉深度检测,就会把后面的面显示到前面来。可是加上深度检测,贴图就只对部分对象是透明的,对某些面却是完全遮挡的,请问如何解决?  
   
  代码如下,其中纹理是RGBA格式。如果有好几个这种方块就会发生遮挡,就是说应当透明的部分遮住了后面的物体。  
  glEnable(GL_BLEND);  
  glEnable(GL_DEPTH_TEST);  
   
  glBlendFunc(GL_SRC_ALPHA,   GL_ONE_MINUS_SRC_ALPHA);  
  glBindTexture(GL_TEXTURE_2D,   textureID);  
  glBegin(GL_QUADS);  
          glTexCoord2f(0.0f,   0.0f);   glVertex3f(-0.5f,   -1.1f,     0.0f);  
          glTexCoord2f(1.0f,   0.0f);   glVertex3f(   0.5f,   -1.1f,     0.0f);  
          glTexCoord2f(1.0f,   1.0f);   glVertex3f(   0.5f,     1.1f,     0.0f);  
          glTexCoord2f(0.0f,   1.0f);   glVertex3f(-0.5f,     1.1f,     0.0f);  
  glEnd(); 问题点数:0、回复次数:8Top

1 楼wangziz(zi)回复于 2005-04-02 19:45:06 得分 0

对于透明的东西,要先画远的物体,最好是写两个函数一个比较远近,一个排序,从远画到近。  
  这样的话,打开这两个glEnable(GL_BLEND);glEnable(GL_DEPTH_TEST)的情况下就不会有问题。Top

2 楼syy64(太平洋)回复于 2005-04-02 20:10:22 得分 0

1、glBlendFunc(GL_SRC_ALPHA,   GL_ONE_MINUS_SRC_ALPHA);有很多参数,试试别的参数;  
  2、a值的设置。Top

3 楼casia1202(B哥)回复于 2005-04-02 21:39:27 得分 0

关键就是没法确定远近的物体,因为是立体场景,远近是随时变化的。  
  还有,应该不是glBendFunc的参数问题,alpha值也没问题。  
  要是能贴图我就能把渲染的效果贴出来了Top

4 楼Diab1o(菠萝)回复于 2005-04-02 21:45:59 得分 0

首先对要渲染的表面进行排序,先渲染不透明的表面,把需要透明渲染的表面放到后面。另外较远的物体如果比较近的物体后渲染,会因为深度值检测失败而被OpenGL忽略,所以透明渲染时要关闭深度值写入glDepthMask(0)。Top

5 楼wangziz(zi)回复于 2005-04-03 00:13:04 得分 0

每个3角形的点是可以取到的,那你就把每个物体的所有3角形排序。Top

6 楼chijingde(AD)回复于 2005-04-04 23:13:05 得分 0

画需要透明的时候打开BLEND,关闭DEPTH_TEST  
   
  画其他的时候关闭BLEND,打开DEPTH_TESTTop

7 楼chijingde(AD)回复于 2005-04-04 23:14:04 得分 0

好久没用了  
   
  是不是这样我忘记了  
   
  说错了别笑话我哈Top

8 楼wangziz(zi)回复于 2005-04-06 00:18:15 得分 0

在简单的较小的程序里面要达到目的,打开BLEND,关闭DEPTH_TEST  
  是可以的。  
  Top

相关问题

  • 还原窗体透明度(无透明度)
  • 怎样控制图片的透明度?
  • 如何改变窗体的透明度?
  • 窗体透明度的问题
  • 如何设置图像的透明度????
  • 怎样设置图片的透明度???
  • 冲突???????
  • 如何做成任意透明度的窗体!用VB或VC!
  • 如何设置窗口的透明度!(50分)谢谢
  • 如果调整整个form的透明度?

关键词

  • 物体
  • 渲染
  • 检测
  • 深度
  • gltexcoord2
  • gl
  • glvertex3
  • blend
  • 透明
  • glenable

得分解答快速导航

  • 帖主:casia1202

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo