摄像机

Panda3d摄像机

  • 摄像机实际上是在 ShowBase 中定义的一个名称为 base.cam 的 NodePath
  • 也可以将一些普通的节点放在名为 base.camera 的摄像机的下面
  • 一般情况下,您会希望使用代码来控制 base.camera NodePath
  • Showase 类包含了一些可以方便地控制摄像机的方法。因此一般要from direct.showbase import *
  • lens是镜头的意思,可以通过lens=base.cam.getLens()获得
#base中的默认相机
#camera官网解释:This is the NodePath that should be used to manipulate the camera.
#         This is the node to which the default camera is attached
base.camera   #相机所挂载的节点的节点路径,底下可以挂载其他节点
#cam官网解释:This is a NodePath pointing to the Camera object set up for the 3D scene.
#         This is usually a child of self.camera.
base.cam      #相机的节点路径

默认相机驱动

base.useDrive()  #可以前后转向,但是不能上下
base.useTrackball()#可以上下前后移动,但是不能转向
base.oobe() #一般推荐用这个,鼠标滚轮也可使用以进行更全面的移动,上下前后并转向

镜头和视野

默认的镜头都有相同的视角,也就是说,他们都是 PerspectiveLens 实例,即对物体进行透视投影(相对的是正交投影)
摄像机的一些属性参数

  • A是镜头的节点,通常(在默认的Z轴向上坐标系统中),镜头会朝向+Y轴,在上面的图片中,+Y轴指向右侧的A点。包含节点的平面垂直于视图(也就是说,这个平面对应的垂线通过这个平面),他称为摄像机平面。
  • B是视角的角度,可以通过lens.setFow(angle)直接设置角度;也可以lens.setFov(horizontalAngle, werticalAngle)通过设置横向视角、纵向视角来设置角度
  • C、D是分别是摄像机的近远平面,可以通过lens.setNearFar(nearDistance, farDistance)或者拆开lens.setNear(nearDistance)、lens.setFar(farDistance)
  • E 这个尺寸叫做镜头的胶片尺寸。现实世界中胶片尺寸影响视角,这其中涉及一些专业的摄影知识,有兴趣可以了解,可以更好的模拟现实使用 lens.setFilmSize(width) 或者 lens.setFilmSize(width, height) 来设置胶片尺寸
  • F 这个距离代表了镜头的焦距,通过lens.setFocalLength(distance)进行设置
    特别注意:视角、焦点和胶片尺寸之间的关系很近。设置其中任意两个值都会影响到第三个值。由二可定一,所以同时设三个属性是没必要的

正投影镜头

正交投影

一般正投影镜头主要应用在render2d,即GUI的渲染描绘上,有时也可以应用在即时策略类的游戏(比如:帝国时代)
创建正交投影摄像机的代码大致如下:

lens = OrthographicLens()
lens.setFilmSize(20, 15)  # Or whatever is appropriate for your scene
base.cam.node().setLens(lens)
posted @ 2017-06-09 11:56  five-wood  阅读(250)  评论(0)    收藏  举报