我要发帖 回复

中级会员

27

主题

124

积分

0

专家分

:

私信
发表时间 : 2009-5-13 20:47:27 | 浏览 : 2429    评论 : 9
我读取了一个汽车模型,但是原本应该透明的玻璃却不透明了,不知该如何处理?
    谢谢

最近VR访客

hf_hero 评论于2009-5-13 21:57:52
楼主,建议好好学学Opengl吧。需要开启alpha测试,nehe里有例子。
“原本应该透明的玻璃却不透明了”,不知什么意思?
yaojianfu 评论于2009-5-17 14:17:06
谢谢,采用了alpha测试,设置为"测试玻璃的部分的时候不通过",这样本来应该绘制玻璃块不再绘制,这样从模型的外面可以看见模型内部,但是这样是通过缺少绘制来实现透明,实际上玻璃并没有绘制,有没有方法来绘制透明的玻璃?
tan_dunming 评论于2009-5-17 14:30:21
glEnable(GL_BLEND);
glBlendFunc(……);
glEnable(GL_ALPHA_TEST);
glAlphaFunc(……);

[ 本帖最后由 tan_dunming 于 2009-5-17 02:31 PM 编辑 ]
追求卓越
yaojianfu 评论于2009-5-17 19:43:39
版主可不可以再详细地解释一下,谢谢!
yaojianfu 评论于2009-5-21 17:49:24
此问题已经解决,谢谢
hjzheng567 评论于2009-6-13 20:36:19
怎么解决的啊,急切期待中,楼上的兄弟能否赐教
yaojianfu 评论于2009-6-28 20:44:49
在绘制的时候判断每一个面的是否是玻璃,如果是玻璃的话,就采用融合,如果当前的面不是玻璃就不关闭融合,下面是相关的代码
因为模型不是我制作的,所以我根据每一个面的ALPHA值来判断是否是玻璃,(我感觉这种方法不好没有通用性)
                                if (temp_materials.transparency>0.5)       
                                {
                                        glDepthMask(GL_FALSE);

                                        glEnable(GL_BLEND);
                                        glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
                                }
                                else
                                {
                                        glDisable(GL_BLEND);

                                        glDepthMask(GL_TRUE);
                                }

                                glColor4f( temp_materials.diffuseColor[0],
                                                   temp_materials.diffuseColor[1],
                                                   temp_materials.diffuseColor[2],
                                                   temp_materials.transparency
                                                   );
                                glBegin(GL_TRIANGLES);//绘制一个面(三角形)
                                        glVertex3fv(pointarray_stack[*(temp_faceindex+0)]);
                                        glVertex3fv(pointarray_stack[*(temp_faceindex+1)]);
                                        glVertex3fv(pointarray_stack[*(temp_faceindex+2)]);
                                glEnd();

评分

参与人数 1积分 +10 收起 理由
tan_dunming + 10 热心回答问题

查看全部评分

hjzheng567 评论于2009-12-15 08:59:20
谢谢,yaojianfu
hjzheng567 评论于2009-12-15 10:00:05
补充:前面那些设置一定要写在glBegin()的外面哦,我说怎么老是调不出来,谢谢yaojianfu

手机版|VR开发网 ( 津ICP备18009691号 ) 统计 网安备12019202000257

GMT+8, 2020-9-25 09:44 PM

返回顶部