【发布时间】:2017-05-21 02:44:55
【问题描述】:
我正在尝试制作一个包含十二面体的 Three.js 场景。我希望相机在十二面体的一侧放大,当按下按钮时我希望它缩小,旋转直到它站在另一侧,然后再次放大。
为了说明这一点:
如果相机将在第 1 面完全放大并且我按下“5”,我希望相机缩小 - 显示十二面体 - 然后向 5 旋转(或者让十二面体旋转面向相机的第 5 面? ) 并再次放大。重要的是相机始终与它所面对的五边形的底部平行,而不是顶部或任何其他旋转。
我认为从一个立方体开始是明智的,不要开始太复杂。我添加了一些补间(按 G 时)来说明一些基本动作,但这在小提琴中看起来不太好。 jsfiddle
因为我觉得我应该有一个函数来为我完成所有这些运动和计算,所以我首先尝试写下每个侧视图从立方体中获得的每个位置和旋转,以便我可以检测到一个模式。我可以在我为立方体写下的值中看到一些模式,但我不知道如何将其转换为工作函数,更不用说十二面体了。我注意到的价值观是
side1 (0, 0, 600) (0, 0, 0)
side2 (600, 0, 0) (0, pi/2, 0)
side3 (0, 0, -600) (0, pi, 0);
side4 (-600, 0, 0) (0, -pi/2, 0);
side5 (0, 600, 0) (-pi/2, 0, 0);
side6 (0, -600, 0) (pi/2, 0, 0);
我可以看到某种重复发生和一些关系,但我不知道如何将它们链接到一个函数中。我认为这将是实现功能相同但形状更复杂的第一步。谁能引导我进入我现在应该寻找的方向?因为我当然可以使用很多 if 子句,但我觉得这不是正确的方法。
【问题讨论】:
-
你好,我做了一个jsfiddle,好像
keydown事件在jsfiddle上不好用,你可以导出代码看看,有一些奇怪的bug,我会明天继续弄清楚。 -
哇,添加了很多代码。我希望有人能指导我做这件事或给出提示的正确路径,而不是几乎完全做到,哈哈。你能详细说明你所做的选择吗?因为发生了很多事情,我不明白它为什么会起作用。
-
这个问题很有意思,我自己试了一下。但是我还没有弄清楚这个错误,我将分享我的想法,一旦我修复了错误,我会更新我的帖子以做出完整的解释。
-
我还想到了一些可以攻击这个项目的方法,一旦我找到时间,我将编辑我的帖子以展示我的方法。也许我们可以一起找到更好的解决方案。
-
是的,没关系,我正在写我的想法和解释。
标签: javascript 3d three.js