dx11学习笔记-4、用DX画一个旋转的立方体

这篇博客介绍了如何在DirectX 11中应用理论知识,通过设置变换矩阵,将一个静态立方体变为旋转立方体。内容包括初始化变换矩阵,将矩阵输入着色器,创建立方体的顶点和索引,以及实现立方体的旋转效果。重点在于理解如何在渲染过程中更新常量缓冲区和利用顶点着色器实现三维变换。
摘要由CSDN通过智能技术生成

继续按照MS的官方教程来整理知识点。上一篇我们从理论层面讲了顶点变换,这一篇我们将把理论用于实践。DX11中对顶点的变换操作同样是在顶点着色器中进行,所以除了顶点信息之外,我们需要把变换矩阵也添入着色器输入的队伍中去。

初始化变换矩阵

为了方便操作,我们将三个变换矩阵都放在一个结构体中,这个结构体将作为常量缓存输入着色器。

struct ConstantBuffer
{
    XMMATRIX mWorld;
    XMMATRIX mView;
    XMMATRIX mProjection;
};

全局变量新增:

ID3D11Buffer*           g_pConstantBuffer = NULL;
XMMATRIX                g_World;
XMMATRIX                g_View;
XMMATRIX                g_Projection;

InitDevice()新增:

    // Create the constant buffer
    bd.Usage = D3D11_USAGE_DEFAULT;
    bd.ByteWidth = sizeof(ConstantBuffer);
    //绑定信息是常量缓存
    bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
    bd.CPUAccessFlags = 0;
    //先传NULL数据进去,render时再更新g_pConstantBuffer
    hr = g_pd3dDevice->CreateBuffer( &bd, NULL, &g_pConstantBuffer );
    if( FAILED( hr ) )
        return hr;

    //初始化各个矩阵
    //设置模型矩阵,以标准矩阵初始化
    // Initialize the world matrix
    g_World = XMMatrixIdentity();

    //设置视图矩阵,初始化照相机位置和朝向
    // Initialize the view matrix
    XMVECTOR Eye = XMVectorSet( 0.0f, 1.0f, -5.0f, 0.0f );
    XMVECTOR At = XMVectorSet( 0.0f, 1.0f, 0.0f, 0.0f );
    XMVECTOR Up = XMVectorSet( 0.0f, 1.0f, 0.0f, 0.0f );
    g_View = XMMatrixLookAtLH( Eye, At, Up );

    //设置透视投影矩阵,XM_PIDIV2=1.57,是y方向上视野角的弧度值;width和height是窗口客户区的宽高
    // Initialize the projection matrix
    g_Projection = XMMatrixPerspectiveFovLH( XM_PIDIV2, width / (FLOAT)height, 0.01f, 100.0f );

渲染时输入变换矩阵的实际值

在Render()时,我们将更新g_pConstantBuffer的填充数据

    ConstantBuffer cb;
    cb.mWorld = XMMatrixTranspose( g_World );
    cb.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值