游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1464|回复: 4

求助 摄象机 旋转后的 坐标系 问题!!!!!十万火急!!!!!

[复制链接]

23

主题

68

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 2006-3-27 00:24:00 | 显示全部楼层 |阅读模式
我先在代码中让摄象机前后左右移动没有问题,然后旋转也没有问题,但是旋转以后再左右前后移动,却发现 还是按照最初的x,z坐标在移动,没有按照新的坐标(就是x轴垂直于视角方向的坐标移动),这是为什么,请指点.我的旋转代码为:
             void CBasicXFile::RotateY(float fAngle){
        D3DXMATRIX matRotate;
        D3DXMatrixRotationY(&matRotate,fAngle);
        D3DXVec3TransformCoord(&eye,&eye,&matRotate);
        D3DXVec3TransformCoord(&at,&at,&matRotate);}是让视线和眼睛一起旋转的!

移动摄象机我用的是 :BasicXFile.eye.x+=1;这样去移动的.说白了我就是想达到cs那样的移动效果.请各位高手帮帮忙!谢谢了..

25

主题

134

帖子

134

积分

注册会员

Rank: 2

积分
134
发表于 2006-3-27 13:16:00 | 显示全部楼层

Re:求助 摄象机 旋转后的 坐标系 问题!!!!!十万火急!!!!!

这样移动是正确的吧,关键看你是如何获得视图矩阵的(应该根据eye,at的值修正视图矩阵)

9

主题

198

帖子

198

积分

注册会员

Rank: 2

积分
198
发表于 2006-3-27 18:06:00 | 显示全部楼层

Re:求助 摄象机 旋转后的 坐标系 问题!!!!!十万火急!!!!!

因为你只是摄像机坐标进行了旋转变换,但是你并没有对行走坐标进行变换,例如:我假设eye.x+=1是变换前摄像机向右移动。但是你旋转后,你的右方向不再是1,0,0,而是D3DXVec3TransformCoord(&right,&right,&matRotate)

0

主题

237

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
发表于 2006-3-27 18:54:00 | 显示全部楼层

Re: 求助 摄象机 旋转后的 坐标系 问题!!!!!十万火急!!!!!

所以, LZ要的是一?? right(右方)vector, 假?要向右移?? 就是 :
eye.x+=(right.x*move_dist)
向左移?拥木?? :
eye.x-=(right.x*move_dist)

23

主题

68

帖子

68

积分

注册会员

Rank: 2

积分
68
 楼主| 发表于 2006-3-28 00:09:00 | 显示全部楼层

Re:求助 摄象机 旋转后的 坐标系 问题!!!!!十万火急!!!!!

用此语句,的确解决旋转以后再平行移动 的问题.谢谢各位
BasicXFile.eye+=BasicXFile.right*(-1);
BasicXFile.at+=BasicXFile.right*(-1);
但是我发现当我把摄像机移动到球面天空的紧左边或紧右边后,我旋转摄像机,发现他不是按照自己内部的y轴转,而是按照屏幕中心的那个y轴旋转,我想让他在原地做自我旋转,而不是围着屏幕饶大圈,请问应该怎样??谢谢..
我的旋转代码如下:
D3DXMATRIX matRotate;
        D3DXMatrixRotationY(&matRotate,fAngle);
        D3DXVec3TransformCoord(&eye,&eye,&matRotate);
        D3DXVec3TransformCoord(&at,&at,&matRotate);
        D3DXVec3TransformCoord(&right,&right,&matRotate);
        D3DXVec3TransformCoord(&up,&up,&matRotate);
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 01:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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