您的位置:首页 > 其它

OSG设置纹理和渲染属性

2016-07-21 09:34 337 查看
1、渲染属性和模式

1.1 OpenGL中的渲染状态设置

    对于实时三维场景仿真系统,为了保证其真实性,一般来说,开发者都不得不尽量减少加载模型的顶点数目,以降低系统和显卡的运算负荷。例如,一个圆柱体的侧面可以用少量的母线来组成,从而呈现出一种不平滑的效果;再比如在三维游戏中,人物的手脚只用有限几个四边形面片组成,这在近距离观察的时候会有很明显的粗糙不平的现象。不过,通过使用纹理和光照的配合,我们可以很好地屏蔽这些不足,使场景渲染达到一种接近真实世界的水准。

    OpenGL提供了大量用于增强场景渲染性能的渲染状态宏,只要预先设置好这些宏的参数,并在适当的时候启动或者禁用宏,就可以实现多种多样的场景描述效果。这一切都可归功于OpenGL的状态机机制,即用户输入的某一渲染状态会一直保留,知道用户再次改变它们为止。常见的各种渲染状态量包括光照、材质、雾效、图像融合(Blend)、多边形偏移(Polygon Offset)等,只要与之相关的参数一经设置,不手动修改的话,便会始终作用在所有在场景中绘制的对象上。

    但是OpenGL中几何体的绘制工作确并非是渲染状态的一种。我们可以将几何图元序列视为一组传入OpenGL管线的指令集合,而当前指定的各种渲染状态也会随着这组图元集合被一同送入绘制管线,例如当前的线宽、多边形偏移量、点大小和纹理属性等。

1.2 节点的渲染状态几何

    OSG采用包围体层次的形式来构建不同层次、不同功能的场景节点,每一个节点都可以保存多种类型的渲染属性和模式;而父子节点之间则存在多种渲染状态的继承关系。我们将一个节点所赋予的多个渲染状态,包括各种属性(Attribute)和模式(Mode),称为一个渲染状态集合,并使用StateSet来来表示。

    OSG中用于表达渲染属性的StateAttribute类及其派生类的工作,就是将OpenGL的各个渲染属性参数按照其类型进行分组和封装,并通过setAttribute()函数设置给某个节点的渲染状态集;对于纹理相关的属性,还需要额外指定一个纹理单元并使用setTexutureAttribute()进行传递;属性和模式相互绑定时,则可以直接使用setAttributeAndModes()或者setTextureAttributeAndModes()。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: