正交相機(jī)視野控制

有時(shí)需要讓指定的物體正好在正交相機(jī)視野內(nèi),就需要實(shí)時(shí)計(jì)算合適的size,然后更新相機(jī)。

要使物體在正交相機(jī)視野內(nèi),則需要使物體在相機(jī)坐標(biāo)系中的x,y坐標(biāo)都在size范圍內(nèi),于是求出x,y的最大值即為size的值。沒(méi)有考慮z坐標(biāo)是因?yàn)閷?duì)于正交相機(jī),z不會(huì)影響物體的渲染位置。

float cameraSize = 0;

// 如果有多個(gè)目標(biāo)點(diǎn),則需要求所有這些點(diǎn)中最大的size
foreach(targetPos in targetsPos)
{
    // 將物體世界坐標(biāo)轉(zhuǎn)換為相機(jī)坐標(biāo)系中的坐標(biāo)
    Vector3 targetPosInCamera = cameraTrasform.InverseTransfromPoint(targetPos);

    // 計(jì)算y固定時(shí)的size臨界值 size = y
    size = Mathf.Max(size, targetPosInCamera.y);

    // 計(jì)算x固定時(shí)的size臨界值 size = x/aspect
    float tmpY = targetPosInCamera.x / camera.aspect;
    size = Mathf.Max(size, tmpY);
}

// 相機(jī)size應(yīng)該有個(gè)合理的最小值
size = Mathf.max(minSize, size);

// size應(yīng)該有一個(gè)緩沖值,因?yàn)槟悴粫?huì)想讓目標(biāo)正好顯示在相機(jī)邊界上
size += sizeBufferSize

然后在平滑的設(shè)置相機(jī)的size

void FixedUpdate()
{
    camera.orthographicSize = Mathf.SmoothDamp(camera.size, size, ref zoomSpeed, dampTime); 
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1 前言 OpenGL渲染3D模型離不開(kāi)空間幾何的數(shù)學(xué)理論知識(shí),而本篇文章的目的就是對(duì)空間幾何進(jìn)行簡(jiǎn)單的介紹,并對(duì)...
    RichardJieChen閱讀 7,179評(píng)論 1 11
  • 深入理解傅里葉變換Mar 12, 2017 這原本是我在知乎上對(duì)傅立葉變換、拉普拉斯變換、Z變換的聯(lián)系?為什么要進(jìn)...
    價(jià)值趨勢(shì)技術(shù)派閱讀 5,824評(píng)論 2 2
  • thiele插值算法 1點(diǎn)插值算法 function [C,c]=thiele(X,Y,Z)%X為插值點(diǎn)橫坐標(biāo),Y...
    00crazy00閱讀 2,051評(píng)論 0 4
  • 三維幾何的矩陣變換: 平移變換: 比例變換: 繞X軸旋轉(zhuǎn): 繞Y軸旋轉(zhuǎn): 繞Z軸旋轉(zhuǎn): X軸反射變換: Y軸反射變...
    cain_huang閱讀 6,744評(píng)論 2 6
  • 學(xué)習(xí)Mac開(kāi)發(fā)第四節(jié) 學(xué)習(xí)NSSlider 認(rèn)識(shí)NSSlider 層級(jí)結(jié)構(gòu) Inherits From: NSC...
    無(wú)灃閱讀 1,282評(píng)論 2 7