游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6296|回复: 12

关于D3DXSPRITE的问题

[复制链接]

12

主题

70

帖子

70

积分

注册会员

Rank: 2

积分
70
发表于 2005-2-21 20:10:00 | 显示全部楼层 |阅读模式
一个640*480的jpg,载入纹理,用sprite在屏幕上显示出来,如果不设置RECT大小,直接用NULL(窗口大小也是640*480,桌面设置是1024*768*16),则必须将缩放向量设为(0.3125f,0.9375f),以上两个值是计算的(640/2048,480/512),这样就可以将所有的画面显示出来,
如果将RECT设置为640,480,填入函数,其他不改,则画面只显示一部分图片,此时将rect设为1024*512大小,则显示正常,
将rect改回640*480,缩放向量怎么改都显示不正常(就是很难找到合适的值)

这样我实在是不明白SPRITE的DRAW是怎么用的
还有,我将一个2048*2048的bmp载入为纹理,然后读里面96*96的区域,我必须将缩放向量设为(0.5f,1.0f)才能正常显示,我就不明白了,怎么好像在width上就好像大了一倍似的,上面提到的问题中也有类似的现象(640/2048=0.3125,如果说要2的幂,640/1024就可以了阿)

希望有高手可以解答我的疑惑

15

主题

1268

帖子

1268

积分

金牌会员

Rank: 6Rank: 6

积分
1268
发表于 2005-2-22 09:48:00 | 显示全部楼层

Re:关于D3DXSPRITE的问题

这确实比较头痛,你如果用的是DXT类型的贴图,会有此类问题,好像其他各式好一些

15

主题

1268

帖子

1268

积分

金牌会员

Rank: 6Rank: 6

积分
1268
发表于 2005-2-22 09:49:00 | 显示全部楼层

Re:关于D3DXSPRITE的问题

缩放向量,请问这个在那里设置?
HRESULT Draw(          LPDIRECT3DTEXTURE9 pTexture,
    CONST RECT *pSrcRect,
    CONST D3DXVECTOR3 *pCenter,
    CONST D3DXVECTOR3 *pPosition,
    D3DCOLOR Color
);
我没看到

12

主题

70

帖子

70

积分

注册会员

Rank: 2

积分
70
 楼主| 发表于 2005-2-22 15:42:00 | 显示全部楼层

Re:关于D3DXSPRITE的问题

我用的是DX9的sprite,ID3DXSprite:raw Method

--------------------------------------------------------------------------------

Draws a simple sprite in screen space.

Syntax

HRESULT Draw(          LPDIRECT3DTEXTURE9 pSrcTexture,
    CONST RECT *pSrcRect,
    CONST D3DXVECTOR2 *pScaling,
    CONST D3DXVECTOR2 *pRotationCenter,
    FLOAT Rotation,
    CONST D3DVECTOR2 *pTranslation,
    D3DCOLOR Color
);
跟8里面的不一样好像

12

主题

70

帖子

70

积分

注册会员

Rank: 2

积分
70
 楼主| 发表于 2005-2-22 15:44:00 | 显示全部楼层

Re:关于D3DXSPRITE的问题

晕,难道是版本不同,你的也是9的哦

22

主题

132

帖子

134

积分

注册会员

Rank: 2

积分
134
发表于 2005-2-22 21:37:00 | 显示全部楼层

Re:关于D3DXSPRITE的问题

这个问题也困扰了我半天,我是这样解决的:

//这个是DX9用图片生成TEXTURE的一个函数,用它后图片就不能在屏幕上保持原样
HRESULT D3DUtil_CreateTexture( LPDIRECT3DDEVICE9 pd3dDevice, TCHAR* strTexture,
                               LPDIRECT3DTEXTURE9* ppTexture, D3DFORMAT d3dFormat )
{
    HRESULT hr;
    TCHAR strPath[MAX_PATH];

    // Get the path to the texture
    if( FAILED( hr = DXUtil_FindMediaFileCb( strPath, sizeof(strPath), strTexture ) ) )
        return hr;

    // Create the texture using D3DX
    return D3DXCreateTextureFromFileEx( pd3dDevice, strPath,
                D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, d3dFormat,
                D3DPOOL_MANAGED, D3DX_FILTER_TRIANGLE|D3DX_FILTER_MIRROR,
                D3DX_FILTER_TRIANGLE|D3DX_FILTER_MIRROR, 0, NULL, NULL, ppTexture );
}

//注意第三四五个参数,用这个函数,图片可以在屏幕上保持原样
        D3DXCreateTextureFromFileEx( g_pd3dDevice,
                                 "donut.bmp",
                                 320, // I had to set width manually. D3DPOOL_DEFAULT works for textures but causes problems for D3DXSPRITE.
                                 384, // I had to set height manually. D3DPOOL_DEFAULT works for textures but causes problems for D3DXSPRITE.
                                 1,   // Don't create mip-maps when you plan on using D3DXSPRITE. It throws off the pixel math for sprite animation.
                                 D3DPOOL_DEFAULT,
                                 D3DFMT_UNKNOWN,
                                 D3DPOOL_DEFAULT,
                                 D3DX_DEFAULT,
                                 D3DX_DEFAULT,
                                 D3DCOLOR_COLORVALUE(0.0f,0.0f,0.0f,1.0f),
                                 &d3dxImageInfo,
                                 NULL,
                                 &g_pDonutTexture );

36

主题

197

帖子

197

积分

注册会员

Rank: 2

积分
197
发表于 2005-2-23 14:32:00 | 显示全部楼层

Re:关于D3DXSPRITE的问题

你的到底是什么版本啊?我晕阿我的也是这个样子的
HRESULT Draw(          LPDIRECT3DTEXTURE9 pTexture,
    CONST RECT *pSrcRect,
    CONST D3DXVECTOR3 *pCenter,
    CONST D3DXVECTOR3 *pPosition,
    D3DCOLOR Color
);
并且出来的东西不会变形,被拉伸什么的。。。。。。。。。。。。。

Microsoft DirectX 9.0 SDK Update (Summer 2004),我用的是这个

15

主题

1268

帖子

1268

积分

金牌会员

Rank: 6Rank: 6

积分
1268
发表于 2005-2-23 15:41:00 | 显示全部楼层

Re:关于D3DXSPRITE的问题

la老兄,这句话何解?
D3DPOOL_DEFAULT works for textures but causes problems for D3DXSPRITE.
如果不能用D3DPOOL_DEFAULT
为什么你的例子又用D3DPOOL_DEFAULT

22

主题

132

帖子

134

积分

注册会员

Rank: 2

积分
134
发表于 2005-2-24 09:43:00 | 显示全部楼层

Re:关于D3DXSPRITE的问题

我用
//注意第三四五个参数,用这个函数,图片可以在屏幕上保持原样
D3DXCreateTextureFromFileEx( g_pd3dDevice,
                                 "donut.bmp",
                                 320, // I had to set width manually. D3DPOOL_DEFAULT works for textures but causes problems for D3DXSPRITE.
                                 384, // I had to set height manually. D3DPOOL_DEFAULT works for textures but causes problems for D3DXSPRITE.
                                 1,   // Don't create mip-maps when you plan on using D3DXSPRITE. It throws off the pixel math for sprite animation.
                                 D3DPOOL_DEFAULT,
                                 D3DFMT_UNKNOWN,
                                 D3DPOOL_DEFAULT,
                                 D3DX_DEFAULT,
                                 D3DX_DEFAULT,
                                 D3DCOLOR_COLORvalue(0.0f,0.0f,0.0f,1.0f),
                                 &d3dxImageInfo,
                                 NULL,
                                 &g_pDonutTexture );
生成的TEXTURE用D3DXSPRITE->DRAW(...)显示就会保持原样,第三四个参数要分别设置图片的长和宽,第五个参数要设为1

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-2-25 18:24:00 | 显示全部楼层

Re:关于D3DXSPRITE的问题

但在不知图片大小下会有错。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-24 18:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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