理解Matrix4x4.MultiplyPoint()

好奇這個函數底層是怎麼實現的。所以就是瀏覽了一些參考文獻,然後做了個小實驗。現記錄如下。其中也有一些問題沒有解決。。先來看Unity Manual

public Vector3 MultiplyPoint(Vector3 point);

Description

Transforms a position by this matrix (generic).

Returns a position v transformed by the current fully arbitrary matrix. If the matrix is a regular 3D transformation matrix, it is much faster to use MultiplyPoint3x4 instead. MultiplyPoint is slower, but can handle projective transformations as well.

using UnityEngine;

public class ScriptExample : MonoBehaviour
{
  void Start()
  {
    // Find our current location in the camera's projection space.
    Vector3 pt = Camera.main.projectionMatrix.MultiplyPoint(transform.position);
  }
}

意思就是通過某個transformation matrix改動position,現在實驗一下他們給出的代碼。在Camera上掛在整個cs文件:

Debug.Log(transform.position);
Debug.Log(Camera.main.projectionMatrix);
Vector3 pt = Camera.main.projectionMatrix.MultiplyPoint(transform.position);
Debug.Log(pt);

然後結果如下:

解釋:相機位置是(1,1,1),相機的透視投影矩陣是:,至於這個透視矩陣是怎麼算的,參考上一個博客的公式,。首先看camera的參數:

 所以:n=0.3,r=0.23,t=0.17,f=1000.因此才能算出來那個矩陣。

那麼r和t怎麼算的呢?如下,比如t

因爲fov=60,所以相當於上圖的夾角是30°,因此t=tan30° * n,也就是0.17

那麼r

目前沒想到是怎麼算的。只是納悶爲什麼不和y相等。如果有明白的朋友請給個指導。萬分感謝!

那麼矩陣是怎麼影響position的變化的呢?

沒看到有講解怎麼變化的,就算是manual手冊裏也沒有講。。。應該去哪裏看。。。若有大佬指導,請給個指導。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章