osg 基本幾何圖元


轉自: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組成三角形


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM