关于网格缩放的问题

valk1982 2008-12-09 03:28:44
本人初学,最近试着做一个地图编辑器,在MFC里加入D3D画了一个网格 每个格子加上了图片,由于网格的坐标是-1到1,在使用鼠标滚轴缩放的时候,不是很好跟屏幕的坐标对应起来.现在要实现图片以当前鼠标所在位置为中心进行缩放,应该怎么计算呢?最好能有个例子..麻烦各位高手指点..先谢过了..
...全文
107 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
valk1982 2008-12-21
  • 打赏
  • 举报
回复
谢谢上边的朋友,我用其他的方法实现了 不过还是给分
lumieru 2008-12-10
  • 打赏
  • 举报
回复
先用屏幕上的点(sx,sy)在camera坐标系中构造一条从原点出发,经过点A(3dx, 3dy, 1)的射线,再计算该射线和mesh的交点B(camera坐标系)(dx有相应函数),然后利用camera变换矩阵的逆矩阵,把B点变换到C点(世界坐标系)(3dxc,3dyc, 3dzc),接着把你的mesh平移(-3dxc,-3dyc, -3dzc)(就是把点C移动到原点),然后缩放,再平移(3dxc,3dyc, 3dzc),即移回原来位置。其中A点的计算如下(其他点就不列了):

3dx = R * tan(a/2) * (2 * sx/w - 1)
3dy = tan(a/2) * (-2 * sy/h + 1)

a和R分别是你调用DX函数D3DXMatrixPerspectiveFovLH的两个参数fovy和Aspect。w和h分别是DX设置视口(viewport)时的结构D3DVIEWPORT9的两个属性Width和Height。

PS:其实你的上一个问题也是用上面的公式算的。
zzz822163 2008-12-10
  • 打赏
  • 举报
回复
用D3DXMatrixScaling对矩阵进行放缩

19,464

社区成员

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

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