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还是无限大都行啊? 1.z在某种意义上属于废参数
2.同上 Z不是优先级么?我指的是,谁显示在前之类的?
那么哪个精灵显示在前哪个在后,这怎么控制? 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 结构的变换矩阵。 引用第2楼secondsen于2011-02-15 15:52发表的:
Z不是优先级么?我指的是,谁显示在前之类的?
那么哪个精灵显示在前哪个在后,这怎么控制?
images/back.gif
你先开始渲染的就是在后面,后渲染的就是在前面。我不是给了你一套范例么,你可以参考里面的Sprite类的使用方法 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); 位置
微软的解释够二的了 你那个范例是自定义的z,然后排序来draw()的吧?没有别的办法?
回 6楼(secondsen) 的帖子
貌似没有 打开深度缓冲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
我一直没开深度缓冲啊。。。。 深度缓冲没意义,还需要在ID3DXSprite::Begin的时候指定排序方法 - -bbbb
不如直接自定义Sprite呢
页:
[1]
2