幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 6565|回复: 10

[游戏编程] ID3DXSprite::draw的疑问

[复制链接]

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2011-2-14 21:12:10 | 显示全部楼层 |阅读模式
HRESULT Draw(
LPDIRECT3DTEXTURE9 pTexture, //纹理图片
CONST RECT * pSrcRect, //纹理图片中的矩形区域(就是你想画的部分)
CONST D3DXVECTOR3 * pCenter, //旋转中心
CONST D3DXVECTOR3 * pPosition,//平移矩阵
D3DCOLOR Color //渲染颜色,白色表示正常显示原图
);

pCenter          这个xy就是图片的旋转中心了,z是干什么的,有什么用啊?
pPosition       这个应该是图片显示在那个坐标是吧?那z就是在上面显示还是下面是吧?这个z是0~1.0f还是无限大都行啊?
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复

使用道具 举报

24

主题

117

帖子

1274

积分

⑥精研

积分
1274
QQ
发表于 2011-2-15 13:52:29 | 显示全部楼层
1.z在某种意义上属于废参数
2.同上
Tamashii是啥意思? 魂! ======================= 我真是败给C++的面向对象了啊……
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2011-2-15 15:52:42 | 显示全部楼层
Z不是优先级么?我指的是,谁显示在前之类的?

那么哪个精灵显示在前哪个在后,这怎么控制?
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 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

[in, out] 指向 D3DXMATRIX 结构的变换矩阵。

pScalingCenter

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

pScalingRotation

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

pScaling

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

pRotationCenter

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

Rotation

[in] 旋转角度。
pTranslation

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

返回值:

指向D3DXMATRIX 结构的变换矩阵。
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

24

主题

117

帖子

1274

积分

⑥精研

积分
1274
QQ
发表于 2011-2-16 17:29:34 | 显示全部楼层
引用第2楼secondsen于2011-02-15 15:52发表的  :
Z不是优先级么?我指的是,谁显示在前之类的?

那么哪个精灵显示在前哪个在后,这怎么控制?
你先开始渲染的就是在后面,后渲染的就是在前面。我不是给了你一套范例么,你可以参考里面的Sprite类的使用方法
Tamashii是啥意思? 魂! ======================= 我真是败给C++的面向对象了啊……
回复 支持 反对

使用道具 举报

24

主题

117

帖子

1274

积分

⑥精研

积分
1274
QQ
发表于 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); 位置

微软的解释够二的了
Tamashii是啥意思? 魂! ======================= 我真是败给C++的面向对象了啊……
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2011-2-16 22:21:08 | 显示全部楼层
你那个范例是自定义的z,然后排序来draw()的吧?没有别的办法?
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

24

主题

117

帖子

1274

积分

⑥精研

积分
1274
QQ
发表于 2011-2-17 00:50:16 | 显示全部楼层

回 6楼(secondsen) 的帖子

貌似没有
Tamashii是啥意思? 魂! ======================= 我真是败给C++的面向对象了啊……
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2011-2-17 21:38:40 | 显示全部楼层
打开深度缓冲
  1.     d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
  2.     d3dpp.EnableAutoDepthStencil = TRUE;
复制代码
  1. //-----------------------------------------------------------------------------
  2. // Name: Render()
  3. // Desc: Draws the scene
  4. //-----------------------------------------------------------------------------
  5. void Render()
  6. {
  7.     D3DXMATRIX matrix;
  8.     D3DXMatrixIdentity(&matrix);
  9.     // Clear the backbuffer to a blue color
  10.     g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
  11.     g_pd3dDevice->SetRenderState(D3DRS_ZENABLE , true);
  12.     RECT rct = {0,0,512,512};
  13.     // Begin the scene
  14.     if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
  15.     {
  16.         if ( SUCCEEDED( g_pSprite->Begin(D3DXSPRITE_ALPHABLEND) ) )
  17.         {
  18.             D3DXMatrixTranslation(&matrix, 0.0f, 0.0f, 0.0f);
  19.             g_pSprite->SetTransform(&matrix);
  20.             g_pSprite->Draw(g_pTexture, &rct, NULL, NULL, 0xffffffff);
  21.             g_pSprite->End();
  22.         }
  23.         if ( SUCCEEDED( g_pSprite2->Begin(D3DXSPRITE_ALPHABLEND) ) )
  24.         {
  25.             D3DXMatrixTranslation(&matrix, 0.0f, 0.0f, 1.0f);
  26.             g_pSprite2->SetTransform(&matrix);
  27.             g_pSprite2->Draw(g_pTexture2, &rct, NULL, NULL, 0xffffffff);
  28.             g_pSprite2->End();
  29.         }
  30.         // End the scene
  31.         g_pd3dDevice->EndScene();
  32.     }
  33.     // Present the backbuffer contents to the display
  34.     g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
  35. }
复制代码
z大的被覆盖在底下,z小的覆盖别的图。z的范围0.0f~1.0f

我一直没开深度缓冲啊。。。。
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

24

主题

117

帖子

1274

积分

⑥精研

积分
1274
QQ
发表于 2011-2-18 08:40:12 | 显示全部楼层
深度缓冲没意义,还需要在ID3DXSprite::Begin的时候指定排序方法 - -bbbb
不如直接自定义Sprite呢
Tamashii是啥意思? 魂! ======================= 我真是败给C++的面向对象了啊……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-3-29 04:59 , Processed in 0.024351 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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