+ -
当前位置:首页 → 问答吧 → 初学dx,为啥不能即在程序中直接输出3D字体和模型

初学dx,为啥不能即在程序中直接输出3D字体和模型

时间:2011-09-03

来源:互联网

大体代码是这样:

C/C++ code

VOID SetWorldMatrix()
{
    //创建并设置世界矩阵
    D3DXMATRIX matWorld;
    D3DXMATRIX matTrans;
    D3DXMatrixTranslation(&matWorld,-1.75f,0.0f,0.0f);  //平移
    g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
}

VOID SetupViewandProjMatrices()
{
    //建立并设置观察矩阵
    D3DXVECTOR3 vEyePt( 0.0f, 0.0f,-8.0f );
    D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
    D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
    D3DXMATRIX matView;
    D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
    g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

    //建立并设置投影矩阵
    D3DXMATRIX matProj;
    D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
    g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
}

VOID Render()
{
    //清空后台缓冲区
    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );

    //开始在后台缓冲区绘制图形
    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {
        //设置世界矩阵
        SetWorldMatrix();

        //在后台缓冲区绘制图形
        

        for( DWORD i=0; i<g_dwNumMaterials; i++ )
        {
            if(g_pMeshMaterials[i].Diffuse.a==1.0f)
            {
                g_pd3dDevice->SetMaterial( &g_pMeshMaterials[i] );
                g_pd3dDevice->SetTexture( 0, g_pMeshTextures[i] );
                g_pMesh->DrawSubset( i );
            }
        }

        //绘制半透明部分
        for( DWORD i=0; i<g_dwNumMaterials; i++ )
        {
            if(g_pMeshMaterials[i].Diffuse.a!=1.f)
            {
                g_pd3dDevice->SetMaterial( &g_pMeshMaterials[i] );
                g_pd3dDevice->SetTexture( 0, g_pMeshTextures[i] );
                g_pMesh->DrawSubset( i );
            }
        }

        pTextMesh->DrawSubset(0);

        //结束在后台缓冲区绘制图形
        g_pd3dDevice->EndScene();
    }

    //将在后台缓冲区绘制的图形提交到前台缓冲区显示
    g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}



却不能再屏幕中同时出现模型,又出现3D字体!屏蔽掉了模型就可以显示出3D字体咯!

作者: dx_test   发布时间: 2011-09-03

在绘制字体的前面加上设置材质的语句试试
const D3DMATERIAL9 fontmtrl;
fontmtrl.Ambient = D3DCOLOR_XRGB(255, 255, 255);
fontmtrl.Diffuse = D3DCOLOR_XRGB(255, 255, 255);;
fontmtrl.Specular = D3DCOLOR_XRGB(255, 255, 255);;
fontmtrl.Emissive = D3DCOLOR_XRGB(0, 0, 0);;
fontmtrl.Power = 2.0f;
g_pd3dDevice->SetMaterial(&fontmtrl);
pTextMesh->DrawSubset(0);
因为这个是状态机,所以如果不设置,就会一直沿用前面设置的材质


作者: donger0159   发布时间: 2011-09-03

const D3DMATERIAL9 fontmtrl; 前面没有const,写错了

作者: donger0159   发布时间: 2011-09-03

const D3DMATERIAL9 fontmtrl; 前面没有const,写错了

作者: donger0159   发布时间: 2011-09-03