游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3122|回复: 6

有个问题关于dx10的ID3DX10Sprite

[复制链接]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2010-6-18 00:35:00 | 显示全部楼层 |阅读模式
Dx9里面的ID3DXSprite有SetTransform ,这样绘制的时候可以设置深度z

D3DXMATRIX matrix;
D3DXMatrixIdentity(&matrix);
D3DXMatrixTranslation(&matrix, 0.0f, 0.0f, zValue);
m_pdx9Sprite->SetTransform(&matrix);

而ID3DX10Sprite没有SetTransform 方法,那我想改变深度或缩放该如何哦?

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2010-6-18 18:07:00 | 显示全部楼层

Re:有个问题关于dx10的ID3DX10Sprite

在dx9里面我绘制文字用这个下面的方式z值由D3DXVec3Project事先计算出来的,目的是文字在场景中能被物件正确遮挡
                  gd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
                  m_pSprite->Begin( D3DXSPRITE_ALPHABLEND|D3DXSPRITE_SORT_TEXTURE);
                  D3DXMATRIX matrix;
                  D3DXMatrixIdentity(&matrix);
                  D3DXMatrixTranslation(&matrix, 0.0f, 0.0f, s.z);
                  m_pSprite->SetTransform(&matrix);
                  m_Font->DrawText(m_pSprite, pMsg, .......
          m_pSprite->End();

而在dx10中这个如何实现呢?而且我发现dx10里面的font drawText竟然会改变渲染状态,用起来很不爽,也许是我方法不对

特求解决方案

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2010-6-20 09:24:00 | 显示全部楼层

Re:有个问题关于dx10的ID3DX10Sprite

D3DX10_SPRITE中不是有mWorld吗
DX10下做正常渲染的时候最好在technique中重新设置所有的状态,这样可以避免很多未知的问题

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2010-6-20 09:59:00 | 显示全部楼层

Re:有个问题关于dx10的ID3DX10Sprite

但D3DX10_SPRITE如何能把font的内容弄上去呢,貌似这东西是绑定一预设纹理,然后交给sprite来绘制的

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2010-6-20 15:00:00 | 显示全部楼层

Re:有个问题关于dx10的ID3DX10Sprite

不是专门有个ID3DX10Font吗...

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2010-6-20 22:12:00 | 显示全部楼层

Re: 有个问题关于dx10的ID3DX10Sprite

这个效果我在dx10下已经实现了,没有使用到D3DX10_SPRITE
当然用到了ID3DX10Font只是不太明白ID3DX10Font如何drawtext到D3DX10_SPRITE上,然后取出这个D3DX10_SPRITE再设置
worldMatrix
楼主可以试试,我这个效果,我是在
float zoffset = fontInfo.ZValue -  0.4995f; //应该是0.5的有一定的浮点数误差要比0.5稍微小一点点
if(zoffset > 0.5f)
zoffset = 0.5f;
D3DXMatrixTranslation(&matrix, 0, 0, zoffset); //调整view,这样能实现自动遮挡
m_pSprite->SetViewTransform(&matrix)

上面做的文章实现了这个效果,做法有点变态,甚至对于这个方法的真正的意义还没完全搞懂,sdk文档帮助上写的
Pointer to a D3DXMATRIX that contains a transform of the sprite from the original world space. Use this transform to scale, rotate, or transform the sprite.

“original world space” 是啥意思,一语带过
(据文档所述还能位移,缩放,旋转sprite ,用ViewTransform来搞,这似乎太诡异了点吧?,倒是这段文字给了我一些希望)
我是完全慢慢试出来达到下面的效果,能满足我的需要了,但还不能明白dx10绘制font内部shader到底做了什么变换,这搞了我整整一天的时间

楼上的高手可以做做看看有没更简便的途径,或D3DX10_SPRITE实现这样效果
要求文字在空间绘制,能判断深度渲染并正确被遮挡



5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2010-6-22 12:43:00 | 显示全部楼层

Re:有个问题关于dx10的ID3DX10Sprite

那就自己封装一个Sprite,使用fx来渲吧,d10的平面我都是这么弄的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-8 15:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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