OpenGL如何管理其转换矩阵的说明

问题描述 投票:1回答:1

我是一名业余程序员,最近刚接触OpenGL。我目前正在使用PyOpenGL模块在Python中进行编程。我开始研究用于视野控制的摄影机模块,但是我对gluLookAt()函数感到困惑。我也有一些键盘交互。我的问题是,当我按下某个键来平移相机时,它可以正常工作,但在我松开该键时不会停止。我认为可能是因为我必须重新初始化转换矩阵之类的东西。我已经看到我应该推送和弹出矩阵,或将标识矩阵加载到某个地方,但是现在我对OpenGL到底对gluLookAt()给出的矩阵做了什么感到非常困惑。

这是我的代码:

import pygame
from pygame.locals import *
import numpy as np
import glm
from math import * 
from OpenGL.GLU import *
from OpenGL.GL import *

class camera:
    def __init__(self, position, angles, target):
        self.position = glm.vec3(position[0], position[1], position[2])
        self.front = glm.normalize(self.position - glm.vec3(target[0], target[1], target[2]))
        self.upVector = glm.normalize(glm.cross(self.front, glm.normalize(glm.cross(self.front, glm.vec3(0, 1, 0)))))
    def update(self):
        glMatrixMode(GL_MODELVIEW)
        gluLookAt(self.position[0], self.position[1], self.position[2], self.position[0] + self.front[0],
        self.position[1] + self.front[1], self.position[2] + self.front[2], self.upVector[0], self.upVector[1], self.upVector[2])        

    def getPos(self):
        return self.position

    def translateCamera(self, vector):
        self.position = self.position + vector

    def keyboardControl(self):
        keys = pygame.key.get_pressed()
        if keys[K_LALT] and keys[K_F4]:
            pygame.quit()
            quit()
        if keys[K_w] and not isSprinting:
            self.position += self.front * 0.02085
        if keys[K_s]:
            self.position -= self.front * 0.02085
        if keys[K_d]:
            self.position += glm.normalize(glm.cross(self.front, self.upVector)) * 0.02085
        if keys[K_a]:
            self.position -= glm.normalize(glm.cross(self.front, self.upVector)) * 0.02085

[放开键,相机一直在滑行,而且我想也许是因为我没有在某个地方重置矩阵,所以它只是一遍又一遍地应用gluLookAt()给出的矩阵。

[我也尝试了GLM,并设法通过glm.lookAt()创建了我想要的转换矩阵,但是我不知道如何将其传递给OpenGL处理​​。

如果有人还可以解释如何使用glPushMatrix和glPopMatrix,以及何时必须使用glLoadIdentity,我将非常感激。非常感谢!

我是一名业余程序员,最近刚接触OpenGL。我目前正在使用PyOpenGL模块在Python中进行编程。我开始研究用于视野控制的摄像头模块,但遇到问题...

python opengl glm-math opengl-compat
1个回答
0
投票

[放开键,相机一直在滑行,我想也许是因为我没有在某个地方重设矩阵,所以它只会一遍又一遍地应用gluLookAt()给出的矩阵。

© www.soinside.com 2019 - 2024. All rights reserved.