【panda3d】二、Controlling the Camera
程序员文章站
2022-07-13 09:19:11
...
默认摄像头控制系统
默认情况下,Panda3D运行一个任务,允许您使用鼠标移动相机。
The keys to navigate are:
Mouse Button |
Action |
---|---|
Left Button |
Pan left and right. |
Right Button |
Move forwards and backwards. |
Middle Button |
Rotate around the origin of the application. |
Right and Middle Buttons |
Roll the point of view around the view axis. |
试试这个相机控制系统吧。它的问题是有时会很尴尬。把照相机对准我们想要的方向并不总是容易的。
Tasks
相反,我们将编写一个任务来显式地控制摄像机的位置。任务只不过是一个在每一帧都被调用的过程。更新你的代码如下:
from math import pi, sin, cos
from direct.showbase.ShowBase import ShowBase
from direct.task import Task
class MyApp(ShowBase):
def __init__(self):
ShowBase.__init__(self)
# Load the environment model.
self.scene = self.loader.loadModel("models/environment")
# Reparent the model to render.
self.scene.reparentTo(self.render)
# Apply scale and position transforms on the model.
self.scene.setScale(0.25, 0.25, 0.25)
self.scene.setPos(-8, 42, 0)
# Add the spinCameraTask procedure to the task manager.
self.taskMgr.add(self.spinCameraTask, "SpinCameraTask")
# Define a procedure to move the camera.
def spinCameraTask(self, task):
angleDegrees = task.time * 6.0
angleRadians = angleDegrees * (pi / 180.0)
self.camera.setPos(20 * sin(angleRadians), -20 * cos(angleRadians), 3)
self.camera.setHpr(angleDegrees, 0, 0)
return Task.cont
app = MyApp()
app.run()
add()过程告诉Panda3D的任务管理器调用过程spinCameraTask()每个帧。
这是我们写的控制摄像机的程序。只要过程spinCameraTask()返回常量AsyncTask。
DS_cont,任务管理器将继续在每一帧调用它。
在我们的代码中,spinCameraTask()过程根据已经过了多少时间来计算摄像机的期望位置。
摄像机每秒钟旋转6度。前两行计算相机的期望方向;首先是度,然后是弧度。
setPos()调用实际上设置了摄像机的位置。
(记住,Y是水平的,Z是垂直的,所以位置是通过动画X和Y来改变的,而Z是固定在地面以上3个单位。)
setHpr()调用实际上设置了方向。
运行这个程序
照相机不应该再放在地下;此外,它现在应该是轮流清算: