添加斜面描述变量
为了指定斜面的倾斜角度,需要添加一些描述角度的变量,此处为了简化,只添加了俯仰角(及绕物体x轴旋转的角度)。代码如下:
double pitch = osg::PI * 30 / 180; // 仰角30度.
添加结点回调函数类MyRotateCallback
添加结点回调函数类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) {
osg::Quat q1(pitch, osg::X_AXIS,
0, osg::Y_AXIS,
0, osg::Z_AXIS);
osg::Matrix m;
q1.get(m);
osg::Vec3d axis = m.preMult(osg::Vec3d(0, 0, 1));
osg::Quat q2(m_rotate, -axis);
mn->setLocalRotation(q1*q2);
m_rotate += 0.01; // 每次增加0.01弧度
if (m_rotate >= 2 * osg::PI)
m_rotate -= 2 * osg::PI;
}
}
protected:
double m_rotate; // 旋转角度(弧度)
};
重写圆括号运算符。两个四元数相乘,表示物体绕过原点的轴连续转动。axis是物体自身Z轴在空间坐标系中的投影。需要理解四元数

本文介绍了如何在 osgEarth 中添加斜面描述变量,如俯仰角,通过MyRotateCallback类实现模型绕轴旋转,并创建倾斜参照平面和圆锥体。详细展示了创建圆锥体的过程和运行效果,适合对三维场景旋转控制感兴趣的开发者。
最低0.47元/天 解锁文章
3454

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



