DirectX9 SDK Samples(3) Tutorial 3: Using Matrices

这一次内容仍然为渲染一个基本图形,但与上次不同的是,这一次采用3D的形式,也就是说,矩阵变换工作需要自己完成。

Step 1 - Defining the World Transformation Matrix

世界变换矩阵定义了几何物体在3D模型空间内的平移、缩放和旋转,也就是位置、大小和朝向。

D3DXMATRIX matWorld;
D3DXMatrixRotationY( &matWorld, timeGetTime()/150.0f );
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

上面的代码将物体沿Y轴旋转timeGetTime()/150.0f度。


Step 2 - Defining the View Transformation Matrix

视角变换矩阵决定了视角的位置和旋转角度,也就是说,这个矩阵决定了观察的位置和角度。

D3DXVECTOR3 vEyePt   ( 0.0f, 3.0f,-5.0f );
D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 vUpVec   ( 0.0f, 1.0f, 0.0f );
D3DXMATRIXA16 matView;
D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

上面的代码说明观察者在(0.0f, 3.0f, -5.0f),以(0.0f, 1.0f, 0.0f)为向上向量,望向(0.0f, 0.0f, 0.0f)。


Step 3 - Defining the Projection Transformation Matrix

投影矩阵决定3D物体如何投影到2D窗口上。

D3DXMATRIX matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );

上面的代码说明设置FOV为0.25PI,长宽比例为1,近截面为1.0f,远截面为100.0f。


至此完成了矩阵变换工作。值得一提的是,矩阵变换应该在绘制物体前完成。如下:

    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {
        // Setup the world, view, and projection Matrices
        SetupMatrices();


        // Render the vertex buffer contents
        g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( CUSTOMVERTEX ) );
        g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
        g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 1 );


        // End the scene
        g_pd3dDevice->EndScene();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值