初学dx,为啥不能即在程序中直接输出3D字体和模型
时间:2011-09-03
来源:互联网
大体代码是这样:
C/C++ code
却不能再屏幕中同时出现模型,又出现3D字体!屏蔽掉了模型就可以显示出3D字体咯!
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);
因为这个是状态机,所以如果不设置,就会一直沿用前面设置的材质
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28