osg建立一个几何体类

在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绘制任意多边形根据用户提供的顶点的数量,绘制多边形。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值