官术网_书友最值得收藏!

Time for action – the View matrix

  1. Add the following variable to the Fields region of the Camera class:
    private Matrix cachedViewMatrix;
  2. Add the following property to the Properties region of the Camera class:
    public Matrix View
    {
        get
        {
            if (needViewResync)
                cachedViewMatrix = Matrix.CreateLookAt(
                    Position, 
                    lookAt, 
                    Vector3.Up);
    
            return cachedViewMatrix;
        }
    }

What just happened?

We could simply recalculate the View matrix every time the Camera class was asked for it, but doing so would incur a small performance penalty. Because we do not have a lot of action happening in Cube Chaser, this penalty would not impact our game, but we can avoid it altogether. We are building a caching mechanism into the camera code in the event our game develops to the point that this optimization is helpful. Any time the View matrix is calculated, we will store it in cachedViewMatrix and simply return that matrix if the View matrix is requested without the underlying camera information having been modified.

In order to create the View matrix, we use the convenient Matrix.CreateLookAt() method, which accepts the camera position, the look at point we calculated previously, and a vector indicating what direction is considered to be up for the camera. In our case, we are using the pre-defined Vector3.Up, which translates to (0, 1, 0), or up along the positive Y axis.

That is enough of the camera to get us started. We will return to the Camera class later when we implement movement. For now, let's get on with actually drawing something to the screen!

主站蜘蛛池模板: 湖口县| 共和县| 吉首市| 喀什市| 新晃| 根河市| 长子县| 九龙城区| 临颍县| 宁津县| 嘉祥县| 柳江县| 三亚市| 广宁县| 民权县| 齐河县| 北川| 北碚区| 浑源县| 华阴市| 江津市| 东平县| 泰州市| 白银市| 花莲县| 天全县| 河曲县| 万源市| 苏尼特右旗| 巨鹿县| 灌阳县| 称多县| 玛曲县| 呼和浩特市| 建阳市| 桑植县| 孙吴县| 鄢陵县| 迭部县| 榆树市| 鸡西市|