secondsen 发表于 2011-2-14 21:12:10

ID3DXSprite::draw的疑问

HRESULT Draw(
LPDIRECT3DTEXTURE9 pTexture, //纹理图片
CONST RECT * pSrcRect, //纹理图片中的矩形区域(就是你想画的部分)
CONST D3DXVECTOR3 * pCenter, //旋转中心
CONST D3DXVECTOR3 * pPosition,//平移矩阵
D3DCOLOR Color //渲染颜色,白色表示正常显示原图
);

pCenter          这个xy就是图片的旋转中心了,z是干什么的,有什么用啊?
pPosition       这个应该是图片显示在那个坐标是吧?那z就是在上面显示还是下面是吧?这个z是0~1.0f还是无限大都行啊?

tamashii 发表于 2011-2-15 13:52:29

1.z在某种意义上属于废参数
2.同上

secondsen 发表于 2011-2-15 15:52:42

Z不是优先级么?我指的是,谁显示在前之类的?

那么哪个精灵显示在前哪个在后,这怎么控制?

secondsen 发表于 2011-2-15 16:40:40

D3DXMatrixTransformation2D 函数

--------------------------------------------------------------------------------

创建2D的变换矩阵,就是在XY平面内变换矩阵。如果参数为NULL就当作单位矩阵看待。

定义:

D3DXMATRIX *WINAPI D3DXMatrixTransformation2D(
D3DXMATRIX *pOut,
CONST D3DXVECTOR2 *pScalingCenter,
FLOAT *pScalingRotation,
CONST D3DXVECTOR2 *pScaling,
CONST D3DXVECTOR2 *pRotationCenter,
FLOAT Rotation,
CONST D3DXVECTOR2 *pTranslation);


参数:

pOut

指向 D3DXMATRIX 结构的变换矩阵。

pScalingCenter

指向D3DXVECTOR2 结构的缩放中心向量。如果参数为NULL,Msc 矩阵为单位矩阵。 <-设置成draw的center就成了吧?

pScalingRotation

指向缩放旋转系数。<-这是啥东西?

pScaling

指向D3DXVECTOR2 结构的缩放向量。如果参数为NULL,Ms矩阵为单位矩阵。

pRotationCenter

指向D3DXVECTOR2 结构的旋转向量。如果参数为NULL,Mrc矩阵为单位矩阵。   <-旋转向量是什么? 是以这一点做旋转么

Rotation

旋转角度。
pTranslation

指向D3DXVECTOR2 结构的平移向量。如果参数为NULL,Mt矩阵为单位矩阵。 <-这个平移和draw的平移共同作用?

返回值:

指向D3DXMATRIX 结构的变换矩阵。

tamashii 发表于 2011-2-16 17:29:34

引用第2楼secondsen于2011-02-15 15:52发表的:
Z不是优先级么?我指的是,谁显示在前之类的?

那么哪个精灵显示在前哪个在后,这怎么控制?
images/back.gif

你先开始渲染的就是在后面,后渲染的就是在前面。我不是给了你一套范例么,你可以参考里面的Sprite类的使用方法

tamashii 发表于 2011-2-16 17:32:50

D3DXMATRIX *WINAPI D3DXMatrixTransformation2D(
D3DXMATRIX *pOut,  输出到哪个Matrix
CONST D3DXVECTOR2 *pScalingCenter, 截取的中心,0, 0就行
FLOAT *pScalingRotation, 截取的旋转弧度。通常是0
CONST D3DXVECTOR2 *pScaling, 截取比例,通常为1, 1
CONST D3DXVECTOR2 *pRotationCenter, 原点
FLOAT Rotation, 旋转的弧度,Pi也就是180°
CONST D3DXVECTOR2 *pTranslation); 位置

微软的解释够二的了

secondsen 发表于 2011-2-16 22:21:08

你那个范例是自定义的z,然后排序来draw()的吧?没有别的办法?

tamashii 发表于 2011-2-17 00:50:16

回 6楼(secondsen) 的帖子

貌似没有

secondsen 发表于 2011-2-17 21:38:40

打开深度缓冲
    d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
    d3dpp.EnableAutoDepthStencil = TRUE;
//-----------------------------------------------------------------------------
// Name: Render()
// Desc: Draws the scene
//-----------------------------------------------------------------------------
void Render()
{
    D3DXMATRIX matrix;
    D3DXMatrixIdentity(&matrix);

    // Clear the backbuffer to a blue color
    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );

    g_pd3dDevice->SetRenderState(D3DRS_ZENABLE , true);

    RECT rct = {0,0,512,512};
    // Begin the scene
    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {
      if ( SUCCEEDED( g_pSprite->Begin(D3DXSPRITE_ALPHABLEND) ) )
      {
            D3DXMatrixTranslation(&matrix, 0.0f, 0.0f, 0.0f);
            g_pSprite->SetTransform(&matrix);
            g_pSprite->Draw(g_pTexture, &rct, NULL, NULL, 0xffffffff);
            g_pSprite->End();
      }
      if ( SUCCEEDED( g_pSprite2->Begin(D3DXSPRITE_ALPHABLEND) ) )
      {
            D3DXMatrixTranslation(&matrix, 0.0f, 0.0f, 1.0f);
            g_pSprite2->SetTransform(&matrix);
            g_pSprite2->Draw(g_pTexture2, &rct, NULL, NULL, 0xffffffff);
            g_pSprite2->End();
      }
      // End the scene
      g_pd3dDevice->EndScene();
    }
    // Present the backbuffer contents to the display
    g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
z大的被覆盖在底下,z小的覆盖别的图。z的范围0.0f~1.0f

我一直没开深度缓冲啊。。。。

tamashii 发表于 2011-2-18 08:40:12

深度缓冲没意义,还需要在ID3DXSprite::Begin的时候指定排序方法 - -bbbb
不如直接自定义Sprite呢
页: [1] 2
查看完整版本: ID3DXSprite::draw的疑问