osg建立一个几何体类
程序员文章站
2022-03-26 08:49:55
...
在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 | 绘制任意多边形 | 根据用户提供的顶点的数量,绘制多边形。 |