游戏开发论坛

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

一般在场景中,怎样保存一个单位的面朝向?

[复制链接]

21

主题

158

帖子

174

积分

注册会员

Rank: 2

积分
174
发表于 2010-12-8 13:01:00 | 显示全部楼层 |阅读模式
假设地图上有一个角色,为了表示这个角色的方向,一般保存方向向量还是角度?

比如一个RTS游戏,鼠标点击地图某地方,角色向这个位置移动。
此时如何从当前坐标和目的地坐标,计算出来旋转矩阵?


另外,给定两个向量v1和v2,如何计算从v1向v2旋转的四元组?

34

主题

844

帖子

1755

积分

金牌会员

Rank: 6Rank: 6

积分
1755
发表于 2010-12-8 14:02:00 | 显示全部楼层

Re:一般在场景中,怎样保存一个单位的面朝向?

“角度”更容易吧?反正游戏角色也不会像迈克尔杰克逊那样倾斜45度

从点(10,0,5)走向(20,0,10)时,
角色初始坐标(10,0,5),角色角度 angle
角色从(10,0,5)直线匀速移动到(20,0,10),角度从angle匀速变成arctan(2)

21

主题

158

帖子

174

积分

注册会员

Rank: 2

积分
174
 楼主| 发表于 2010-12-8 14:34:00 | 显示全部楼层

Re:一般在场景中,怎样保存一个单位的面朝向?

因为在本地坐标系下移动物体的话
需要forward up 和 right这三个正交向量参与计算
所以保存方向向量也是有用的。

计算角度的话,我也可以用比较笨的方法计算出来。通过点积求arccos就可以。
但是总觉的实际运用中不应该这样。
因为这种方法如果真的那么具有代表性,d3dx就应该提供预置函数了。


我想知道一般做游戏的时候,惯例上都是怎么处理的

21

主题

158

帖子

174

积分

注册会员

Rank: 2

积分
174
 楼主| 发表于 2010-12-8 14:35:00 | 显示全部楼层

Re:一般在场景中,怎样保存一个单位的面朝向?

饿。。。 谁告诉我怎么求任意v1旋转到任意v2的四元数?

1

主题

6

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2010-12-13 13:49:00 | 显示全部楼层

Re: 一般在场景中,怎样保存一个单位的面朝向?

float angle = 0;
vDir= vpos - vMypos;
angle=atan2f(vDir.x,vDir.z);

这就求出了 绕Y轴的角度
剩下的你应该知道怎么做了吧

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2010-12-13 18:41:00 | 显示全部楼层

Re:一般在场景中,怎样保存一个单位的面朝向?

方向当然用方向向量了。

PS.数学上还有一种是方向余弦(google it)

2

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2010-12-17 11:39:00 | 显示全部楼层

Re:一般在场景中,怎样保存一个单位的面朝向?

我是照着很多书上 用的是单位向量 虽然看起来觉得单位向量和角度没什么差别 因为也只包含一个角度信息而已 但是至少有一个好处 移动的时候不需要进行计算了 直接speed*direction 就可以得到目标的结果了 而角度还需要进行正弦 余弦的计算才能得出结果 而关于方向运用得最多的运算就是向指定方向移动吧 虽然没测试过 正弦的计算应该远大于普通的加减乘除。
转向操作: 这方面用单位向量运算多了一点,但是游戏中的转向操作应该是每次转一定角度,看有没有转过所需要转的方向,转过了就直接指定为所需要转向的方向吧。指定角度的旋转可以通过矩阵转换或者数学公式计算,你搜索下向量旋转就知道了,但是因为是指定角度,所以完全可以将所需要计算的数据预先存储,然后到时直接调用就可以了,至于比较,完全可以通过 首先判断y的正负 然后判断比较x的大小 通过这2个结果 就能实现角度的大小了。所以虽然需要的计算多了一点 但应该还是可以接受的
所以推荐用单位向量 呵呵
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-17 08:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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