正在加载图片...
声明一个顶点数组。每个顶点由一个三元组表示一一vc3类的实例。这些三元组用 osg:Vec3 Array类的实例存贮。既然osg:Vec3 Array继承自STL的vector类,那么我们就可以使 用push_back方法来添加数组成员。push back将元素加到向量的尾端,因此第一个元素的索引是 0,第二个是1,依此类推。 使用‘z’轴向上的右手坐标系系统,下面的0..4数组元素代表着产生一个简单锥体所需的5 个点。 osg:Vec3Array*pyramidVertices new osg:Vec3Array; pyramidVertices->push_back(osg:Vec3(0,0,0));//front left pyramidVertices->push_back(osg:Vec3(10,0,0));//front right pyramidVertices->push_back(osg:Vec3(10,10,0));//back right pyramidVertices->push_back(osg:Vec3(0,10,0));//back left pyramidVertices->push_back(osg:Vec3(5,5,10));//peak 将这个顶点集合和与我们加到场景中的geode相关的geometry关联起来。 pyramidGeometry->setVertexArray(pyramidVertices ) 下一步,产生一个基本集合并将其加入到pyramid geometry中。使用pyramid的前四个点通过 DrawElementsUint类的实例来定义基座。这个类也继承自STL的vector,所以push_back方法会 顺序添加元素。为了保证合适的背面剔除,顶点的顺序应当是逆时针方向的。构造器的参数是基本 的枚举类型(和opengl的基本枚举类型一致),和起始的顶点数组索引。 osg:DrawElementsUInt*pyramidBase new osg:DrawElementsUInt (osg:PrimitiveSet:QUADS,0); pyramidBase->push back(3); pyramidBase->push_back(2); pyramidBase->push_back(1); pyramidBase->push_back(0); pyramidGeometry->addPrimitiveSet(pyramidBase); 对每个面重复相同的动作。顶点仍要按逆时针方向指定。 osg:DrawElementsUInt*pyramidFaceOne new osg:DrawElementsUInt (osg:PrimitiveSet:TRIANGLES,0); pyramidFaceOne->push_back(0); pyramidFaceOne->push_back(1); pyramidFaceOne->push_back(4): pyramidGeometry->addPrimitiveSet(pyramidFaceOne); osg:DrawElementsUInt*pyramidFaceTwo new osg:DrawElementsUInt (osg:PrimitiveSet:TRIANGLES,0); pyramidFaceTwo->push_back(1); pyramidFaceTwo->push_back(2); pyramidFaceTwo->push_back(4); pyramidGeometry->addPrimitiveSet(pyramidFaceTwo); osg:DrawElementsUInt*pyramidFaceThree new osg:DrawElementsUInt (osg:PrimitiveSet:TRIANGLES,0); pyramidFaceThree->push_back(2); pyramidFaceThree->push_back(3);2 声 明 一 个 顶 点 数 组 。 每 个 顶 点 由 一 个 三 元 组 表 示 ——vec3 类 的 实 例 。 这 些 三 元 组 用 osg::Vec3Array 类的实例存贮。既然 osg::Vec3Array 继承自 STL 的 vector 类,那么我们就可以使 用 push_back 方法来添加数组成员。push_back 将元素加到向量的尾端,因此第一个元素的索引是 0,第二个是 1,依此类推。 使用‘z’轴向上的右手坐标系系统,下面的 0...4 数组元素代表着产生一个简单锥体所需的 5 个点。 osg::Vec3Array* pyramidVertices = new osg::Vec3Array; pyramidVertices->push_back( osg::Vec3( 0, 0, 0) ); // front left pyramidVertices->push_back( osg::Vec3(10, 0, 0) ); // front right pyramidVertices->push_back( osg::Vec3(10,10, 0) ); // back right pyramidVertices->push_back( osg::Vec3( 0,10, 0) ); // back left pyramidVertices->push_back( osg::Vec3( 5, 5,10) ); // peak 将这个顶点集合和与我们加到场景中的 geode 相关的 geometry 关联起来。 pyramidGeometry->setVertexArray( pyramidVertices ); 下一步,产生一个基本集合并将其加入到 pyramid geometry 中。使用 pyramid 的前四个点通过 DrawElementsUint 类的实例来定义基座。这个类也继承自 STL 的 vector,所以 push_back 方法会 顺序添加元素。为了保证合适的背面剔除,顶点的顺序应当是逆时针方向的。构造器的参数是基本 的枚举类型(和 opengl 的基本枚举类型一致),和起始的顶点数组索引。 osg::DrawElementsUInt* pyramidBase = new osg::DrawElementsUInt(osg::PrimitiveSet::QUADS, 0); pyramidBase->push_back(3); pyramidBase->push_back(2); pyramidBase->push_back(1); pyramidBase->push_back(0); pyramidGeometry->addPrimitiveSet(pyramidBase); 对每个面重复相同的动作。顶点仍要按逆时针方向指定。 osg::DrawElementsUInt* pyramidFaceOne = new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0); pyramidFaceOne->push_back(0); pyramidFaceOne->push_back(1); pyramidFaceOne->push_back(4); pyramidGeometry->addPrimitiveSet(pyramidFaceOne); osg::DrawElementsUInt* pyramidFaceTwo = new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0); pyramidFaceTwo->push_back(1); pyramidFaceTwo->push_back(2); pyramidFaceTwo->push_back(4); pyramidGeometry->addPrimitiveSet(pyramidFaceTwo); osg::DrawElementsUInt* pyramidFaceThree = new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0); pyramidFaceThree->push_back(2); pyramidFaceThree->push_back(3);
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有