基于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
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!