osgSim::InsertImpostorsVisitor
类是 OpenSceneGraph 中的实现类,用于在场景图中插入傀儡体(Impostors),用于当物体在远距离处时使用代替原始几何体,以提高渲染性能。
继承自 osg::NodeVisitor
。
InsertImpostorsVisitor();
默认构造函数。创建一个没有任何傀儡体的 osgSim::InsertImpostorsVisitor
.
InsertImpostorsVisitor(osg::Camera* camera, const osg::ref_ptr<osg::Texture2D>& depth_or_color_texture, const osg::ref_ptr<osg::Texture2D>& texture, const osg::Vec4& clear_color=osg::Vec4(1.0,1.0,1.0,1.0), bool use_depth_texture=true, unsigned int texture_unit=0, unsigned int num_levels=6, unsigned int min_pixels=16, unsigned int max_pixels=256, bool immediate=false);
创建一个新的 osgSim::InsertImpostorsVisitor
实例,其中包含了一个其他参数中指定的傀儡体。这个构造函数可以通过设置实参 immediate
来指定傀儡体是立即渲染还是只是渲染时再插入。
virtual void reset();
用于重置 InsertImpostorsVisitor 中的缓存和状态变量,以进行另一遍遍历。
virtual void apply(osg::Node& node);
应用 osg::Node
的重载函数。在这个实现中,osg::Node
将单独的函数应用到节点管理器。
virtual void apply(osg::MatrixTransform& node);
当节点是 MatrixTransform 类型时,这个重载函数将把节点的当前变换矩阵保存到临时矩阵变量恢复另外一个变量,然后继续向下遍历场景图。
virtual void apply(osg::Geode& node);
当节点是 Geode 类型时,这个重载函数将遍历 Geode 中的几何图形,并对每个几何图形应用 InsertImpostorsVisitor。从而创建相应的傀儡体代替原始几何体。
virtual void setImpostorSize(unsigned int min_pixels, unsigned int max_pixels, unsigned int num_levels=6);
设置傀儡体的最小和最大像素大小,以及傀儡体的级别数。
virtual unsigned int getMinPixels();
获取傀儡体的最小像素大小。
virtual unsigned int getMaxPixels();
获取傀儡体的最大像素大小。
virtual void setTextureUnit(unsigned int texture_unit);
设置用于傀儡体的纹理单元。
virtual unsigned int getTextureUnit() const;
获取用于傀儡体的纹理单元。
virtual void setClearColor(const osg::Vec4& clear_color);
设置傀儡体所用深度的清除颜色。
virtual osg::Vec4& getClearColor();
获取傀儡体所用深度的清除颜色。
virtual void setUseDepthTexture(bool use_depth_texture);
设置是否使用傀儡体所用深度纹理。
virtual bool getUseDepthTexture() const;
获取是否使用傀儡体所用深度纹理。
virtual void setImmediate(bool immediate);
设置傀儡体是否立即渲染,默认为 false。
virtual bool getImmediate() const;
获取傀儡体是否立即渲染。
virtual void setCamera(osg::Camera* camera);
设置用于创建傀儡体的相机。
virtual osg::Camera* getCamera();
获取用于创建傀儡体的相机。
virtual void setColorTexture(osg::Texture2D* color_texture, unsigned int texture_unit=0);
设置储存傀儡体颜色的纹理,并设置其在哪个纹理单元上使用。
virtual void setDepthTexture(osg::Texture2D* depth_texture, unsigned int texture_unit=0);
设置储存傀儡体深度的纹理,并设置其在哪个纹理单元上使用。