OSG例子講解之osgautotransform

2021-07-10 05:18:35 字數 2663 閱讀 2803

osg::autotransform派生自transform,這個節點非常好用,比如它可以用在earth中始終顯示label文字,可以很方便的定位到某個位置中,只要設定好osg::autotransform::autorotatemode,可以讓文字始終面向使用者,非常方便~

#include #include #include #include #include #include #include #include #include #include #include #include #include osg::node* createlabel(const osg::vec3& pos, float size, const std::string& label, osgtext::text::axisalignment axisalignment)

return geode;

}osg::node* createlabel3(const osg::vec3& pos, float size, const std::string& label)

return geode;

}osg::node* createaxis(const osg::vec3& s, const osg::vec3& e, int numreps, osg::autotransform::autorotatemode autorotatemode, osgtext::text::axisalignment axisalignment, const std::string& str)

osg::vec4array* colors = new osg::vec4array;

colors->push_back(osg::vec4(1.0f,1.0f,1.0f,1.0f));

osg::geometry* geom = new osg::geometry;

geom->setvertexarray(vertices);

geom->setcolorarray(colors, osg::array::bind_overall);

geom->addprimitiveset(new osg::drawarrays(gl_line_strip,0,vertices->size()));

osg::geode* geode = new osg::geode;

geode->adddrawable(geom);

group->addchild(geode);

}else

osg::vec4array* colors = new osg::vec4array;

colors->push_back(osg::vec4(1.0f,1.0f,1.0f,1.0f));

osg::geometry* geom = new osg::geometry;

geom->setvertexarray(vertices);

geom->setcolorarray(colors, osg::array::bind_overall);

geom->addprimitiveset(new osg::drawarrays(gl_line_strip,0,vertices->size()));

osg::geode* geode = new osg::geode;

geode->adddrawable(geom);

group->addchild(geode);

}return group;

}osg::node* createautoscale(const osg::vec3& position, float charactersize, const std::string& message, float minscale=0.0, float maxscale=flt_max)

osg::node* createscene()

int main(int, char**)

該**中osgtext可能的軸對齊方式肯能會對讀者造成誤解,我們暫時不對對text部分做講解,以後再說,這裡主要是setautorotatemode() 設定自動旋轉的方式進行了解。
osg::autotransform有三種旋轉方式:
no_rotation,

rotate_to_screen,

rotate_to_camera,

rotate_to_axis

**中,存在了三種方式,大家可以設定下最後的一種軸旋轉方式試下,rotate_to_screen是我們在工作中算是最常使用到的,由於當前場景中只有乙個camera,所以rotate_to_screen和rotate_to_camera效果是一樣的。
1.可以嘗試自己建立個相機,設定相機從別的角度看,在該相機下試下軸旋轉的效果是否相同。
2.再試下如果在「從相機」中建立圍繞相機旋轉的節點是繞從相機還是主相機旋轉。
at->setminimumscale(minscale);

at->setmaximumscale(maxscale);

當相機位置與at距離介於minscale和maxscale之間時,at會自動的進行縮放,以維持固定的大小,但是如果相機和at之間距離超出該範圍,該放大放大,該縮小縮小

osg畫線 osggeometry例子 學步園

本例子演示了繪製不同的幾何圖元。osg primitiveset points對應opengl中的gl points繪製單獨的點 osg primitiveset lines對應opengl中的gl lines繪製每兩點連線的線 osg primitiveset line strip對應opengl...

android shape講解小全及例子

原文 例子 shape xmlns android android shape rectangle oval line ring 預設為rectangle corners shape rectangle 時使用,android radius integer 半徑,會被下邊的屬性覆蓋,預設為1dp,a...

設計模式及例子講解(todo)

學習設計模式中一些簡單的筆記 為什麼要學習設計模式 我們學設計模式,是為了學習如何合理的組織我們的 如何解耦,如何真正的達到對修改封閉對擴充套件開放的效果,而不是去背誦那些類的繼承模式,然後自己記不住,回過頭來就罵設計模式把你的 搞複雜了,要反設計模式。設計模式的目的只有乙個 降低物件之間的耦合,增...