zoukankan      html  css  js  c++  java
  • Win10系列:VC++ Direct3D图形绘制1

    通过前面的介绍,相信读者已经了解了如何新建一个用于开发Direct3D应用程序的项目模版,以及这个项目模版中用于绘制立体图形的主要函数。在本小节中,将通过一个具体的示例来介绍如何使用Visual Studio提供的Direct3D项目模版来绘制一个立体三角形,并使此立体三角形绕X轴进行旋转。

    在Visual Studio中新建一个Visual C++的Windows应用商店的Direct3D应用程序项目,将其命名为Direct3DDraw。打开CubeRenderer.cpp源文件,修改CreateDeviceResources函数中cubeVertices数组所保存的立体图形顶点位置和颜色信息,cubeVertices数组的代码如下所示:

    //定义数组cubeVertices

    VertexPositionColor cubeVertices[] =

    {

        //0顶点的位置和颜色信息

        {XMFLOAT3(0.0f, -0.5f, -0.5f), XMFLOAT3(1.0f, 0.0f, 0.0f)},

        //1顶点的位置和颜色信息

        {XMFLOAT3(0.5f, -0.5f, 0.5f), XMFLOAT3(1.0f, 0.0f, 1.0f)},

        //2顶点的位置和颜色信息

        {XMFLOAT3(-0.5f, -0.5f, 0.5f), XMFLOAT3(1.0f, 1.0f, 1.0f)},

        //3顶点的位置和颜色信息

        {XMFLOAT3(0.0f, 0.5f, 0.0f), XMFLOAT3(1.0f, 1.0f, 0.0f)},

    };

    在上面的代码中,cubeVertices数组保存了立体三角形四个顶点的位置和颜色信息,关于这些信息的具体说明可参照20.8.2小节中对创建立体图形顶点的介绍。其中cubeVertices数组中的第一个数组元素所保存的顶点的索引为0,后面的三个数组元素所保存的顶点的索引依次为1、2和3。

    修改了cubeVertices数组所保存的立体图形顶点位置和颜色信息以后,接下来在CreateDeviceResources函数中继续修改cubeIndices数组所保存的顶点索引,以便能正确地绘制出此立体三角形。修改后,cubeIndices数组的代码如下所示:

    //定义数组cubeIndices

    unsigned short cubeIndices[] =

    {

        0,1,3,

        3,1,2,

        2,0,3,

        2,1,0

    };

    在上面的代码中,cubeIndices数组保存了用于绘制立体三角形的12个顶点索引,其中从cubeIndices数组的第一个数组元素所保存的顶点索引开始,每三个相邻的顶点索引用于绘制立体三角形的一个面。

    修改了上述的代码以后,运行项目,将在应用窗口中绘制如图20-23所示的立体三角形。

    图20-23 Direct3D绘制的立体三角形

    上面示例所创建的立体三角形默认绕Y轴旋转,可以通过调用XMMatrixRotationX、XMMatrixRotationY和XMMatrixRotationZ这三个函数来设置世界矩阵,从而使立体三角形绕着特定的坐标轴旋转。

    接下来介绍如何使前面所绘制的立体三角形绕X轴旋转。在CubeRenderer.cpp源文件中修改model结构体变量的值,修改后的Update函数如下所示:

    void CubeRenderer::Update(float timeTotal, float timeDelta)

    {

        // 未使用的参数

        (void) timeDelta;

        //观察视点的位置,X=0.0,Y=0.7,Z=3.0,W=0.0

        XMVECTOR eye = XMVectorSet(0.0f, 0.7f, 1.5f, 0.0f);

        //观察视点的位置,X=0.0,Y=0.0,Z=0.0,W=0.0

        XMVECTOR at = XMVectorSet(0.0f, -0.1f, 0.0f, 0.0f);

        //观察视点的向上向量,X=0.0,Y=0.5,Z=0.0,W=0.0

        XMVECTOR up = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f);

        //设置观察视点

        XMStoreFloat4x4(&m_constantBufferData.view, XMMatrixTranspose(XMMatrixLookAtRH(eye, at, up)));

        //设置世界矩阵

        XMStoreFloat4x4(&m_constantBufferData.model, XMMatrixTranspose(XMMatrixRotationX(timeTotal * XM_PIDIV4)));

    }

    在上面的代码中,以参数timeTotal乘以常量XM_PIDIV4得到的值作为参数调用XMMatrixRotationX函数,得到一个绕X轴的旋转矩阵,然后以这个旋转矩阵作为参数调用XMMatrixTranspose函数得到一个转置矩阵,最后通过XMStoreFloat4x4函数将这个转置矩阵存储到model结构体变量中。

    运行项目后,可以在应用窗口中看到原本绕Y轴旋转的立体三角形将绕X轴不断地旋转。

  • 相关阅读:
    点击有惊喜
    模态框案例
    DOM操作
    定时器
    函数和object
    shell 判断文件出现次数
    shell 判断路径
    shell 循环数组
    shell 判断为空打印
    shell 示例1 从1叠加到100
  • 原文地址:https://www.cnblogs.com/finehappy/p/6645669.html
Copyright © 2011-2022 走看看