我正在尝试使用高度非线性镜头在Panda3D中进行镜头失真,以实现复杂的投影设置。我想在this approach之后使用此实现。
我可以用Python(如果是这样,我怎么做错了)或者我必须用C ++做(如果有的话,我从哪里开始)?
我已经尝试了子类化Lens,但如果我让我的子类调用超级构造函数(或者根本不重写构造函数),我会收到错误:
>>> from panda3d.core import Lens
>>> class MyLens(Lens):
... def __init__(self):
... super(MyLens,self).__init__()
...
>>> l = MyLens()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in __init__
TypeError: Error Can Not Init Constant Class (Lens)
如果我没有调用超级构造函数,类isinstance(Lens)
,但Panda3D代码不能识别它:
fcamNode = Camera('fcam')
flens = MyLens.MyLens()
assert isinstance(flens, Lens)
fcamNode.setLens(flens)
结果为TypeError: LensNode.set_lens() argument 1 must be Lens, not MyLens
。
如果我改为继承PerspectiveLens
,我可以调用超级构造函数并将我的类的实例传递给setLens()
,但是没有一个被覆盖的方法被调用过渲染场景看起来像是用股票PerspectiveLens
渲染的。