Почему панорамирование в моей сцене Pyqt/Moderngl работает неправильно? [закрыто]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему панорамирование в моей сцене Pyqt/Moderngl работает неправильно? [закрыто]

Сообщение Anonymous »

Я строю 3D Viewport в Moderngl и Pyqt5. Я использую Qglwidget для рендеринга контекста ModernGL. Прямо сейчас я пытаюсь выяснить, почему мой подход панорамирования не работает должным образом. Чтобы привести пример, я столкнусь с нисходящим, панировок работает безупречно. Как только я орбит вокруг сцены, панорамирование терпит неудачу, так как она больше не находится в состоянии сверху вниз. Если я попытаюсь падать вертикально (y), она перемещает камеру вперед (почти как если бы я все еще был в 2D. Парни 3D Viewer.

Код: Выделить всё

self.center = np.zeros(3)
< /code>
self.center
затем объединяется с общим преобразованием аркибола, тогда все это записано в матрицу вида вершин -шейдера (все в методе Paintgl )

Код: Выделить всё

self.arc_ball.Transform[3, :3] = -self.arc_ball.Transform[:3, :3].T @ self.center
self.view_matrix.write((orthographic * lookat * self.arc_ball.Transform).astype('f4'))
< /code>
As far as the panning goes, it is all written in the mouseMoveEvent
Функция для перевода Viewport на основе координат x, y. self.camera_zoom - это фактическая сумма увеличения точки зрения, позволяющую правильную скорость панорамирования на основе шкалы Viewport.

Код: Выделить всё

        elif event.buttons() & Qt.MouseButton.MiddleButton:
# Panning logic
x_movement = event.x() - self.prev_x
y_movement = event.y() - self.prev_y

self.center[0] -= x_movement * (self.camera_zoom / 10)
self.center[1] += y_movement * (self.camera_zoom / 10)

self.prev_x = event.x()
self.prev_y = event.y()

self.update()
< /code>
Both self.prev_x
и self.prev_y рассчитываются в функции MousePressevent .

Код: Выделить всё

        elif event.buttons() & Qt.MouseButton.MiddleButton:
self.setCursor(Qt.CursorShape.ClosedHandCursor)
self.prev_x = event.x()
self.prev_y = event.y()
< /code>
I tried to use self.center[2] += y_movement * (self.camera_zoom / 10)
для панорамирования в координате Z камеры, и это только помогло.

Подробнее здесь: https://stackoverflow.com/questions/794 ... improperly
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему функции моего панорамирования в Pyqt/Moderngl ведут себя странно [закрыто]
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Почему функции моего панорамирования в Pyqt/Moderngl ведут себя странно
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Почему текстуры не отображаются правильно в моей сцене Panda3D?
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Плавное масштабирование и панорамирование всех элементов в RecyclerView
    Гость » » в форуме Android
    0 Ответы
    68 Просмотры
    Последнее сообщение Гость
  • Панорамирование холста после преобразований в неправильном направлении
    Гость » » в форуме Javascript
    0 Ответы
    71 Просмотры
    Последнее сообщение Гость

Вернуться в «Python»