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

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!

主站蜘蛛池模板: 鄄城县| 遵化市| 宁海县| 二连浩特市| 南漳县| 雷山县| 康乐县| 田林县| 仲巴县| 壤塘县| 蒲江县| 辉县市| 金塔县| 怀集县| 松阳县| 分宜县| 微山县| 定南县| 民勤县| 调兵山市| 五家渠市| 界首市| 万年县| 东安县| 景洪市| 甘德县| 南京市| 井冈山市| 定南县| 军事| 航空| 额尔古纳市| 闽清县| 定兴县| 邵东县| 正定县| 安义县| 浮山县| 阜新市| 南川市| 辛集市|