幻想森林

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

[游戏编程] [提问]关于D3D的几个疑点

[复制链接]

24

主题

117

帖子

1274

积分

⑥精研

积分
1274
QQ
发表于 2011-5-16 16:21:46 | 显示全部楼层 |阅读模式
1.在D3D中用Sprite显示一个纹理,如果纹理被缩放或被旋转时,会产生一个杂色的边缘。这种杂色边缘有办法解决吗?
2.还是D3D文字消锯齿的问题
http://www.rpgchina.net/read-htm-tid-40633.html
我想用C#制作游戏,如果用GetGlyphOutline就太难了。有没有什么别的办法能消锯齿输出文字?

我现在用的方法:
先把文字以两倍大小渲染到纹理1
然后把纹理1以1/2大小渲染到纹理2
这种方式就会问题1的效果,所以想要一种更好的渲染方式。
全局消锯齿就不要说了,因为显卡不好

3.关于合成方式:
LPD3DDEVICE9->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
LPD3DDEVICE9->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
这样是加法合成,也就是将当前渲染阶段的颜色与上一渲染阶段的颜色相加。
如果我要做减法怎么做?

4.我看见很多程序都可以在LPD3DDEVICE9->Clear的时候使用ZBUFFER,我为什么不能使用?需要开启什么吗?


以上,希望高手解答。
Tamashii是啥意思? 魂! ======================= 我真是败给C++的面向对象了啊……
回复

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

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

Rank: 8Rank: 8

积分
2147483647
发表于 2011-5-16 17:06:27 | 显示全部楼层
为啥我没有看到杂色边缘。。。还是因为 窗口黑背景 白背景的图没有代表性?不知道。

我没开深冲,zbuffer
    pDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_RGBA(0, 0, 0, 255), 1.0f, 0);
也没什么问题啊。

汇报完毕
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

24

主题

117

帖子

1274

积分

⑥精研

积分
1274
QQ
 楼主| 发表于 2011-5-16 17:28:15 | 显示全部楼层
引用第1楼secondsen于2011-05-16 17:06发表的  :
为啥我没有看到杂色边缘。。。还是因为 窗口黑背景 白背景的图没有代表性?不知道。

我没开深冲,zbuffer
    pDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_RGBA(0, 0, 0, 255), 1.0f, 0);
也没什么问题啊。
.......
1:杂色就是黑的,你放一张图在底下,另一张图在上面,然后把上面的图缩放或旋转就看到了
2:这个问题我也很困惑,在C++就行,到了C#就不行了
Tamashii是啥意思? 魂! ======================= 我真是败给C++的面向对象了啊……
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

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

Rank: 8Rank: 8

积分
2147483647
发表于 2011-5-16 17:50:43 | 显示全部楼层
关于旋转我先上图

render部分的代码 ,关于背景色。。第十行的注释。。。另外只是旋转没有缩放,汇报完毕
  1. void Render()
  2. {
  3. D3DXMATRIX g_mat;
  4. D3DXMatrixTransformation2D(&g_mat, NULL, 0.0f, NULL ,
  5.          &D3DXVECTOR2(50.0f, 50.0f), 1.0f, &D3DXVECTOR2(100.0f, 100.0f));//旋转弧度为1
  6. // Clear the backbuffer to a black color
  7. g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,0), 1.0f, 0 );
  8. RECT rct = {0,0,512,512};
  9. //背景白色的那张图 其他都一样,但是 D3DCOLOR_XRGB(0,0,0), 黑变成了 D3DCOLOR_XRGB(255,255,255),白  
  10. // Begin the scene
  11. if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
  12. {
  13.   if ( SUCCEEDED( g_pSprite->Begin(D3DXSPRITE_ALPHABLEND) ) )
  14.   {
  15.    g_pSprite->SetTransform(&g_mat);
  16.    g_pSprite->Draw(g_pTexture, &rct, NULL, &D3DXVECTOR3(0,0,1), 0xffffffff);
  17.    g_pSprite->End();
  18.   }
  19.   g_pd3dDevice->EndScene();
  20. }
  21. // Present the backbuffer contents to the display
  22. g_pd3dDevice->Present( NULL, NULL, NULL, NULL );   
  23. }
  24.   
复制代码


从图上看,确实没有杂色啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

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

Rank: 8Rank: 8

积分
2147483647
发表于 2011-5-16 18:23:20 | 显示全部楼层
  1. D3DXVECTOR2 vscaling(0.5,0.5);
  2. D3DXMATRIX g_mat;
  3. D3DXMatrixTransformation2D(&g_mat, &D3DXVECTOR2(50.0f, 50.0f), 0, &vscaling ,
  4.          &D3DXVECTOR2(50.0f, 50.0f), 1.0f, &D3DXVECTOR2(100.0f, 100.0f));
复制代码

这是缩小+旋转。。也没有杂色啊 我的是没问题的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

24

主题

117

帖子

1274

积分

⑥精研

积分
1274
QQ
 楼主| 发表于 2011-5-17 00:03:41 | 显示全部楼层

回 4楼(secondsen) 的帖子

我说的是有一张底图和一张顶图的情况
就想这样:
  
可以看到此图中间的人物(姑且叫他人物吧)边缘有一点白色。
人物的图片格式为png

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 05:02 , Processed in 0.024850 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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