Реализация моего объектива в Panda3D

Я пытаюсь реализовать очень нелинейный объектив для искажения объектива в Panda3D для сложной настройки проецирования. Я хочу использовать эту реализацию следующим этот подход.

Могу ли я сделать это на Python (и если да, то как, что я делаю неправильно) или я должен сделать это на C ++ (и если да, то с чего мне начать)?

Я пробовал создавать подклассы объектив, но если я позволю своему подклассу вызывать супер-конструктор (или вообще не переопределю конструктор), я получу ошибку:

>>> 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(), но ни один из его переопределенных методов никогда не вызывается, и отрендеренная сцена выглядит так, как будто она была отрисована с помощью stock PerspectiveLens,

0

Решение

Это все написано на C ++, то есть Lens класс внутренне является классом C ++, а все остальные классы также являются классами C ++, которые перегружают C ++ Lens учебный класс.

Если вы перегружаете такой Python-упакованный класс и снова передаете этот объект в некоторый код C ++, код C ++ не распознает перезапись Python.

Вы могли бы написать C ++ Lens Суперкласс, который способен сделать это, то есть реализующий все возможные виртуальные функции и во всех случаях всегда смотрит вверх, если есть связанный атрибут объекта Python, который можно вызвать. Обратите внимание, что это может быть медленно.


В C ++ вы найдете определение Lens Вот а также Вот.

Посмотрите на FisheyeLens Вот чтобы увидеть, какие функции вы должны перезаписать с Lens,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]