|
|

楼主 |
发表于 2009-3-13 11:57:00
|
显示全部楼层
Re:在屏幕上用 ID3DSPRITE 帖了一个图以后,MESH 不见了??
兄弟们,我回来了,问题已经解决,但是不知道为什么。。。。。
其实,使用 Sprite 的时候,如果你的程序中还需要绘制其他 3D 物体的时候,就需要注意选择begin里面的参数。。。。
Sprite->Begin( 参数选项 )
这里是所有参数的解释:
//////////////////////////////////////////////////////////////////////////////
// D3DXSPRITE flags:
// -----------------
// D3DXSPRITE_DONOTSAVESTATE
// Specifies device state is not to be saved and restored in Begin/End.
// D3DXSPRITE_DONOTMODIFY_RENDERSTATE
// Specifies device render state is not to be changed in Begin. The device
// is assumed to be in a valid state to draw vertices containing POSITION0,
// TEXCOORD0, and COLOR0 data.
// D3DXSPRITE_OBJECTSPACE
// The WORLD, VIEW, and PROJECTION transforms are NOT modified. The
// transforms currently set to the device are used to transform the sprites
// when the batch is drawn (at Flush or End). If this is not specified,
// WORLD, VIEW, and PROJECTION transforms are modified so that sprites are
// drawn in screenspace coordinates.
// D3DXSPRITE_BILLBOARD
// Rotates each sprite about its center so that it is facing the viewer.
// D3DXSPRITE_ALPHABLEND
// Enables ALPHABLEND(SRCALPHA, INVSRCALPHA) and ALPHATEST(alpha > 0).
// ID3DXFont expects this to be set when drawing text.
// D3DXSPRITE_SORT_TEXTURE
// Sprites are sorted by texture prior to drawing. This is recommended when
// drawing non-overlapping sprites of uniform depth. For example, drawing
// screen-aligned text with ID3DXFont.
// D3DXSPRITE_SORT_DEPTH_FRONTTOBACK
// Sprites are sorted by depth front-to-back prior to drawing. This is
// recommended when drawing opaque sprites of varying depths.
// D3DXSPRITE_SORT_DEPTH_BACKTOFRONT
// Sprites are sorted by depth back-to-front prior to drawing. This is
// recommended when drawing transparent sprites of varying depths.
// D3DXSPRITE_DO_NOT_ADDREF_TEXTURE
// Disables calling AddRef() on every draw, and Release() on Flush() for
// better performance.
//////////////////////////////////////////////////////////////////////////////
恩。。。说的很详细了,但是我在分别使用这些参数的时候。发现他们好像不能完全按照MS中的解释去执行。。
我最先使用的是 D3DXSPRITE_DONOTMODIFY_RENDERSTATE 。。。
解释上说,它会保留当前的渲染状态,使用默认的POSITION0, TEXCOORD0, and COLOR0 ,在执行 Sprite->end()以后,自动还原所有状态。。
但是,当我使用后,我发现 Sprite 按照指定的位置和大小贴上去了,但是我的所有 mesh 没有了光照(都变成黑色的了)。。。
其他的参数也试过了,没什么问题,最后我使用的参数是:D3DXSPRITE_ALPHABLEND
这个参数,丝毫没有提到“渲染状态”,“深度测试”,VIEWPORT,PROJECT,WORLDMETRIX,但是,使用了这个参数以后,Sprite 贴图正常,mesh 显示正常。。。。。。
兄弟们能帮我补充一下这些参数的其他细节和需要注意的地方吗?? |
|