osg.StateAttribute提供了一种处理OpenGL状态的方法。它是OpenSceneGraph中的一个基本类,用于管理OpenGL状态和渲染状态的状态属性。
osg.StateAttribute提供了一些方法,允许您更改和查询OpenGL状态。状态属性包括blend模式、深度测试模式、材料模式等等。
osg.StateAttribute对于OpenGL绑定状态的开销非常小,它封装了OpenGL状态,并且在启用和禁用它们时,使用了有效的OpenGL API调用。
osg.StateAttribute是一个抽象类,有许多派生类,其中包括:osg::AlphaFunc、osg::BlendFunc、osg::ClipPlane等等。
osg.StateAttribute类是所有osg.StateAttribute派生类的基类。 它定义了一些公共接口和成员变量。
成员变量:
| 变量名 | 类型 | 描述 |
|---|---|---|
| m_type | osg::StateAttribute::Type | osg::StateAttribute类型,是一个枚举。 |
| m_modeSet | bool | 指示是否显式设置状态。 |
| m_released | bool | 指示状态是否被释放并且可以重新使用。 |
方法:
| 方法名 | 描述 |
|---|---|
| getType() | 返回StateAttribute类型。 |
| getModeSet() | 指示是否显式设置了状态。 |
| setModeSet(bool) | 设置状态是否显式设置。 |
| getReleased() | 指示状态是否被释放并且可以重新使用。 |
| setReleased(bool) | 设置状态是否被释放并且可以重新使用。 |
| apply(osg::State&) | 应用状态属性。 |
osg::AlphaFunc是osg.StateAttribute的一个派生类,表示GL_ALPHA_TEST状态。
成员变量:
| 变量名 | 类型 | 描述 |
|---|---|---|
| m_func | GLenum | 等于或大于的Alpha测试功能。 |
| m_refValue | GLclampf | 参考alpha值用于比较alpha测试后的结果。 |
方法:
| 方法名 | 描述 |
|---|---|
| AlphaFunc() | 构造函数。 |
| getType() | 返回StateAttribute类型。 |
| getFunc() | 返回alpha测试功能。 |
| setFunc(GLenum) | 设置alpha测试功能。 |
| getRefValue() | 返回参考alpha值。 |
| setRefValue(GLclampf) | 设置参考alpha值,用于比较alpha测试后的结果。 |
| apply(osg::State&) | 应用状态属性。 |
osg::BlendFunc是osg.StateAttribute的一个派生类,表示GL_BLEND状态。
成员变量:
| 变量名 | 类型 | 描述 |
|---|---|---|
| m_sfactor | GLenum | 源颜色因子函数。 |
| m_dfactor | GLenum | 目标颜色因子函数。 |
| m_alphaSFactor | GLenum | Alpha源颜色因子函数。 |
| m_alphaDFactor | GLenum | Alpha目标颜色因子函数。 |
方法:
| 方法名 | 描述 |
|---|---|
| BlendFunc() | 构造函数。 |
| getType() | 返回StateAttribute类型。 |
| getSource() | 返回源颜色因子函数。 |
| getDestination() | 返回目标颜色因子函数。 |
| setFunction(GLenum src, GLenum dest) | 设置源和目标颜色因子函数。 |
| getAlphaSource() | 返回Alpha源颜色因子函数。 |
| getAlphaDestination() | 返回Alpha目标颜色因子函数。 |
| setAlphaFunction(GLenum src, GLenum dest) | 设置Alpha源和目标颜色因子函数。 |
| apply(osg::State&) | 应用状态属性。 |
osg::BlendColor是osg.StateAttribute的一个派生类,表示GL_BLEND_COLOR状态。
成员变量:
| 变量名 | 类型 | 描述 |
|---|---|---|
| m_color | osg::Vec4 | 混合颜色。 |
方法:
| 方法名 | 描述 |
|---|---|
| BlendColor() | 构造函数。 |
| getType() | 返回StateAttribute类型。 |
| getColor() | 返回混合颜色。 |
| setColor(const osg::Vec4&) | 设置混合颜色。 |
| apply(osg::State&) | 应用状态属性。 |
osg::CullFace是osg.StateAttribute的一个派生类,表示GL_CULL_FACE状态。
成员变量:
| 变量名 | 类型 | 描述 |
|---|---|---|
| m_mode | GLenum | 裁剪面的方向。 |
方法:
| 方法名 | 描述 |
|---|---|
| CullFace() | 构造函数。 |
| getType() | 返回StateAttribute类型。 |
| getMode() | 返回裁剪面的方向。 |
| setMode(GLenum) | 设置裁剪面的方向。 |
| apply(osg::State&) | 应用状态属性。 |
osg::Depth是osg.StateAttribute的一个派生类,表示GL_DEPTH_TEST状态和GL_DEPTH_WRITEMASK状态。
成员变量:
| 变量名 | 类型 | 描述 |
|---|---|---|
| m_func | GLenum | 深度测试功能(GL_NEVER,GL_ALWAYS等)。 |
| m_mask | GLboolean | 是否允许深度写入(GL_TRUE或GL_FALSE)。 |
| m_range | osg::Vec2 | 远近平面(near,far)对应近和远Z范围的线性缩放和偏移量。(1/near,1/far) |
| m_units | GLfloat | 用于法线贴图等的深度换算值(默认为1.0)。 |
| m_fboAttachment | GLenum | 要将此状态属性附加到的FBO附件点。 |
方法:
| 方法名 | 描述 |
|---|---|
| Depth() | 构造函数。 |
| getType() | 返回StateAttribute类型。 |
| setFunction(GLenum) | 设置深度测试功能。 |
| getFunction() | 返回深度测试功能。 |
| setWriteMask(GLboolean) | 设置是否允许深度写入。 |
| getWriteMask() | 返回是否允许深度写入。 |
| setRange(float, float) | 设置近和远Z范围的线性缩放和偏移量。 |
| getRange() | 返回近和远Z范围的线性缩放和偏移量。 |
| setUnits(GLfloat) | 设置用于法线贴图等的深度换算值。 |
| getUnits() | 返回用于法线贴图等的深度换算值。 |
| setFBOAttachment(GLenum) | 设置要将此状态属性附加到的FBO附件点。 |
| getFBOAttachment() | 返回要将此状态属性附加到的FBO附件点。 |
| apply(osg::State&) | 应用状态属性。 |
osg::LineWidth是osg.StateAttribute的一个派生类,表示GL_LINE_WIDTH状态。
成员变量:
| 变量名 | 类型 | 描述 |
|---|---|---|
| m_width | GLfloat | 线宽度(默认为1.0)。 |
方法:
| 方法名 | 描述 |
|---|---|
| LineWidth() | 构造函数。 |
| getType() | 返回StateAttribute类型。 |
| setWidth(GLfloat) | 设置线宽度。 |
| getWidth() | 返回线宽度。 |
| apply(osg::State&) | 应用状态属性。 |
osg::Material是osg.StateAttribute的一个派生类,表示材质状态属性。
成员变量:
| 变量名 | 类型 | 描述 |
|---|---|---|
| m_ambient | osg::Vec4 | 环境颜色。 |
| m_diffuse | osg::Vec4 | 漫反射颜色。 |
| m_specular | osg::Vec4 | 镜面反射颜色。 |
| m_emission | osg::Vec4 | 自发光颜色。 |
| m_shininess | GLfloat | 镜面反射系数(0-128之间)。 |
| m_colorMode | GLenum | 模式。默认为GL_AMBIENT_AND_DIFFUSE,包括环境和漫反射颜色。 |
| m_transparency | osg::Vec4 | 不透明度。 |
方法:
| 方法名 | 描述 |
|---|---|
| Material() | 构造函数。 |
| getType() | 返回StateAttribute类型。 |
| setAmbient(osg::Vec4) | 设置环境颜色。 |
| setDiffuse(osg::Vec4) | 设置漫反射颜色。 |
| setSpecular(osg::Vec4) | 设置镜面反射颜色。 |
| setEmission(osg::Vec4) | 设置自发光颜色。 |
| setShininess(GLfloat) | 设置镜面反射系数。 |
| setAlpha(osg::Vec4) | 设置不透明度。 |
| setAlpha(float) | 设置不透明度(通过缩放rgba分量而不是设置a分量)。 |
| setColorMode(GLenum) | 设置材质状态属性的模式。 |
| getAmbient() | 获取环境颜色。 |
| getDiffuse() | 获取漫反射颜色。 |
| getSpecular() | 获取镜面反射颜色。 |
| getEmission() | 获取自发光颜色。 |
| getShininess() | 获取镜面反射系数。 |
| getAlpha() | 获取不透明度。 |
| getColorMode() | 获取材质状态属性的模式。 |
| apply(osg::State&) | 应用状态属性。 |
osg::PolygonMode是osg.StateAttribute的一个派生类,表示GL_POLYGON_MODE状态。
成员变量:
| 变量名 | 类型 | 描述 |
|---|---|---|
| m_face | GLenum | 多边形面(GL_FRONT,GL_BACK,GL_FRONT_AND_BACK)。默认为GL_FRONT_AND_BACK。 |
| m_mode | GLenum | 多边形渲染模式(GL_POINT、GL_LINE或GL_FILL)。默认为GL_FILL。 |
方法:
| 方法名 | 描述 |
|---|---|
| PolygonMode() | 构造函数。 |
| getType() | 返回StateAttribute类型。 |
| setMode(GLenum) | 设置多边形渲染模式。 |
| getMode() | 返回多边形渲染模式。 |
| setFace(GLenum) | 设置多边形面。 |
| getFace() | 返回多边形面。 |
| apply(osg::State&) | 应用状态属性。 |
osg::ShadeModel是osg.StateAttribute的一个派生类,表示GL_SHADE_MODEL状态。
成员变量:
| 变量名 | 类型 | 描述 |
|---|---|---|
| m_mode | GLenum | 阴影模式(GL_FLAT或GL_SMOOTH)。默认为GL_SMOOTH。 |
方法:
| 方法名 | 描述 |
|---|---|
| ShadeModel() | 构造函数。 |
| getType() | 返回StateAttribute类型。 |
| setMode(GLenum) | 设置阴影模式。 |
| getMode() | 返回阴影模式。 |
| apply(osg::State&) | 应用状态属性。 |
osg::Stencil是osg.StateAttribute的一个派生类,表示GL_STENCIL_TEST状态。
成员变量:
| 变量名 | 类型 | 描述 |
|---|---|---|
| m_func | GLenum | 确定是否应该进行模板测试的函数。 |
| m_writemask | GLuint | 写入掩码,用于根据掩码更改当前的值和参考值。 |
| m_ref | GLuint | 模板参考值。 |
| m_mask | GLuint | 模板掩码。 |
| m_sfail | GLenum | stencil失败操作。 |
| m_zfail | GLenum | 深度失败操作。 |
| m_zpass | GLenum | 深度通过操作。 |
| m_front | osg::StateAttributeRefPtr | 前向面状态属性。 |
| m_back | osg::StateAttributeRefPtr | 后向面状态属性。 |
| m_clearFront | bool | 指示是否应该清除前向面的模板缓冲区。 |
| m_clearBack | bool | 指示是否应该清除后向面的模板缓冲区。 |
方法:
| 方法名 | 描述 |
|---|---|
| Stencil() | 构造函数。 |
| getType() | 返回StateAttribute类型。 |
| setFunction(GLenum, GLuint, GLuint) | 设置模板测试函数和参考值和掩码。 |
| setWriteMask(GLuint) | 设置模板写入掩码。 |
| setOperation(GLenum, GLenum, GLenum) | 设置模板操作。 |
| setFront(osg::StateAttribute*) | 设置前向面状态属性。 |
| setBack(osg::StateAttribute*) | 设置后向面状态属性。 |
| setClear(bool, bool) | 设置是否清除前向和后向面的模板缓冲区。 |
| getFunction() | 获取当前的模板测试函数和参考值和掩码。 |
| getWriteMask() | 获取模板写入掩码。 |
| getOperation() | 获取当前的模板操作。 |
| getFront() | 获取前向面状态属性。 |
| getBack() | 获取后向面状态属性。 |
| getClearFront() | 获取是否清除前向面的模板缓冲区。 |
| getClearBack() | 获取是否清除后向面的模板缓冲区。 |
| apply(osg::State&) | 应用状态属性。 |
osg::Texture是osg.StateAttribute的一个派生类,表示纹理属性。
成员变量:
| 变量名 | 类型 | 描述 |
|---|---|---|
| m_internalFormat | GLint | 纹理内部格式。 |
| m_sourceFormat | GLenum | 纹理源格式。 |
| m_sourceType | GLenum | 纹理源类型。 |
| m_textureDepth | GLsizei | 纹理深度(3D或CUBE_MAP)。 |
| m_textureWidth | GLsizei | 纹理宽度。 |
| m_textureHeight | GLsizei | 纹理高度。 |
| m_textureBorderWidth | GLint | 纹理边框宽度。 |
| m_filter | GLenum | 纹理过滤。 |
| m_wrapS | GLenum | S轴变换(纹理坐标)的包装。 |
| m_wrapT | GLenum | T轴变换(纹理坐标)的包装。 |
| m_wrapR | GLenum | R轴变换(纹理坐标)的包装。 |
| m_unRefImageDataAfterApply | bool | 指示是否在为纹理使用图像数据之后不再引用该数据。 |
| m_clientStorage | bool | 指示是否应禁止使用服务器映射存储,而应记住TexSubImage调用的指针,以便在必要时正确更新纹理图像。 |
| m_data | osg::Referenced* | 指向纹理数据的指针。 |
方法:
| 方法名 | 描述 |
|---|---|
| Texture() | 构造函数。 |
| getType() | 返回StateAttribute类型。 |
| setInternalFormat(GLint) | 设置纹理内部格式。 |
| setSourceFormat(GLenum |