研究了几天都无解的openGL混合问题

davyaxl 2009-05-21 05:12:09
问题描述:目前以一个一个点绘制的方式画了一个三维模型,现要实现透明度可调的透视效果,而且视点可绕三维模型任意旋转。

实现方式一:利用一个滑动控件获取每个点的alpha值,利用glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)方式实现混合。
存在的问题:正面看效果实现了,但转到背面看就不对了。
问题分析:该方式受绘制顺序的影响.以视点为参照点,由远到近绘制可以实现透视效果.但当视点转到背面后,每个点到视点的距离变了,但绘制函数还是同一个.即绘制顺序没有变,是先画离视点近的点.这样看起来是直接看到了最底下.

实现二:glBlendFunc(GL_SRC_ALPHA,GL_ONE)方式绘制.
存在的问题:该方式实际是直接将每个点的RGB值乘ALPHA后相加,这样就不会有顺序问题.但最后的颜色又不对了,变成了白色.

补充:点为灰度点,即R=G=B.但不是每个点的灰度都一样.

求高人指点其他的实现方式,本人是OPENGL处学者,折腾了几天,实在没什么好方法了.
...全文
98 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
davyaxl 2009-05-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Regulus_ccy 的回复:]
开启深度测试不行吗?
[/Quote]
开了深度测试还怎么透明?

结贴了。没有更好的意见,看来只能是每次排序了
Regulus_ccy 2009-05-26
  • 打赏
  • 举报
回复
开启深度测试不行吗?
davyaxl 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 glacier3d 的回复:]
透明物体的绘制都是由远到近绘制的,所以每帧绘制前都要排序
[/Quote]
总算有个回复了,谢谢。貌似只有这个办法。
但每次转动视点都重新排序,那岂不是要卡死。没法用显示列表了。
aaaa3105563 2009-05-25
  • 打赏
  • 举报
回复
帮顶··
glacier3d 2009-05-23
  • 打赏
  • 举报
回复
透明物体的绘制都是由远到近绘制的,所以每帧绘制前都要排序
davyaxl 2009-05-22
  • 打赏
  • 举报
回复
第一次发帖,没看清默认是20分。加分自己顶

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧