游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2831|回复: 6

初学者问:如何实现点下目标对象,视角进行变换?

[复制链接]

12

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
发表于 2009-8-16 11:54:00 | 显示全部楼层 |阅读模式
本来是普通远且平的视角看一个目标对象,我想实现点下该目标对象,视角变换到该对象的斜45度很近的视角特写。我能想到的是改变world matrix、projection matrix、view matrix矩阵。但是不知如何获得新视角的矩阵的参数?请问高手如何实现?谢谢!

10

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2009-8-16 12:32:00 | 显示全部楼层

Re:初学者问:如何实现点下目标对象,视角进行变换?

两种方法:
方法一,变换模型。首先按摄像机的观察方向转45°,获得旋转矩阵M1;再按摄像机的UP方向旋转-45°,获得矩阵M2;最后按照摄像机的观察方向V1,将模型做-V1方向的平移,得到矩阵M3。最后将M1*M2*M3右乘到模型的世界矩阵上就可以了。
方法二,变换摄像机。首先按摄像机的观察方向旋转-45°,获得旋转矩阵M1,将视图矩阵的三个向量因数pEye、pAt、pUp都按M1进行变换;重新获取摄像机的观察方向和Up方向,作叉积得到相对于摄像机水平向左的向量V2,按V2旋转-45°,得到旋转矩阵M2,同样将视图矩阵的三个向量因数按M2进行变换;重新获取摄像机的观察方向V3,将摄像机的pEye按V3作适当平移即可。

12

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2009-8-16 14:31:00 | 显示全部楼层

Re: Re:初学者问:如何实现点下目标对象,视角进行变换?

sanxcoo: Re:初学者问:如何实现点下目标对象,视角进行变换?

两种方法:
方法一,变换模型。首先按摄像机的观察方向转45°,获得旋转矩阵M1;再按摄像机的UP方向旋...

多谢!不过还不是很清楚如何代码实现,因为对DirectX SDK还很生疏。

10

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2009-8-16 20:24:00 | 显示全部楼层

Re:初学者问:如何实现点下目标对象,视角进行变换?

主要用到的函数也就一下两个:
D3DXMatirxRotationAxis(D3DXMATRIX* pOut, CONST D3DXVECTOR3* pV, FLOAT Angle);
D3DXVec3TransformCoord(D3DXVECTOR3* pOut, CONST D3DXVECTOR3* pV, CONST D3DXMATRIX* pM);
给你一份第一种方法的代码吧:
//获得摄像机的观察方向
D3DXVECTOR3 lookDir = pAt - pEye;
D3DXMATRIX matRotation1, matRotation2, matTranslation;
//按摄像机观察方向旋转45°
D3DXMatrixRotationAxis(&matRotation1, &lookDir, D3DX_PI / 4.0f);
//按摄像机的UP方向旋转-45°
D3DXMatrixRotationAxis(&matRotation2, &pUp, -D3DX_PI / 4.0f);
//按摄像机观察方向的负方向进行平移
float delta = 0.5f;        //根据你的需求自己定
D3DXVECTOR3 translation = -delta * lookDir;
D3DXMatrixTranslation(&matTranslation, translation.x, translation.y, translation.z);
//获得模型的世界矩阵
D3DXMATRIX matWorld;
m_Device->GetTransform(D3DTS_WORLD, &matWorld);
//旋转
matWorld *= matRotation1 * matRotation2 * matTranslation;
m_Device->SetTransform(D3DTS_WORLD, &matWorld);
//接下来就是模型绘制了

12

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2009-8-17 09:28:00 | 显示全部楼层

Re: Re:初学者问:如何实现点下目标对象,视角进行变换?

sanxcoo: Re:初学者问:如何实现点下目标对象,视角进行变换?

主要用到的函数也就一下两个:
D3DXMatirxRotationAxis(D3DXMATRIX* pOut, CONST D3DXVECTOR3* pV, FLOAT ...

太感谢了!!对了,那只需要重置世界矩阵,视图矩阵和投影矩阵不需要重置吗?

10

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2009-8-18 09:08:00 | 显示全部楼层

Re:初学者问:如何实现点下目标对象,视角进行变换?

一般情况下是不需要重置的

12

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2009-8-18 15:51:00 | 显示全部楼层

Re: Re:初学者问:如何实现点下目标对象,视角进行变换?

sanxcoo: Re:初学者问:如何实现点下目标对象,视角进行变换?

一般情况下是不需要重置的

Thank you so so so much!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-7 16:24

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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