Как базовый объект управляет камерой в Panda3d - PullRequest
0 голосов
/ 23 января 2019

Я возился с созданием пользовательской геометрии в движке Panda3d. И следующий код работает на 100% правильно.

class FooBarTriangle(ShowBase):
    def __init__(self):
        super(self).__init__()

        self.disable_mouse()
        self.set_frame_rate_meter(True)

        self.accept("escape", sys.exit)
        self.accept("space", lambda: print(self.camera.get_pos()))
        self.camera.set_pos(0, 0, 10)
        self.camera.look_at(0, 0, 0)

        self._add_light()
        self._add_triangle()


    def _add_light(self):
        # Adds a point light
        pass

    def _add_triangle(self):
        # Adds a single triangle in a certain place
        pass

Загадочные вещи происходят, когда я удаляю base.disableMouse() из своего кода. Я ожидаю, что моя камера будет подвижной и появится в положении (0, 0, 10), глядя на (0, 0, 0). Но вместо этого камера находится в положении (0, 0, 0), и я не знаю, где она выглядит.

Почему это происходит?

1 Ответ

0 голосов
/ 23 января 2019

Это происходит потому, что Panda3D имеет встроенный элемент управления камерой по умолчанию ( драйвер камеры по умолчанию ), если вы не наберете disableMouse(), Panda3D не будет перемещать вашу камеру через вызовы на camera.set_pos(x, y, z), но разрешить перемещение только через указанные элементы управления, которые можно прочитать здесь и здесь в руководстве.

Вы должны написать собственный контроллер камеры, если выхотите иметь возможность размещать камеру в любом месте, кроме (0, 0, 0), с помощью кода или просто использовать элементы управления, указанные по ссылкам выше, для перемещения по сцене.

...