gpt4 book ai didi

c++ - 在 Panda3D 中实现我自己的镜头

转载 作者:行者123 更新时间:2023-11-28 07:21:27 25 4
gpt4 key购买 nike

背景

我正在尝试实现一个高度非线性的镜头,以便在 Panda3D 中为复杂的投影设置进行镜头失真。我想在 this approach 之后使用此实现.

问题

我可以用 Python 来做吗(如果可以,怎么做,我做错了什么)还是必须用 C++ 来做(如果可以,我从哪里开始)?

到目前为止的尝试

我试过子类化 Lens ,但是如果我让我的子类调用 super 构造函数(或者根本不重写构造函数),我会得到一个错误:

>>> 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)

如果我不调用 super 构造函数,类 isinstance(Lens),但不会被 Panda3D 代码识别:

fcamNode = Camera('fcam')
flens = MyLens.MyLens()
assert isinstance(flens, Lens)
fcamNode.setLens(flens)

导致 TypeError:LensNode.set_lens() 参数 1 必须是 Lens,而不是 MyLens

如果我改为子类化 PerspectiveLens,我可以调用 super 构造函数并将我的类的实例传递给 setLens(),但是没有它的重写方法会被调用,渲染的场景看起来就像是用常用的 PerspectiveLens 渲染的。

最佳答案

这都是用 C++ 编写的,即 Lens 类在内部是一个 C++ 类,所有其他类也是重载 C++ Lens 类的 C++ 类。

如果您重载此类 Python 包装的类并将该对象再次传递给某些 C++ 代码,C++ 代码将无法识别 Python 覆盖。

您也许可以编写一个 C++ Lens 父类(super class),它能够实现所有可能的虚函数,并且在所有情况下,始终查找是否存在相关的 Python 对象属性可以调用。请注意,这可能会很慢。


在 C++ 中,您可以找到 Lens 的定义 herehere .

看看FisheyeLens here查看您必须从 Lens 覆盖哪些功能。

关于c++ - 在 Panda3D 中实现我自己的镜头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19399678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com