【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 6041|回复: 18

[求助]关于图片镜像的问题

[复制链接]
发表于 2006-6-6 15:40:35 | 显示全部楼层 |阅读模式

做一个2d的游戏。想让一个人物可以左右走动,但我只有一组人物向左走的图片。我使用的是D3DXSprite,有办法作图片的镜像吗?

请高手指教!谢谢!

发表于 2006-6-13 08:02:58 | 显示全部楼层

楼主可以去把 DIABLO 2 的资源打开看看(我看过很多遍了)

里面所有精灵的图片都是事先准备好的,没有一个精灵是用的算法来翻转的

精灵:

1.人物:包括 头,身体,手臂,腿.....

2.各种武器:武器的各种动作,砍,投,挥舞.......

也容易理解为什么 它的 MPQ 文件会那么大了

发表于 2006-6-6 15:52:46 | 显示全部楼层

这个不难,D3DXSprite中有个参数是旋转(不同的D3Dx9sdk版本有所不同),你设定好旋转角度就可以了,但是还有一个人问就是旋转以后会错位,所以还要用到平移。

 楼主| 发表于 2006-6-6 16:06:08 | 显示全部楼层

是用D3DXMatrixRotationY吗?

按Y轴旋转的话,无法看到背面。

[此贴子已经被作者于2006-6-6 16:21:43编辑过]
发表于 2006-6-6 18:53:12 | 显示全部楼层

可以看到背面的

m_pd3d9Device->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );

加上这条语句,就可以看到背面了

发表于 2006-6-7 01:02:44 | 显示全部楼层

2D还要看到背面,这个要求太过分了!~

在dx9.0b版本中D3DXSprite

g_pSprite-> Draw(g_pTexture //纹理图片>>

&rct //纹理图片中的矩形区域>>

NULL //绘制图片的伸缩矩阵>>

NULL //绘制图片的旋转矩阵中心坐标>>

NULL //绘制图片的旋转角度>>

NULL //绘制图片的平移矩阵

0xffffffff); //绘制图片时的颜色

你看看这里,也许你会明白很多

http://forum.exceedu.com/forum/dispbbs.asp?boardID=46&ID=6940&page=3

 楼主| 发表于 2006-6-7 14:38:44 | 显示全部楼层

谢谢。不过我现在用的9.0c

HRESULT Draw(      

LPDIRECT3DTEXTURE9 pTexture, CONST RECT *pSrcRect, CONST D3DXVECTOR3 *pCenter, CONST D3DXVECTOR3 *pPosition, D3DCOLOR Color );
DirectX文档提示用矩阵变换。我试了一下用平移、翻转、平移的方法,结果是图片和坐标轴一起反转了。
是我的方法有什么问题么?
 
 
发表于 2006-6-7 16:42:46 | 显示全部楼层

那肯定是你的方法问题,我原来在《超级玛丽.net》里面已经用过反转人物图片了。

我给你的那个连接里面有详细的dx9.0b版本和dx9.0c版本中命令的对照。

 楼主| 发表于 2006-6-7 18:05:37 | 显示全部楼层

D3DXMatrixTranslation(&matMove2, 800,0, 0.0f);
D3DXMatrixRotationY( &matRotate, D3DX_PI );
D3DXMatrixMultiply(&matTransformation, &matRotate, &matMove2 );
m_pSprite->SetTransform(&matTransformation);

图片和坐标轴都翻过来了,怎么做才能不反转坐标轴呢?是不是少了什么步骤,高人帮忙啊

[em06]
发表于 2006-6-7 19:07:12 | 显示全部楼层

汗流浃背~~

你用的旋转矩阵能不整个都翻嘛!看看3D的游戏设计里面也是在每一个模型前面用,用完就设置回复矩阵。你这样直接用能不翻才怪。

再说2D的D3DXSprite本身就带有翻转功能?不用设置矩阵。

 楼主| 发表于 2006-6-8 09:32:50 | 显示全部楼层

我设置了2个精灵,一个正常的,一个反转的。反转的图片用反转的精灵画,但坐标还是倒过来的,让图片向左移动却往右边跑。

9.0c的draw()没有反转功能了,有一个设置旋转中心的参数也不知道怎么用。msdn上说用矩阵变换配合自带的SetTransform来做

发表于 2006-6-8 10:21:32 | 显示全部楼层

D3DXSprite默认的旋转中心是左边的这个点,你可以自己设定点来旋转,这就是旋转中心的参数的意义。

这翻转精灵这个很简单,动动脑子很快就能解决。设置旋转翻来翻去参数很多,不如用反向伸缩来得直接。

 楼主| 发表于 2006-6-8 11:42:30 | 显示全部楼层

终于搞定了。

bool GameDisPlay:rawInverseBitmap( float x,float y,int num,RECT rct )
{
HRESULT ret = S_OK;

if(m_pTexture[num])
{
D3DXMatrixTranslation(&matMove1, -x, -y, 0.0f);
D3DXMatrixTranslation(&matMove2, x+rct.right, y, 0.0f);
D3DXMatrixRotationY( &matRotate, D3DX_PI );
D3DXMatrixMultiply(&matTransformation, &matMove1, &matRotate);
D3DXMatrixMultiply(&matTransformation, &matTransformation, &matMove2);
m_pInverseSprite->SetTransform(&matTransformation);

ret = m_pInverseSprite->Draw(m_pTexture[num],&rct,0,&D3DXVECTOR3(x,y,0),0xffffffff);
if(S_OK != ret)
return false;
}
return true;
}

最后还要还原d3d设备的矩阵。相对9.0b的精灵不是一般的麻烦

[em07][em07][em07]

感谢帮忙!谢谢!


[em06][em06][em06]
发表于 2006-6-8 16:07:42 | 显示全部楼层

用D3D的矩阵用完就是要重置d3d设备的矩阵。3D模型设置的时候都是这么用的。

发表于 2006-6-9 09:54:15 | 显示全部楼层

建议楼主还是不要用这种方法。

准备好素材,直接帖图比较好,这样做虽然可以节省一定的资源空间,但是不利于算法的简单化

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

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-2-6 01:51

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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