游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1789|回复: 2

为什么我的id3dxsprite渲出来,要不就在最前面,要不就在

[复制链接]

75

主题

102

帖子

110

积分

注册会员

Rank: 2

积分
110
发表于 2009-3-13 15:08:00 | 显示全部楼层 |阅读模式
我想改变sprite的zbuffer,但不知道为什么,怎样设置都不是在我场景当中最前面,如果我吧D3DXMatrixTransformation的tanslations 的z改成1,那sprite 报道整个场景的最后面了...怎样才能把sprite设置到场景当中呢?

...
          g_pDevice->SetRenderState(   D3DRS_ZENABLE,   TRUE    );
                 D3DXMatrixLookAtLH(&matView,&D3DXVECTOR3(campos.x, campos.y, campos.z),//Camera Position
        &D3DXVECTOR3(right.x, right.y,right.z),    //Look At Position
        &D3DXVECTOR3(dir.x,dir.y, dir.z));        //Up Direction

        D3DXMatrixTransformation(&vMat, NULL, NULL, &D3DXVECTOR3(1.0f,1.0f, 1.0f), &D3DXVECTOR3(50.0f,50.0f, 50.0f),NULL, &D3DXVECTOR3(200.0f,500.0f,1.0f));
        D3DXMatrixScaling(&faceUsermat,0.01f,-0.01f,0.01f);
        D3DXMatrixMultiply(&matTrans, &matTrans, &matScale);
        D3DXMatrixMultiply(&matView, &matView, &matTrans);
        g_pDevice->SetTransform(D3DTS_VIEW, &matView);

          g_pSprit->Begin(D3DXSPRITE_ALPHABLEND);
        g_pFont->DrawText(g_pSprit,_T("大小多少"),-1,NULL,DT_TOP|DT_LEFT|DT_VCENTER,0xffffffff);

        g_pSprit->End();


           .....

21

主题

112

帖子

118

积分

注册会员

Rank: 2

积分
118
发表于 2009-3-13 16:59:00 | 显示全部楼层

Re:为什么我的id3dxsprite渲出来,要不就在最前面,要不就

唯独没有看见你的 g_pSprit->Begin()。。。
Begin 里面的参数很重要啊,如果你的场景全部都是由 Sprite 构成的话,那你恐怕要在 Begin 里面填上参数:
D3DXSPRITE_SORT_DEPTH_FRONTTOBACK 或者 D3DXSPRITE_SORT_DEPTH_BACKTOFRONT 这两个参数可以根据你所有 Sprite 的 z 坐标进行 z排序。。。。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-3-13 17:09:00 | 显示全部楼层

Re:为什么我的id3dxsprite渲出来,要不就在最前面,要不就

你应该求出投影到屏幕上的z值提示一下
用:D3DXVec3Project这个函数 求出s.z

                  gd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
                  m_Spirte->Begin( D3DXSPRITE_ALPHABLEND|D3DXSPRITE_SORT_TEXTURE);
                  D3DXMATRIX matrix;
                  D3DXMatrixIdentity(&matrix);
                  D3DXMatrixTranslation(&matrix, 0.0f, 0.0f, s.z); <---这里要做个变换,z是投影的深度
                  m_Spirte->SetTransform(&matrix);
                  DrawText(m_Spirte, pMsg, (int)s.y, (int)s.x, rect_width, rect_height,color,topOffset,leftOffset,  vAlign, hAlign);
                  m_Spirte->End();
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 03:24

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表