我知道有很多关于3D旋转的问题已经在这里得到了回答,但它们都似乎在OpenGL中处理旋转矩阵和四元数(我并不在乎是否得到了万向节锁)。我需要得到一个点的3D坐标EX:(x,y,z),总是必须是相同的距离,现在我将它称为“d”,从原点开始。我输入的唯一信息是屏幕上鼠标的deltax和deltay。到目前为止,这里是我曾尝试:围绕原点的3d旋转
第一:
thetaxz+=(omousex-mouseX)/(width);
thetaxy+=(omousey-mouseY)/(height);
(thetaxy是弧度在x在x的角度,Y轴和thetaxz,Z轴) (我限制两个角度这样,如果它们小于或等于0它们等于2 * PI)
第二:
pointX=cos(thetaxz)*d;
pointY=sin(thetaxy)*d;
(pointX是该点的X坐标和尖尖是y)
第三:
if(thetaxz)<PI){
pointZ=sqrt(sq(d)-sq(eyeX/d)-sq(eyeY/d));
}else{
pointZ=-sqrt(abs(sq(d)-sq(eyeX/d)-sq(eyeY/d)));
}
(平方()是一个函数,平方和ABS()是绝对值函数) (pointZ应该是该点的Z坐标,它是除了在正z之间的交叉半球和负z球。当它接近边缘时,该点被拉伸得比它总是应该在x和y上的距离更长,并且看起来随机地在tazz的0.1-0.2弧度范围内,z坐标变成NAN或未定义)
我有考虑了一段时间,并且如实地说,我很难绕过四元数和旋转矩阵的概念,但是如果你能告诉我如何使用它们来产生实际的坐标,我很乐意学习。如果我可以在几个轴上使用一些三角函数,我仍然会更喜欢它。提前感谢您的帮助,如果您需要更多信息,请直接询问。
提示/最后一分钟的想法:我认为这可能与影响x和y位置的z位置有关,但我不确定。
编辑:我画了一张图:
我不是100%,这正是你想要的,但我想你可能想看看[gluUnProject](http://nehe.gamedev.net/article/using_gluunproject/16013 /)将2D坐标转换为基于相机矩阵的3D坐标。对近远相机平面上的一个点执行此操作,然后使用一些三角函数来查找沿着结果线的距离原点所需距离的点。请注意,对于此问题,有0,1或2种解决方案,具体取决于行 – Hybrid 2011-12-22 10:40:08
您是否可以用图片说明原始问题更清楚些? – 2011-12-22 10:57:16
我添加了一个图片链接,因为我只有1个代表,因为我是这个网站的新手。 – 2011-12-22 22:16:35