美文网首页
获取摄像机的视口区域

获取摄像机的视口区域

作者: OneMore2018 | 来源:发表于2017-08-02 15:01 被阅读21次

先上代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour {

private Camera theCamera;

public float distance = 8.5f;
private Transform tran;
void Start () {

    if(!theCamera)
    {
        theCamera = Camera.main;
    }
    //float temp = (float)Screen.width  /(float) Screen.height;
    //Debug.Log(temp);
    //Debug.Log(theCamera.aspect ); 
    tran = theCamera.transform;
  //  Debug.Log(theCamera.aspect); 
}

void Update () {
    FindCorners();
}

void FindCorners()
{
    Vector3[] corner = GetCorners(distance);

    Debug.DrawLine(corner[0],corner[1],Color.red);
    Debug.DrawLine(corner[1], corner[3], Color.red);
    Debug.DrawLine(corner[3], corner[2], Color.red);
    Debug.DrawLine(corner[2], corner[0], Color.red);
}

Vector3[] GetCorners(float tempDistance)
{
    Vector3[] corners = new Vector3[4];
    //  角度转化为弧度(照相机视野的一半)
    float halfOV = (theCamera.fieldOfView * 0.5f) * Mathf.Deg2Rad;
    Debug.Log(halfOV);
    float aspect = theCamera.aspect;
    //  这里算出来的宽和高都是视口矩形的一半
    float height = tempDistance * Mathf.Tan(halfOV);

    float width = height * aspect;

    // 左上
    corners[0] = tran.position - (tran.right * width);
    corners[0] += tran.up * height;
    corners[0] += tran.forward * tempDistance;

    // 右上
    corners[1] = tran.position + (tran.right * width);
    corners[1] += tran.up * height;
    corners[1] += tran.forward * tempDistance;

    // 左下
    corners[2] = tran.position - (tran.right * width);
    corners[2] -= tran.up * height;
    corners[2] += tran.forward * tempDistance;

    // 右下
    corners[3] = tran.position + (tran.right * width);
    corners[3] -= tran.up * height;
    corners[3] += tran.forward * tempDistance;

    return corners;

}

}

运行结果如下

Paste_Image.png

这样就知道了摄像机的视口区域,接下来想做一些视口坐标的操作就简单了

相关文章

  • 获取摄像机的视口区域

    先上代码using System.Collections;using System.Collections.Gen...

  • [Unity3D]摄像机的视口区域

    参考文档:雨松MOMO的Unity3D研究院之获取摄像机的视口区域 Camera.fieldOfView 在学习之...

  • 视口

    视口 视口(viewport)就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口 1.1...

  • 移动web开发流式布局

    一,视口 视口(viewport)就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口 1...

  • 关于移动端开发

    1.视口 视口(viewport)就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口布局...

  • 获取高度相关API

    获取页面已经滚动的高度: 获取body全部内容高度: 获取布局视口高度: 获取视图视口高度:

  • Python 布局:屏幕适配以及rem

    一、视口 1.1、视口的概念视口 是移动设备上用来显示网页的区域,一般会比移动设备可视区域大,宽度可能是980px...

  • css3视口单位 vw、vh

    视口单位(Viewport units) 什么是视口?在PC端,视口指的是在PC端,指的是浏览器的可视区域;而在移...

  • css的视口单位vw、vh的使用

    什么是视口? 在桌面端,视口指的是在桌面端,指的是浏览器的可视区域;而在移动端,它涉及3个视口:Layout Vi...

  • 大屏自适应

    一、用vw、vh 实现大屏自适应 视口单位中的“视口”,PC端指的是浏览器的可视区域。 vw:1vw 等于视口宽度...

网友评论

      本文标题:获取摄像机的视口区域

      本文链接:https://www.haomeiwen.com/subject/ouzelxtx.html