天行健 君子当自强而不息

创建游戏内核(5) 【接口与实现分离版】

 

本篇是创建游戏内核(4)【接口与实现分离版】的续篇,关于该内核的细节说明请参考创建游戏内核(5),这个版本主要是按照功能划分模块的思想,并严格按照接口与实现相分离的原则来写的,没有用面向对象的思想来写,没有继承没有多态。大家可以对比两个版本,比较优劣。

接口:

void update_world_matrix(BOOL use_billboard, D3DXMATRIX* mat_world, 
    
const D3DXMATRIX* mat_scale, const D3DXMATRIX* mat_rotation, const D3DXMATRIX* mat_translation,
    
const D3DXMATRIX* mat_combine1, const D3DXMATRIX* mat_combine2);
 

实现:

//-------------------------------------------------------------------------
// Update world transformation matrix.
//-------------------------------------------------------------------------
void update_world_matrix(BOOL use_billboard, D3DXMATRIX* mat_world, 
    
const D3DXMATRIX* mat_scale, const D3DXMATRIX* mat_rotation, const D3DXMATRIX* mat_translation,
    
const D3DXMATRIX* mat_combine1, const D3DXMATRIX* mat_combine2)
{
    D3DXMATRIX _mat_view, _mat_transposed;

    
// setup billboarding matrix
    if(use_billboard)
    {
        
if(g_d3d_device)
        {
            g_d3d_device->GetTransform(D3DTS_VIEW, &_mat_view);
            D3DXMatrixTranspose(&_mat_transposed, &_mat_view);

            _mat_transposed._41 = _mat_transposed._42 = _mat_transposed._43 = 0.0;
            _mat_transposed._14 = _mat_transposed._24 = _mat_transposed._34 = 0.0;
        }
        
else
            D3DXMatrixIdentity(&_mat_transposed);
    }

    
// combine scaling and rotation matrices first
    D3DXMatrixMultiply(mat_world, mat_scale, mat_rotation);

    
// apply billboard matrix
    if(use_billboard)
        D3DXMatrixMultiply(mat_world, mat_world, &_mat_transposed);

    
// combine with translation matrix
    D3DXMatrixMultiply(mat_world, mat_world, mat_translation);

    
// combine with combined matrices (if any)

    
if(mat_combine1)
        D3DXMatrixMultiply(mat_world, mat_world, mat_combine1);

    
if(mat_combine2)
        D3DXMatrixMultiply(mat_world, mat_world, mat_combine2);
}

posted on 2007-10-02 22:15 lovedday 阅读(179) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

导航

统计

常用链接

随笔分类(178)

3D游戏编程相关链接

搜索

最新评论