这是有关节点的更新与事件回调,OSG中的节点主要是使用回调Callback来完成用户临时定义的,需要每帧执行的工作。
回调时一种用户编写的功能模块,它可以作为一个参数传递给其他功能模块,从而实现一些底层系统事件的响应和处理。C++使用函数指针将回调函数的地址作为其他系统或用户函数的传入参数。
OSG节点回调分类:
1、更新回调 Update Callback:每一帧系统遍历到当前节点时都会被自动调用
2、人机交互事件回调 Event Callback:由用户交互事件触发(键盘,鼠标,关闭窗口,改变窗口尺寸)
回调类基类:osg::NodeCallback
对于osg::Node类,有setUpdateCallback(NodeCallback*) ; setEventCallback(NodeCallback*)
用户类可以从NodeCallback类派生,并重构执行函数operator(),从而实现自定义的节点回调功能。
// osgStudy4_21.cpp : 定义控制台应用程序的入口点。
//使用回调实现旋转动画
#include "stdafx.h"
#include<osg/io_utils>
#include<osg/PositionAttitudeTransform>
#include<osgDB/ReadFile>
#include<osgViewer/Viewer>
#include<iostream>
//定义一个不断执行旋转动作的回调,它操作空间变换节点PositionAttitudeTransform不断改变旋转角度,实现动画效果。
class RotateCallback :public osg::NodeCallback//继承回调基类