基于osg的python三维程序开发(四)------更新节点(Node)
时间:2020-03-17 13:24:52
收藏:0
阅读:73
我们在OSG中实现三维物体的移动,或者实现动画功能, 一般都通过回调来实现。 节点及节点的回调,是OSG中最重要的概念之一, 对这些基础概念不了解的同学,可以参考OSG
参考书,或者OSG C++实现的网络教程, 下面的例子旨在通过简单例子讲解节点更新回调的使用。
1 class MyTransformCallback(NodeCallback): 2 def __init__(self, angularVelocity): 3 super(MyTransformCallback,self).__init__() 4 self.angular_velocity = angularVelocity 5 6 def runIt(self, node , nv): 7 tt = nv.getFrameStamp() 8 if (tt is None): 9 print(‘No timestamp‘) 10 else: 11 time = tt.getSimulationTime() 12 mat = osg.Matrix() 13 mat = mat.translate(0.0,1.0+ math.cos(time*self.angular_velocity),0.0) 14 node.setMatrix(mat) 15 #must continue subgraph traversal. 16 #traverse(node,nv)
这段代码里面, 重要的是 runIt 这个函数, 在对应的C++实现中, 通过重载(override) operator () 来实现, 但是在python中无对应的实现方式, 因此采用了一个替换的方案, 用runIt 函数来实现子类
的更新。 注意, 最后一个 tranverse(node, nv) 被舍弃,因为在父类的实现中, 已经被调用。
完整的例子,在https://github.com/enigma19971/pyosg/tree/master/examples 里面可以直接下载。
原文:https://www.cnblogs.com/enigma19971/p/12509833.html
评论(0)