我花了数天时间在网上搜寻包括Stackoverflow在内的内容,试图自己找到解决方案,但得出了一些结论:
在给定每个三角形角的三个x,y坐标的情况下,我所要做的就是使我能够计算三角形内的所有角度。当您需要计算2D平面上两个向量之间的角度时,这显然很有用。我也有代码可以让我计算SceneView空间中任意两个位置之间的角度。尽管这两段代码都可以按预期工作,但我似乎无法将头绪围绕如何利用它来解决我的特定问题。希望这个论坛上有人比我聪明得多。 :)
下面是一组图像,将有助于描述我要实现的目标。
我有四个3D对象被加载到SceneView中。所有四个对象都附加到相同的anchorNode。显示的4个对象彼此成直角。我想做的是,当从两个特定角度范围内查看该组时,隐藏两个对象,同时显示其他两个对象。当摄像机移出这两个摄像机范围时,必须显示隐藏的对象,而必须隐藏可见的对象。 (请注意,我知道如何更改对象的可见性。
我尝试过的事情:
使用摄像机和锚节点的世界位置计算摄像机与锚节点之间的角度。这很容易,但是很明显角度会不断变化,这取决于当时的场景,因为摄像机在虚拟世界中的方向。例如,如下面的图像1所示,直接从正面面向对象,几乎每次创建对象时,角度值都会不同。我已经测试了很多。
在同一Worldpostion的对象正前方添加第二个锚点节点,仅稍微改变z轴即可。我希望为每个(原始对象锚节点,参考锚节点和摄影机)使用x和y坐标(使用世界坐标),模拟2D平面上的三个点,因为我可以计算三角形的角度,所以它变成一种简单的练习来计算相机与目标的角度。至少从理论上讲它是简单的,因为实际上是行不通的。
问题:如何以这样的方式计算摄像机相对于4个对象的角度,即当摄像机处于特定角度区域时,我可以始终隐藏正确的对象?
Shows the 4 objects directly from the front
The same 4 objects from a left hand side angled view
The same 4 objects from a right hand side angled view
Diagram showing the 4 objects from the top
Diagram showing two of the objects hidden while the camera is anywhere in the red angle zone