バックグラウンド
複雑な投影設定のために 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)
スーパー コンストラクター、 classisinstance(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
。