赞
踩
在osg中,需要加入场景中的图形,都会加入场景图形类gruop中,来管理。
其中几何体类为:Geode
Geode类中,包含了渲染用的几何数据,包括:
Drawable:Drawable 类是用于存储几何数据信息的基类,Geode 维护了 一个 Drawable 的列表。Drawable 是纯虚类,无法直接实例化。用户必 须实例化其派生类,如 Geometry,或者 ShapeDrawable(允许用户程序 绘制预定义的几何形状,如球体、圆锥体和长方体)。
Geometry:Geometry 类与 PrimitiveSet 类相关联,实现了对 OpenGL 顶 点数组功能的高级封装。Geometry 保存顶点数组的数据,纹理坐标,颜色,以及法线数组。
PrimitiveSet:PrimitiveSet 类提供了 OpenGL 顶点数组绘图命令的高层次 支持。用户可以从相关的 Geometry 类中取得保存的数据,再使用这个 类来指定要绘制的几何体数据的类型。
Vector(Vec2,Vec3 等):OSG 提供了预定义好的二维,三维和四维元素向量,支持 float 或者 double 类型。使用这些向量来指定顶点、颜 色、法线和纹理坐标的信息。
Array(Vec2Array,Vec3Array 等):OSG 定义了一些常用的数组类型, 如用于贴图纹理坐标的 Vec2Array。指定顶点数组数据时,程序首先将 几何数据保存到这些数组中,然后传递至 Geometry 类对象。
#include <osgViewer/Viewer> #include <osgDB/ReadFile> #include <osg/Node> #include <osg/Geode> #include <osg/Geometry> #include <osg/LineWidth> int main(int argc, char** argv) { osgViewer::Viewer view; osg::ref_ptr<osg::Group> group= new osg::Group; osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry; // 设置顶点数组 osg::ref_ptr<osg::Vec3Array> vertexArray = new osg::Vec3Array; geometry->setVertexArray(vertexArray); vertexArray->push_back(osg::Vec3(0.f, 0.f, 0.f)); vertexArray->push_back(osg::Vec3(1.f, 0.f, 0.f)); vertexArray->push_back(osg::Vec3(1.f, 1.f, 1.f)); vertexArray->push_back(osg::Vec3(0.f, 1.f, 1.f)); // 设置颜色数组 osg::ref_ptr<osg::Vec4Array> colorArray = new osg::Vec4Array(); geometry->setColorArray(colorArray, osg::Array::BIND_OVERALL); colorArray->push_back(osg::Vec4(1.f, 1.f, 0.f, 1.f)); //设置顶点关联方式 geometry->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINE_LOOP, 0, 4)); // 加入Geode类 osg::ref_ptr<osg::Geode> geode= new osg::Geode(); geode->addDrawable(geometry); group->addChild(geode); view.setSceneData(group); view.run(); return 0; }
addPrimitiveSet绘制方式:
mode | 关联方式 | 作用 |
---|---|---|
POINTS | 绘制点 | 绘制用户指定的所有顶点。 |
LINES | 绘制直线 | 直线的起点、终点由数组中先后相邻的两个点决定;用户提供的点不止两个时,将尝试继续绘制新的直线。 |
LINE_STRIP | 绘制多段直线 | 多段直线的第一段由数组中的前两个点决定;其余段的起点位置为上一段的终点坐标,而终点位置由数组中随后的点决定。 |
LINE_LOOP | 绘制封闭直线 | 绘图方式与多段直线相同,但是最后将自动封闭该直线。 |
TRIANGLES | 绘制三角形 | 三角形的三个顶点由数组中相邻的三个点决定,并按照逆时针的顺序进行绘制;用户提供的点不止三个时,将尝试继续绘制新的三角形。 |
TRIANGLE_STRIP | 绘制多段三角形 | 第一段三角形的由数组中的前三个点决定;其余段三角形的绘制,起始边由上一段三角形的后两个点决定,第三点由数组中随后的一点决定。 |
TRIANGLE_FAN | 绘制三角扇面 | 第一段三角形的由数组中的前三个点决定;其余段三角形的绘制,起始边由整个数组的第一点和上一段三角形的最后一个点决定,第三点由数组中随后的一点决定。 |
QUADS | 绘制四边形 | 四边形的四个顶点由数组中相邻的四个点决定,并按照逆时针的顺序进行绘制;用户提供的点不止四个时,将尝试继续绘制新的四边形。 |
QUAD_STRIP | 绘制多段四边形 | 第一段四边形的起始边由数组中的前两个点决定,边的矢量方向由这两点的延伸方向决定;起始边的对边由其后的两个点决定,如果起始边和对边的矢量方向不同,那么四边形将会扭曲;其余段四边形的绘制,起始边由上一段决定,其对边由随后的两点及其延伸方向决定。 |
POLYGON | 绘制任意多边形 | 根据用户提供的顶点的数量,绘制多边形。 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。