查看: 1887|回复: 21

关于漫游里移动的菜鸟问题

[复制链接]

该用户从未签到

发表于 2012-12-24 15:42:11 | 显示全部楼层 |阅读模式
_eye += _rotation * Vec3d( distance, 0., 0. ); 移动视点 这句话  是什么意思。。两个Vec3d相乘具体怎么运算 表示什么?基础比较差 求解释。。谢谢!  另外rotation的xyz分别表示的是与三个轴的夹角么?

该用户从未签到

 楼主| 发表于 2012-12-24 15:44:03 | 显示全部楼层
_rotation好像是四元数类型的 每个值都代表什么意思呢?

该用户从未签到

发表于 2012-12-24 15:58:54 | 显示全部楼层
_rotation的第一个分量是旋转的度数(弧度),后面三个应该旋转轴的方向向量。相乘其实我觉得就是效果的叠加。

该用户从未签到

 楼主| 发表于 2012-12-24 20:13:46 | 显示全部楼层
lglgaigogo 发表于 2012-12-24 15:58
_rotation的第一个分量是旋转的度数(弧度),后面三个应该旋转轴的方向向量。相乘其实我觉得就是效果的叠加 ...

谢谢 能否说下具体是怎么乘的呢?  (a,b,c,d)*(e,f,g)结果是什么?

该用户从未签到

发表于 2012-12-24 22:03:45 | 显示全部楼层
本帖最后由 smash 于 2012-12-24 22:04 编辑

两个向量的话,^表示叉乘,结果是向量,表示同时垂直于两个向量的向量,*表示点乘,结果是实数,表示一条线段在另一条线段上的投影长度,具体的方法去找本一下线性代数的书看看吧。
不过你这个应该是四元数和向量的乘法,跟矩阵乘向量是一样的。

该用户从未签到

发表于 2012-12-24 22:44:01 | 显示全部楼层
  1. /** Rotate a vector by this quaternion.*/
  2.         Vec3f operator* (const Vec3f& v) const
  3.         {
  4.             // nVidia SDK implementation
  5.             Vec3f uv, uuv;
  6.             Vec3f qvec(_v[0], _v[1], _v[2]);
  7.             uv = qvec ^ v;
  8.             uuv = qvec ^ uv;
  9.             uv *= ( 2.0f * _v[3] );
  10.             uuv *= 2.0f;
  11.             return v + uv + uuv;
  12.         }
复制代码

该用户从未签到

 楼主| 发表于 2012-12-25 09:23:24 | 显示全部楼层
smash 发表于 2012-12-24 22:03
两个向量的话,^表示叉乘,结果是向量,表示同时垂直于两个向量的向量,*表示点乘,结果是实数,表示一条线 ...

矩阵乘向量不是要求 维数一样么? 这个 一个是四元 一个是三维向量啊

该用户从未签到

 楼主| 发表于 2012-12-25 09:24:30 | 显示全部楼层
lglgaigogo 发表于 2012-12-24 22:44

_rotation是四元数啊 这个重载是两个三维向量相乘吧?

该用户从未签到

发表于 2012-12-25 09:55:52 | 显示全部楼层
本帖最后由 smash 于 2012-12-25 09:56 编辑
一大波蓝猫 发表于 2012-12-25 09:23
矩阵乘向量不是要求 维数一样么? 这个 一个是四元 一个是三维向量啊


vec3跟矩阵乘的时候,相当于(x,y,z,1)跟矩阵乘。

该用户从未签到

发表于 2012-12-25 09:56:09 | 显示全部楼层
四元数 * Vec3 = 经过旋转的新的Vec3

该用户从未签到

发表于 2012-12-25 09:57:58 | 显示全部楼层
array 发表于 2012-12-25 09:56
四元数 * Vec3 = 经过旋转的新的Vec3

这个不对的,vec3与矩阵乘是点的变换,vec4(x,y,z,0)跟矩阵乘才是向量变换。

该用户从未签到

发表于 2012-12-25 10:02:08 | 显示全部楼层
这里说的是quat * vec3,不是matrix * vec3

该用户从未签到

 楼主| 发表于 2012-12-25 10:06:08 | 显示全部楼层
array 发表于 2012-12-25 09:56
四元数 * Vec3 = 经过旋转的新的Vec3

我目前的理解是 这个_rotation是vec4(a,x,y,z) a是旋转量 后边xyz是绕哪个轴旋转 比如是(a,0,0,1)就是让视点绕着z轴旋转a度? 是这样么?

该用户从未签到

发表于 2012-12-25 10:09:26 | 显示全部楼层
本帖最后由 smash 于 2012-12-25 10:10 编辑
array 发表于 2012-12-25 10:02
这里说的是quat * vec3,不是matrix * vec3


quat的话有可能的,我没有试过。

该用户从未签到

 楼主| 发表于 2012-12-25 10:09:47 | 显示全部楼层
smash 发表于 2012-12-25 09:55
vec3跟矩阵乘的时候,相当于(x,y,z,1)跟矩阵乘。

我也想问 为什么这里四元数相当于矩阵?

该用户从未签到

发表于 2012-12-25 10:10:42 | 显示全部楼层
一大波蓝猫 发表于 2012-12-25 10:09
我也想问 为什么这里四元数相当于矩阵?

四元数就等同于旋转矩阵啊。

该用户从未签到

 楼主| 发表于 2012-12-25 10:15:10 | 显示全部楼层
smash 发表于 2012-12-25 10:10
四元数就等同于旋转矩阵啊。

谢谢回答!

该用户从未签到

发表于 2012-12-25 10:17:53 | 显示全部楼层
这两种情形等价,您可以实验去验证一下
quat * vec3 = vec3 * matrixOfQuat

该用户从未签到

 楼主| 发表于 2012-12-25 10:28:49 | 显示全部楼层
array 发表于 2012-12-25 10:17
这两种情形等价,您可以实验去验证一下
quat * vec3 = vec3 * matrixOfQuat

嗯 “我目前的理解是 这个_rotation是vec4(a,x,y,z) a是旋转量 后边xyz是绕哪个轴旋转 比如是(a,0,0,1)就是让视点绕着z轴旋转a度? 是这样么?” 这个对么?

该用户从未签到

发表于 2012-12-25 21:40:46 | 显示全部楼层
四元数跟旋转矩阵一个意思,但是四元数没有你说的那么简单,但是也没有那么难,这些问题你不应该在这儿问,自己翻矩阵的书去。。。。

该用户从未签到

发表于 2012-12-26 07:53:25 | 显示全部楼层
自己那个东西比划比划 哈哈

该用户从未签到

 楼主| 发表于 2012-12-26 10:07:06 | 显示全部楼层
liuzhiyu123 发表于 2012-12-26 07:53
自己那个东西比划比划 哈哈

嗯 = =!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表