正交相机视野控制

有时需要让指定的物体正好在正交相机视野内,就需要实时计算合适的size,然后更新相机。

要使物体在正交相机视野内,则需要使物体在相机坐标系中的x,y坐标都在size范围内,于是求出x,y的最大值即为size的值。没有考虑z坐标是因为对于正交相机,z不会影响物体的渲染位置。

float cameraSize = 0;

// 如果有多个目标点,则需要求所有这些点中最大的size
foreach(targetPos in targetsPos)
{
    // 将物体世界坐标转换为相机坐标系中的坐标
    Vector3 targetPosInCamera = cameraTrasform.InverseTransfromPoint(targetPos);

    // 计算y固定时的size临界值 size = y
    size = Mathf.Max(size, targetPosInCamera.y);

    // 计算x固定时的size临界值 size = x/aspect
    float tmpY = targetPosInCamera.x / camera.aspect;
    size = Mathf.Max(size, tmpY);
}

// 相机size应该有个合理的最小值
size = Mathf.max(minSize, size);

// size应该有一个缓冲值,因为你不会想让目标正好显示在相机边界上
size += sizeBufferSize

然后在平滑的设置相机的size

void FixedUpdate()
{
    camera.orthographicSize = Mathf.SmoothDamp(camera.size, size, ref zoomSpeed, dampTime); 
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1 前言 OpenGL渲染3D模型离不开空间几何的数学理论知识,而本篇文章的目的就是对空间几何进行简单的介绍,并对...
    RichardJieChen阅读 12,085评论 1 11
  • 深入理解傅里叶变换Mar 12, 2017 这原本是我在知乎上对傅立叶变换、拉普拉斯变换、Z变换的联系?为什么要进...
    价值趋势技术派阅读 11,090评论 2 2
  • thiele插值算法 1点插值算法 function [C,c]=thiele(X,Y,Z)%X为插值点横坐标,Y...
    00crazy00阅读 6,281评论 0 4
  • 三维几何的矩阵变换: 平移变换: 比例变换: 绕X轴旋转: 绕Y轴旋转: 绕Z轴旋转: X轴反射变换: Y轴反射变...
    cain_huang阅读 11,708评论 2 6
  • 学习Mac开发第四节 学习NSSlider 认识NSSlider 层级结构 Inherits From: NSC...
    无沣阅读 5,034评论 2 7

友情链接更多精彩内容