视口(Viewport)

视口是用来表示窗口中绘制出的一个3D显示区域. (这个区域不一定是屏幕大小), 用一个不是很恰当但是很易懂的方式描述就是: 视口是用来显示相机在虚拟世界中拍摄到的图像的.

alt

1. XEViewport

引擎中XEViewport用于记录当前视口绑定的相机, 绑定的世界以及指定视口上渲染内容的枚举类型.

如何获取XEViewport:

   local pViewport = xe.Director:GetInstance():GetViewport()

获取到XEViewport之后我们可以获取到Viewport的宽高.

    local fWidth = pViewport:GetViewportWidth()
    local fHeight = pViewport:GetViewportHeight()

在调试的时候我们可以查看相机的位置, 当前帧率, DrawCall数量等.

    ---获取当前窗口渲染选项
    local nRenderOption = pViewport:GetAddRenderOption()
    ---获取到nRenderOption之后和对应的选项做与运算, 最终会得到开启哪些选项. 
    ---显示坐标轴.
    pViewport:SetAddRenderOption(XEViewport.XVPA_RendCoord)
    ---如果我们即想显示坐标轴 又想显示帧数 只需要将两个选项相加然后设置即可
    pViewport:SetAddRenderOption(XEViewport.XVPA_RendCoord + XEViewport.XVPA_RendFps)

下边介绍一下选项的种类以及含义.

  1. XEViewport.XVPA_RendCoord: 绘制坐标轴
  2. XEViewport.XVPA_RendFps: 显示帧率
  3. XEViewport.XVPA_CameraPos: 显示相机位置
  4. XEViewport.XVPA_PreviewMode: 预览模式
  5. XEViewport.XVPA_StateGroup: 引擎状态
    1. 更新时间: 音频, 蒙太奇, 客户端等每帧更新的时长等.
    2. 粒子系统: 粒子的DrawCall数量, 每帧更新时长, 渲染数据准备时长等.
    3. UI系统: UI的DrawCall数量, UI动画更新时长, UI场景更新时长, UI渲染数据准备时长等.
    4. 物理系统: 3D刚体数量, 3D骨骼模型数量, 2D刚体数量等.
    5. 贴图: 贴图大小, 贴图数量等.
    6. 模型: 静态模型DrawCall数量, 皮肤模型DrawCall数量, 骨骼更新时长等.
    7. 渲染: 总DrawCall数量, 面数等.
  6. XEViewport.XVPA_DefaultRenOpt: 默认选项 会显示帧数以及当前帧用时.

上述的渲染选项默认会显示在右下角的位置, 但是如果内容过多会显示不下, 所以我们可以设置渲染选项显示的位置.

    pViewport:SetFpsRenderPos(XEViewport.XVP_LEFTTOP)

目前我们支持显示在视口的四个角落:

  1. XEViewport.XVP_LEFTTOP: 左上
  2. XEViewport.XVP_LEFTBOTTOM: 左下
  3. XEViewport.XVP_RIGHTTOP: 右上
  4. XEViewport.XVP_RIGHTBOTTOM: 右下

我们也支持设置渲染选项的颜色, 这边可以到API文档中查找对应的接口.

2. XViewport

XViewport提供了视口与虚拟世界坐标转换以及设置相机等功能, 实际上XEViewport是在XViewport基础上进行了封装. 我们在游戏中可能用XViewport更多一些.

XViewport的获取

    local pXViewport = xe.Director:GetInstance():GetViewport():GetXViewport()

获取到XViewport之后 我们可以通过世界中坐标获取在屏幕上的投影

    local vScreenPos = pXViewport:TransformWorldToScreen(vWorldPos)

我们也可以通过屏幕的坐标获取到在世界中位置

    local vWorldPos = pXViewport:InvTransformScreenToWorld(vScreenPos)

可以设置显示在Viewport上的相机

    pXViewport:SetCamera(pCamera)

我们也可以设置视口的显示参数(一般情况下不建议设置)

    local pParam = pXViewport:GetViewportParam()
    pParam.nHeight = 0
    pParam.nWidth = 0
    pParam.X = 0
    pParam.Y = 0
    pParam.fMaxZ = 0
    pParam.fMinZ = 0
    pXViewport:SetParam(pParam)
@Copyright © cosmos 2019 all right reserved,powered by Gitbook修订时间: 2021-04-12 18:28:15

results matching ""

    No results matching ""