主题:求助
konglings
[专家分:0] 发布于 2011-01-17 10:15:00
你好楼主,本人初学OPENGL,有个问题想请教一下,怎样让我绘制的立方体只显示外侧面不显示内侧面啊?另外为什么我同时绘制两个图形时,总是存在第一个图形的纹理色被第二个图形的填充色影响呢?
回复列表 (共1个回复)
沙发
eastcowboy [专家分:25370] 发布于 2011-01-18 22:08:00
第一个问题:只显示外侧面不显示内侧面。
如果你的立方体是用面来显示而不是线来显示,那很简单,启动深度测试即可:glEnable(GL_DEPTH_TEST);。当然还有一个前提就是你的OpenGL在初始化的时候已经设置了深度缓冲。用以下代码可以查询深度缓冲的位数。若为零,说明没有深度缓冲。
GLint depth;
glGetIntegerv(GL_DEPTH_BITS, &depth);
printf("%d\n", depth);
如果你的立方体是用线来显示,情况就要复杂一些。可以看看这个帖子,里面有图片和示例代码:[url=http://bbs.pfan.cn/post-348190.html]http://bbs.pfan.cn/post-348190.html[/url]
第二个问题:纹理颜色被填充颜色影响。(其实不应该叫“填充颜色”,而应该叫“顶点颜色”,因为颜色是指定到顶点上的)
这个要注意纹理环境,也就是glTexEnv*这个系列的函数。默认情况下,OpenGL把纹理颜色与顶点颜色相乘,得到的结果拿去显示。也就是:glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
如果你在代码里面设置为:glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);这样就可以了。它的意思是直接用纹理的颜色去显示。
其实这个函数还有很多更复杂的用法,从OpenGL 1.3、1.4、1.5,都对这个函数的功能作了扩充,这样一来,使用纹理就可以达到很多种不同的效果。到了OpenGL 2.0,开始注重shader之后,才逐渐不用这个函数了。
我来回复