背景
我正在尝试实现一个高度非线性的镜头,以在 Panda3D 中为复杂的投影设置进行镜头失真。我想按照这种方法使用这个实现。
问题
我可以用 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)
如果我不调用超级构造函数 class 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()
,但它的任何重写方法都不会被调用,并且渲染的场景看起来像是用 stock 渲染的PerspectiveLens
。