def rotateCameraselfxyzjulicurrentPosition selfcamera_pos=Vec3xyz deltaX = selflastPositiongetX - currentPositiongetX # 计算鼠标指针在x轴上的移动距离 deltaY = selflastPositiongetY - currentPos
def rotateCamera(self, x, y, z, juli, currentPosition): # 设置相机的位置 self.camera_pos = Vec3(x, y, z) # 计算鼠标指针在x轴上的移动距离 deltaX = self.lastPosition.getX() - currentPosition.getX() # 计算鼠标指针在y轴上的移动距离 deltaY = self.lastPosition.getY() - currentPosition.getY() # 计算相机相对原点的位置 cameraPos = self.camera.getPos() - self.camera_pos # 计算相机距离原点的距离 cameraDist = cameraPos.length() # 计算相机的方位角和俯仰角 azimuth = math.atan2(cameraPos.getY(), cameraPos.getX()) elevation = math.atan2(cameraPos.getZ(), math.sqrt(cameraPos.getX() ** 2 + cameraPos.getY() ** 2)) # 根据鼠标移动更新方位角和俯仰角 azimuth -= deltaX * 0.01 elevation += deltaY * 0.01 # 根据更新后的方位角和俯仰角计算新的相机位置 cameraPos.setX(cameraDist * math.cos(elevation) * math.cos(azimuth)) cameraPos.setY(cameraDist * math.cos(elevation) * math.sin(azimuth)) cameraPos.setZ(cameraDist * math.sin(elevation)) # 设置相机新的位置 self.camera.setPos(cameraPos + self.camera_pos) # 计算相机当前位置到目标点的向量 targetPos = Point3(self.camera_pos) # 将x,y,z替换为目标点的坐标 lookAtVec = targetPos - self.camera.getPos() # 计算相机与目标点之间的距离 distance = lookAtVec.length() # 调整相机的位置以保持与目标点的距离为5 if distance != 0: lookAtVec.normalize() cameraPos = targetPos - lookAtVec * juli self.camera.setPos(cameraPos) # 使相机对准目标点 self.camera.lookAt(targetPos) # 更新lastPosition的值 self.lastPosition = currentPositio
原文地址: https://www.cveoy.top/t/topic/ewJV 著作权归作者所有。请勿转载和采集!