如何根据对象的相机角度隐藏或显示3D对象?

时间:2020-04-23 17:19:02

标签: arcore sceneview

我花了数天时间在网上搜寻包括Stackoverflow在内的内容,试图自己找到解决方案,但得出了一些结论:

  1. 我的头太平了,无法理解第四纪和欧拉角。 在调查过程中我学到了很多东西, 还有很多我根本不了解或不了解的
  2. 3D思维比我预期的要困难得多,尤其是 当您尝试将2D转换为3D时,反之亦然

在给定每个三角形角的三个x,y坐标的情况下,我所要做的就是使我能够计算三角形内的所有角度。当您需要计算2D平面上两个向量之间的角度时,这显然很有用。我也有代码可以让我计算SceneView空间中任意两个位置之间的角度。尽管这两段代码都可以按预期工作,但我似乎无法将头绪围绕如何利用它来解决我的特定问题。希望这个论坛上有人比我聪明得多。 :)

下面是一组图像,将有助于描述我要实现的目标。

我有四个3D对象被加载到SceneView中。所有四个对象都附加到相同的anchorNode。显示的4个对象彼此成直角。我想做的是,当从两个特定角度范围内查看该组时,隐藏两个对象,同时显示其他两个对象。当摄像机移出这两个摄像机范围时,必须显示隐藏的对象,而必须隐藏可见的对象。 (请注意,我知道如何更改对象的可见性。

我尝试过的事情:

  1. 使用摄像机和锚节点的世界位置计算摄像机与锚节点之间的角度。这很容易,但是很明显角度会不断变化,这取决于当时的场景,因为摄像机在虚拟世界中的方向。例如,如下面的图像1所示,直接从正面面向对象,几乎每次创建对象时,角度值都会不同。我已经测试了很多。

  2. 在同一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

Diagram showing the camera now moved into the 2nd zoned area (red) and the corresponding object visible

0 个答案:

没有答案
相关问题