首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘相加’两个角度

‘相加’两个角度
EN

Stack Overflow用户
提问于 2010-12-01 13:09:36
回答 1查看 744关注 0票数 3

好的,我有两个角度。一个是操纵杆的角度,另一个是相机到玩家的角度。摄像机的角度。现在我想要它,所以当我按下操纵杆时,它会把玩家从相机上移开。我该怎么做呢?有没有一种简单的方法可以用Java或Ardor3d来实现?

编辑:这是我如何获得角度的代码。

代码语言:javascript
复制
float camDegree = (float) Math.toDegrees(Math.atan2(
                     _canvas.getCanvasRenderer().getCamera().getLocation().getXf() - colladaNode.getTranslation().getXf(),
                     _canvas.getCanvasRenderer().getCamera().getLocation().getYf()) - colladaNode.getTranslation().getYf());

            player.angle = (float) Math.toDegrees(Math.atan2(padX, padY));
            Quaternion camQ = new Quaternion().fromAngleAxis(camDegree, Vector3.UNIT_Y);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-01 21:40:04

我不得不说,我真的不理解你的问题,但它似乎是关于如何使用操纵杆实现相机相对控制。

我能给你的最重要的建议是,最好不要计算角度,而是直接使用向量。

假设摄影机的方向是v (在某些类型的游戏中,此向量将直接指向玩家,但不是所有类型的游戏,也不总是):

通常你不关心这个向量的垂直分量,所以去掉它就得到了水平分量,我称之为y,原因稍后会很清楚:

y = v−(v·up) <−>e114up

其中up是垂直向上的单位向量。

我们可以使用叉积(记住右手法则)找到垂直于y的水平向量:

x = v×up

现在您可以看到,y是指向前方(远离摄影机)的平面中的向量,x是指向右侧(相对于摄影机的侧面)的平面中的向量。如果将这些向量归一化:

x= x / |x|̂

y= y / |y|ŷ

然后,您可以使用x̂和̂ŷ作为播放器相对于相机运动的坐标基础。如果你的操纵杆读数是Jx和Jy,那么移动玩家

%s (Jx x+ Jy ̂ŷ)

其中s是与玩家速度成比例的适当标量值。

(请注意,此答案中的任何点都没有计算角度!)

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4321382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档