DirectX中如何控制物体的移动位置

junming68 2011-04-23 04:05:47
float x,y是设置初始位置(0.0f,0.0f)
我刚接触DirectX不久,我也不太清楚用什么方法来控制物体的移动,我想从屏幕的中间移动到右上,再到右下,最后回到中心的位置并且停止旋转。但目前我让物体从 (0.0f,0.0f) 移动到 (1.0f,1.0f) 运行时物体直接到(1.0f,1.0f)了,看不到这个移动的过程(红色代码部分)。希望大家帮一下!小弟在此先谢谢了!
VOID SetupMatrices(float x,float y)
{
//控制循环次数
float nx=0.0f,ny=0.0f;
//绕(1,1,1)向量旋转
D3DMXMATRIX matWorld, matWorldX, matWorldY, matWorldZ;
D3DMXMATRIX matTrans;

// 每1000ms旋转一周
UINT iTime = GetTickCount() % 1000;
int ttime=iTime;
float fAngle = iTime * 6.28f;
//旋转
D3DMXMatrixRotationX( &matWorldX, fAngle );
D3DMXMatrixRotationY( &matWorldY, fAngle );
D3DMXMatrixRotationZ( &matWorldZ, fAngle );
//平移
if(x==0.0f && y==0.0f)
{
while(x<=1.0f)
{
x=x+0.02f;
y=y+0.02f;
D3DMXMatrixTranslation(&matTrans,x,y,0.0f);
}
}

D3DMXMatrixMultiply(&matWorld,&matWorldX,&matWorldY);
D3DMXMatrixMultiply(&matWorld,&matWorld,&matWorldZ);
D3DMXMatrixMultiply(&matWorld,&matWorld,&matTrans);

g_pd3dDevice->SetTransform( D3DMTS_WORLD, (D3DMMATRIX*)&matWorld,D3DMFMT_D3DMVALUE_FLOAT );

//设置视野矩阵,指定摄象机(眼睛)所在点,观看的点,以及哪个方向是眼睛的上方以固定摄象机
D3DMXVECTOR3 vEyePt( 0.0f, 5.0f, -5.0f );
D3DMXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
D3DMXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
D3DMXMATRIX matView;
D3DMXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
g_pd3dDevice->SetTransform( D3DMTS_VIEW, (D3DMMATRIX*)&matView, D3DMFMT_D3DMVALUE_FLOAT );

//给需要显示的模型矩阵设置透视变换。通常用pi/4的视界
D3DMXMATRIX matProj;
D3DMXMatrixPerspectiveFovLH( &matProj, D3DMX_PI/4.0f, 1.0f, 1.0f, 100.0f );
g_pd3dDevice->SetTransform( D3DMTS_PROJECTION, (D3DMMATRIX*)&matProj, D3DMFMT_D3DMVALUE_FLOAT );
}
VOID Render()
{
......
SetupMatrices(0.0f,0.0f);
}
...全文
517 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
CMT100 2011-04-25
  • 打赏
  • 举报
回复
//平移
if(x==0.0f && y==0.0f)
{
while(x<=1.0f)
{
x=x+0.02f;
y=y+0.02f;
D3DMXMatrixTranslation(&matTrans,x,y,0.0f);
//在这里绘制一帧。。。。}
}
None465465535 2011-04-24
  • 打赏
  • 举报
回复
那个改变的好像只是个坐标系,并不移动物体
junming68 2011-04-23
  • 打赏
  • 举报
回复
怎么没有人……
是我没把问题说清楚,还是解决不了??
VC++场景游戏,人物移动,学VC、编游戏的示例,它的实现,靠的是以下知识和技术:   1.建立DirectX环境和创建工作页面的方法。   2.各种页面内容的拷贝方法。   3.GDI与DirectX图形处理方法的简单比较。   游戏测试操作方法:   A、在场景内点任意点,指挥主角移动。   B、将鼠标移到场景外,可以移动地图。   C、在微缩地图上点一下,可以快速定位。   D、ESC键,退出游戏。   你可以指挥主角去打猎了。但打不死的,因为这里我们还没有加对象的生命值。      部分代码:   #define MAXINT 8192 //定义一个最大整数, 地图上任意两点距离不会超过它8192   #define STACKSIZE 38536 //保存搜索节点的堆栈大小65536   #define tile_num(x,y) ((y)*map_w+(x)) //将 x,y 坐标转换为地图上块的编号   #define tile_x(n) ((n)%map_w) //由块编号得出 x,y 坐标   char map[WIDTH*SCRP/GX+2][HEIGHT*SCRP/GY+2];//地图障碍格数据    int map_w,map_h;//地图障碍格宽和高    int start_x,start_y,end_x,end_y; //起点坐标,终点坐标    PATHN pathn[500];//重组路径    int findpath();//路径寻找主函数    int stackmax;//最大值    private://私有,类内部使用    LINK queue;//保存没有处理的行走方法的节点    TREE stack[STACKSIZE]; //保存已经处理过的节点(搜索完后释放)    int dis_map[WIDTH*SCRP/GX+2][HEIGHT*SCRP/GY+2];//保存搜索路径时,间目标地最优解    void init_queue();// 初始化队列    void enter_queue(TREE node,int f);//待处理节点入队列,依靠对目的地估价距离插入排序    TREE get_from_queue(); //将离目的地估计最近的方案出队列    void freetree();//释放申请过的所有节点    int judge(int x,int y);//估价函数,估价x,y到目的地的距离,估计值必须保证比实际值小    int trytile(int x,int y,TREE father);//尝试下一步移动到x,y可行否    int zlpath(); //重组路径

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧