为了实现绕端点动态显示的功能,一种实现方法是自己写一个osg::NodeCallback的子类,并重载圆括号运算符。本文中,该子类的名字为MyRotateCallback。实现代码如下:
class MyRotateCallback: public osg::NodeCallback
{
public:
MyRotateCallback() {
m_rotate = 0; // 旋转角度(弧度)
}
~MyRotateCallback() {}
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv) {
ModelNode* mn = dynamic_cast<ModelNode*>(node);
if (mn) {
mn->setLocalRotation(osg::Quat(0, osg::X_AXIS,
0, osg::Y_AXIS,
m_rotate, osg::Z_AXIS));
m_rotate += 0.01; // 每次增加0.01弧度
if (m_rotate >= 2 * osg::PI)
m_rotate -= 2 * osg::PI;
}
}
protected:
double m_rotate; // 旋转角度(弧度)
};
其中,m_rotate是线段绕自身Z轴旋转的角度,单位是弧度。
动态展示:osgEarth中线段绕Z轴旋转的实现与代码详解

本文介绍了如何使用osgEarth库实现绕端点动态旋转的线段,通过自定义osg::NodeCallback子类MyRotateCallback控制旋转角度,并详细展示了关键代码和设置过程。附有GIF演示和上下文背景信息。
最低0.47元/天 解锁文章
4092

被折叠的 条评论
为什么被折叠?



