轉自:osg 基本幾何圖元
//osg 基本幾何圖元 // ogs中所有加入場景中的數據都會加入到一個Group類對象中,幾何圖元作為一個對象由osg::Geode類來組織管理。 // 繪制幾何圖元對象時,先創建一個Geometry對象,這個對象中要設置繪制所需的基本信息,圖元的頂點、頂點顏色、頂點關聯方式以及法線。 #include <osgViewer/Viewer> #include <osgDB/ReadFile> #include <osg/Node> #include <osg/Geode> #include <osg/Geometry> int main(int argc, char** argv) { osgViewer::Viewer view; osg::ref_ptr<osg::Group> root = new osg::Group; #pragma region 幾何圖元模塊 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(-1.f, 0.f, 1.f)); vertexArray->push_back(osg::Vec3(1.f, 0.f, -1.f)); vertexArray->push_back(osg::Vec3(1.f, 0.f, 1.f)); //定義顏色數組 osg::ref_ptr<osg::Vec4Array> colorArray = new osg::Vec4Array(); geometry->setColorArray(colorArray); geometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX); colorArray->push_back(osg::Vec4(1.f, 0.f, 0.f, 1.f)); colorArray->push_back(osg::Vec4(0.f, 1.f, 0.f, 1.f)); colorArray->push_back(osg::Vec4(0.f, 0.f, 1.f, 1.f)); //定義法線 osg::ref_ptr<osg::Vec3Array> normalArray = new osg::Vec3Array(); geometry->setNormalArray(normalArray); geometry->setNormalBinding(osg::Geometry::BIND_OVERALL); normalArray->push_back(osg::Vec3(0.f, -1.f, 0.f)); //設置頂點關聯方式 //PrimitiveSet類,這個類松散地封裝了OpenGL的繪圖基元, //包括點(POINTS),線(LINES),多段線(LINE_STRIP),封閉線(LINE_LOOP),四邊形(QUADS),多邊形(POLYGON)等。 geometry->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::POLYGON, 0, 3)); //幾何組節點 osg::ref_ptr<osg::Geode> geo = new osg::Geode(); geo->addDrawable(geometry); #pragma endregion root->addChild(geo); view.setSceneData(root); //view.realize(); view.run(); }
osg::PrimitiveSet::POINTS對應OpenGL中的GL_POINTS繪制單獨的點
osg::PrimitiveSet::LINES對應OpenGL中的GL_LINES繪制每兩點連接的線
osg::PrimitiveSet::LINE_STRIP對應OpenGL中的GL_LINE_STRIP繪制依次連接各點的線
osg::PrimitiveSet::LINE_LOOP對應OpenGL中的GL_LINE_LOOP繪制依次連接各點的線,首尾相連
osg::PrimitiveSet::POLYGON對應OpenGL中的GL_POLYGON繪制依次連接各點的多邊形
osg::PrimitiveSet::QUADS對應OpenGL中的GL_QUADS繪制依次連接每四點的四邊形
如:1、2、3、4、5、6、7、8點 繪制結果1、2、3、4組成四邊形,5、6、7、8組成四邊形
osg::PrimitiveSet::QUAD_STRIP對應OpenGL中的GL_QUAD_STRIP繪制四邊形
如:1、2、3、4、5、6、7、8點 繪制結果1、2、3、4組成四邊形,3、4、5、6組成四邊形、5、6、7、8組成四邊形
osg::PrimitiveSet::TRIANGLES對應OpenGL中的GL_TRIANGLES繪制每三點連接的三角形
如:1、2、3、4、5、6點 繪制結果1、2、3組成三角形,4、5、6組成三角形
osg::PrimitiveSet::TRIANGLE_STRIP對應OpenGL中的GL_TRIANGLE_STRIP
如:1、2、3、4、5、6點 繪制結果1、2、3組成三角形,2、3、4組成三角形,3、4、5組成三角形4、5、6組成三角形
osg::PrimitiveSet::TRIANGLE_FAN對應OpenGL中的GL_TRIANGLE_FAN
如:1、2、3、4、5、6點 繪制結果1、2、3組成三角形,1、3、4組成三角形,1、4、5組成三角形,1、5、6組成三角形
