我的场景中有一个形状几何体,看起来像一个从一个物体指向另一个物体的箭头。它直接添加到相机上。想象一下,相机正面向x,y(前面例如见第一张照片)。当用户旋转到“右”(z,x)时,你会看到结束,所以看不到任何东西。然而,这很好,因为它是无限薄的,如果你从顶部/底部看,当你开始钓鱼时,你不能告诉它一个箭头,这就是我想要防止的。
如果在渲染过程中使用了lookat(camera.postion),则箭头将不再处于相对于两个对象的原始位置。
我可以想象这样做的唯一方法是在相机移动时沿单轴旋转箭头?我在这里寻找任何其他建议者图像描述
基本上我希望箭头在用户旋转场景时看起来像箭头,而不是从顶部看时它消失为空。请注意,这些箭头可能会添加到任何位置/方向,这使得它变得更加棘手
答案 0 :(得分:1)
有两种选择。全3D选项和假2d选项。
:一种。 3D选项
假设您的箭头有一个主轴(从头到尾)和一个辅助轴(垂直于它的扁平形状)。您需要做的是计算摄像机位置和辅助轴之间的角度。这是一个图像,你寻找的角度是黄色弧。
这些是非常简单的计算,这里没有提供,因为它不清楚你的箭头是如何定义的以及哪个XYZ轴是主要的 次要的。
一旦知道角度,就可以将箭头绕主轴旋转角度。这会将箭头旋转到具有最佳可见度的位置。
请注意,如果摄像机位于主轴上,则不会定义角度。但无论如何你都不会从这个摄像头位置看到任何箭头。
<强> B中。 2D选项
这有点简单。不要在3D中渲染箭头。只需跟踪3D中箭头的头尾位置即可。当摄像机位置发生变化时,将这些3D位置投影到2D画布坐标中。然后,您可以在这些2D头部和尾部位置之间绘制2D形状。请注意,绘制2D形状需要在当前WebGL画布上创建透明的2D画布。
2D选项的缺点是箭头将叠加在3d场景的顶部,因此它有时会与蓝色立方体重叠。