游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1606|回复: 1

工作中,做一个面向视点的旋转问题

[复制链接]

10

主题

27

帖子

33

积分

注册会员

Rank: 2

积分
33
发表于 2009-4-24 11:58:00 | 显示全部楼层 |阅读模式
大致思路是,物体往运动方向旋转, 旋转后的X轴向就是运动方向。 而Y轴向朝向的是视点。
我的做法是直接将物体坐标系 旋转至 目标坐标系。

局部坐标系的Y就是法向量。代表物体的朝向

以下是我的代码,
        NiPoint3 kCamD = pkCamera->GetWorldLocal() - GetWorldTranslate();  
        kCamD.Unitize();
        NiMatrix3 InvRotate;
        m_kWorld.m_Rotate.Inverse(InvRotate);
        kCamD = InvRotate* kCamD;//转到物体的局部坐标系
        kCamD.Unitize();
                       

        NiPoint3 kRotateX = m_kMoveDirection;
        NiPoint3 kRotateTestY = kCamD;// 这里填NiPoint3::UNIT_Z,所有物体就朝向世界坐标系的Z轴了。
        NiPoint3 kRotateZ = kRotateTestY.Cross(kRotateX);
        NiPoint3 kRotateY = kRotateX.Cross(kRotateZ);
                       
        //kRotateX.Unitize();
        //kRotateY.Unitize();
        //kRotateZ.Unitize();
        NiMatrix3 kRotate(kRotateX,kRotateZ,kRotateTestY);  //关键是旋转矩阵
        m_kWorld.m_Rotate = kRotate;

不知道有没有错。请大家帮忙看看, 用的是gamebryo引擎。。
我想也不是很难理解吧?
总之我转出来X轴向是对了,物体是转到运动方向了,但是物体却没有朝向视点

1

主题

27

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2009-4-24 17:33:00 | 显示全部楼层

Re:工作中,做一个面向视点的旋转问题

教你个更好的方法:
为实体添加一个属性朝向向量,用于保存实体的面向方向。
当要发生旋转是,变换实体的矩阵,在重新设置朝向方向即可。
你的方法会与实体的模型的局部坐标相关,检测模型的局部坐标里x方向上是否是你想要的面向
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 14:20

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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