关于opengl混合的一些道道

            首先,不需要混合的,也就是那些不透明的,咱先放在最前面渲染;

            接着,咱用以下语句来开始混合操作:

           

//绘制半透明物件//
	::glEnable(GL_BLEND);
	//glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);//亮度是不变
	//::glBlendFunc(GL_DST_COLOR , GL_ONE_MINUS_SRC_ALPHA);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE); //光亮效果
	//glBlendFunc( GL_SRC_ALPHA,GL_DST_ALPHA); //perferct
	//glBlendFunc(GL_ONE, GL_ONE);         //简单的颜色叠加
	//glBlendFunc( GL_ONE,GL_ONE_MINUS_SRC_ALPHA);//源颜色完全的参与混合,目标颜色
	//glBlendFunc( GL_ONE,GL_DST_ALPHA);    //比较明亮
	
	//::glEnable(GL_ALPHA_TEST);
	//::glAlphaFunc(GL_GREATER, 0.5);           //alpha大于0.5的显示,其余透明

	::glDepthMask(GL_FALSE);                    // 下面将绘制半透明物件了,因此将深度缓冲设置为只读
	::glEnable(GL_DEPTH_TEST);                  //打开深度测试
	::glClear(GL_DEPTH_BUFFER_BIT);             //清深度缓存区
         这里插入要渲染的东东。。。

          最后别忘了

    

glDepthMask(GL_TRUE);                  //半透明物体绘制完毕后,将深度缓存设置为可读可写


        来一点总结吧,glBlendFunc(s,d);其中s代表源因子,d代表目的因子,源因子是即将绘上去的物体,目的因子是已经绘上去的物体,so,这两个因子的值不同组合时,会产生不同的混合效果。所以,绘制的先后顺序,还是会影响效果的。。。不信,你试试这个组合glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);//亮度是不变

就看你是想突出哪个物体的颜色了。。。光照当然很重要,立体的效果都是它给照的嘛。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值