游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3302|回复: 7

正交投影矩阵变换后屏幕上目标的移动问题!

[复制链接]

29

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2007-10-29 19:54:00 | 显示全部楼层 |阅读模式
将一个点通过正交投影变换到屏幕平面之后,想让此点随时间按预定轨迹移动。是通过平移世界矩阵实现点的移动么?不过rhw类型的点矩阵变换对其不是不起作用么?高手们有思路么?不胜感谢!

17

主题

282

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
发表于 2007-10-29 20:45:00 | 显示全部楼层

Re:正交投影矩阵变换后屏幕上目标的移动问题!

(x,y,z)的点可以通过平移世界矩阵实现点的移动

rhw的点实际上是屏幕上的点 所以应该不行

楼下批评指正

29

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
 楼主| 发表于 2007-10-29 22:05:00 | 显示全部楼层

Re:正交投影矩阵变换后屏幕上目标的移动问题!

通过平移世界矩阵不行,那应该怎样实现呢?请教了!

1

主题

149

帖子

149

积分

注册会员

Rank: 2

积分
149
QQ
发表于 2007-10-30 09:50:00 | 显示全部楼层

Re:正交投影矩阵变换后屏幕上目标的移动问题!

对于rhw类型的顶点,就不能使用矩阵让他动了,而是需要修改顶点的坐标才行.

29

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
 楼主| 发表于 2007-10-30 10:23:00 | 显示全部楼层

Re:正交投影矩阵变换后屏幕上目标的移动问题!

请问修改坐标是锁住vb修改的么,即每次要渲染之前,将vb锁住,改其坐标,再渲染么?小弟这么做过了,那个点不动啊,不知怎么回事。附代码:麻烦了!
bool Display(float timeDelta)    //渲染函数  timeDelta为两帧时间间隔
{
        if( Device )          //
        {
                  //
               
                thta+=timeDelta;              //thta 是static float 型全局变量
                static float xx=10*cosf(thta);
                static float yy=10*sinf(thta);

        Device->CreateVertexBuffer(         //这个写vb的操作应该是在初始化里进行的, 随时间改变  ,故放到这里来了,不知道是不是这个原因导致没有效果                                                
                1 * sizeof(Vertex2),
                D3DUSAGE_WRITEONLY,
                Vertex2::FVF,
                D3DPOOL_MANAGED,
                &point,
                0);

        Vertex2* vp;
        point->Lock(0, 0, (void**)&vp, 0);

        vp[0] = Vertex2(250.0f+xx, 250.0f+yy, 1.0f, 1.0f, 0.0f, 1.0f);

        point->Unlock();

                Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xffffffff, 1.0f, 0);
                Device->BeginScene();

//
//render other objects
//

                Device->SetStreamSource(0, point, 0, sizeof(Vertex2));
                Device->SetFVF(Vertex2::FVF);
                Device->DrawPrimitive(D3DPT_POINTLIST, 0, 2);//前面已经设置了正交投影矩阵了

                Device->EndScene();
                Device-&gtresent(0, 0, 0, 0);
               
                d3d::Release<IDirect3DVertexBuffer9*>(point);
        }
        return true;
}

这样渲染的结果是在屏幕的区域上有一个点,但是这个点不随时间运动。各位高手指教了!

16

主题

57

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2007-10-30 12:57:00 | 显示全部楼层

Re:正交投影矩阵变换后屏幕上目标的移动问题!

可以使用xyzw格式的顶点嘛,这样就可以使用矩阵平移了。

29

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
 楼主| 发表于 2007-10-30 15:14:00 | 显示全部楼层

Re:正交投影矩阵变换后屏幕上目标的移动问题!

忘了说了,我程序里的顶点格式就是xyzrhw的,rhw不是表示直接映射到屏幕上的点么,也就是变换对其不起作用么?

16

主题

57

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2007-10-31 09:07:00 | 显示全部楼层

Re:正交投影矩阵变换后屏幕上目标的移动问题!

xyzw 和 xyzrhw是不同的,可以去查查SDK文档。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-19 12:01

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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