setRenderingHint(osg::StateSet::CULL_BACK)和setMode(GL_CULL_FACE, osg::StateAttribute::ON有什么区别
时间: 2024-02-03 20:02:24 浏览: 120
osg::StateSet 中的 setRenderingHint 方法和 setMode 方法都可以用于设置 OpenGL 的渲染模式,但它们的具体作用略有不同。
- setRenderingHint(osg::StateSet::CULL_BACK):设置背面剔除模式。在进行渲染时,OpenGL 会根据三角形的朝向来判断哪些面需要渲染,背面剔除模式就是根据三角形面的朝向来剔除背面的面(即不可见的面),从而提高渲染效率。当使用 setRenderingHint(osg::StateSet::CULL_BACK) 方法时,相当于设置了背面剔除模式并启用了剔除背面的面。
- setMode(GL_CULL_FACE, osg::StateAttribute::ON):也是设置背面剔除模式。当使用 setMode(GL_CULL_FACE, osg::StateAttribute::ON) 方法时,相当于开启了背面剔除模式,并且可以通过其他参数(如 glCullFace(GL_FRONT))来设置剔除的面为正面还是背面。
因此,两种方法的作用是相同的,都是用于设置背面剔除模式。区别在于 setRenderingHint 方法是 osg::StateSet 的方法,可以设置一些状态集的属性,而 setMode 方法则是 OpenGL 的方法,可以在任意地方调用。另外,setRenderingHint 方法的作用范围更为广泛,可以设置其他的渲染提示,而 setMode 方法仅用于设置背面剔除模式。
相关问题
state->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
这段代码的作用是设置节点的渲染提示(Rendering Hint),使得节点在渲染时被放置在透明渲染队列(Transparent Bin)中。
在 OpenSceneGraph 中,渲染提示是一种用来控制节点渲染顺序和方式的机制。不同的渲染提示可以将节点放置在不同的渲染队列中,从而实现不同的渲染效果。其中,TRANSPARENT_BIN 是一种透明渲染队列,用来处理具有透明效果的节点。
通过调用 state->setRenderingHint(osg::StateSet::TRANSPARENT_BIN) 这段代码,我们将节点的渲染提示设置为 TRANSPARENT_BIN,这样在渲染时该节点就会被放置在透明渲染队列中,从而实现透明效果。需要注意的是,设置节点为透明渲染队列时,需要将节点的混合模式设置为启用混合(Blending),以实现透明度的效果。
osg::StateSet都有哪些方法
osg::StateSet类提供了以下常用方法:
1. `addUniform()`:向StateSet中添加Uniform对象。
2. `getUniform()`:获取指定名称的Uniform对象。
3. `setAttribute()`:设置StateAttribute对象。
4. `getAttribute()`:获取指定类型的StateAttribute对象。
5. `setTextureAttribute()`:设置纹理单元的StateAttribute对象。
6. `getTextureAttribute()`:获取指定纹理单元上的StateAttribute对象。
7. `setMode()`:设置渲染模式。
8. `getMode()`:获取渲染模式。
9. `setDataVariance()`:设置数据变化模式。
10. `getDataVariance()`:获取数据变化模式。
11. `setRenderingHint()`:设置渲染提示。
12. `getRenderingHint()`:获取渲染提示。
13. `getBinNumber()`:获取渲染排序号码。
14. `setBinNumber()`:设置渲染排序号码。
15. `setShaderAttributeAndModes()`:设置Shader属性和模式。
16. `getAttributeList()`:获取StateSet中的StateAttribute列表。
17. `getUniformList()`:获取StateSet中的Uniform列表。
这些函数的详细信息可以在OSG的官方文档中找到。
阅读全文