tamashii 发表于 2011-5-16 16:21:46

[提问]关于D3D的几个疑点

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,我为什么不能使用?需要开启什么吗?


以上,希望高手解答。

secondsen 发表于 2011-5-16 17:06:27

为啥我没有看到杂色边缘。。。还是因为 窗口黑背景 白背景的图没有代表性?不知道。

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

汇报完毕

tamashii 发表于 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);
也没什么问题啊。
....... images/back.gif

1:杂色就是黑的,你放一张图在底下,另一张图在上面,然后把上面的图缩放或旋转就看到了
2:这个问题我也很困惑,在C++就行,到了C#就不行了

secondsen 发表于 2011-5-16 17:50:43

关于旋转我先上图

render部分的代码 ,关于背景色。。第十行的注释。。。另外只是旋转没有缩放,汇报完毕


void Render()
{
D3DXMATRIX g_mat;
D3DXMatrixTransformation2D(&g_mat, NULL, 0.0f, NULL ,
         &D3DXVECTOR2(50.0f, 50.0f), 1.0f, &D3DXVECTOR2(100.0f, 100.0f));//旋转弧度为1
// Clear the backbuffer to a black color
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,0), 1.0f, 0 );
RECT rct = {0,0,512,512};
//背景白色的那张图 其他都一样,但是 D3DCOLOR_XRGB(0,0,0), 黑变成了 D3DCOLOR_XRGB(255,255,255),白
// Begin the scene
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
if ( SUCCEEDED( g_pSprite->Begin(D3DXSPRITE_ALPHABLEND) ) )
{
   g_pSprite->SetTransform(&g_mat);
   g_pSprite->Draw(g_pTexture, &rct, NULL, &D3DXVECTOR3(0,0,1), 0xffffffff);
   g_pSprite->End();
}
g_pd3dDevice->EndScene();
}
// Present the backbuffer contents to the display
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );   
}



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

secondsen 发表于 2011-5-16 18:23:20

D3DXVECTOR2 vscaling(0.5,0.5);
D3DXMATRIX g_mat;
D3DXMatrixTransformation2D(&g_mat, &D3DXVECTOR2(50.0f, 50.0f), 0, &vscaling ,
         &D3DXVECTOR2(50.0f, 50.0f), 1.0f, &D3DXVECTOR2(100.0f, 100.0f));

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

tamashii 发表于 2011-5-17 00:03:41

回 4楼(secondsen) 的帖子

我说的是有一张底图和一张顶图的情况
就想这样:

可以看到此图中间的人物(姑且叫他人物吧)边缘有一点白色。
人物的图片格式为png
页: [1]
查看完整版本: [提问]关于D3D的几个疑点