弄清楚立方体的多少边是可见的

时间:2013-08-12 08:21:43

标签: javascript 3d three.js

我有一个简单的Three.js场景,其中一个摄像机在一个立方体周围运行,总是直视它。我需要弄清楚相机当前在立方体周围运行时最可见的一侧的百分比。

因此,如果我直视,那么第1侧(“前方”)可以看到100%而所有其他5方都是0%。如果我稍微向右旋转相机,那么现在可以看到第2侧(“右侧”)的一部分 - 可能是20%,而第一侧现在可以在%80处看到。如果我稍微向上旋转,那么可能第3侧(顶部)是10%可见,等等。

我怎样才能搞清楚这一点?请记住,立方体本身不会旋转 - 只有相机。 Three.js或JavaScript会很棒,但我几乎可以处理任何编程语言。我最感兴趣的是如何实现这一目标。

2 个答案:

答案 0 :(得分:2)

作为另一种选择,您可以计算相机视图矢量和立方体面法线的点积,也许?然后计算点积的角度,并知道每个面法线相对于摄像机视图矢量的角度。我不太确定这是否有效,只是一个想法。所以90度以上的一切都根本看不到,0度完全面向相机。 好吧,不太确定百分比,但我不知道你的用例。只是考虑保存Gero3提出的屏幕空间操作......只使用面法线的角度。举例来说,如果您要查看立方体的边缘并且在相机视图方向上有45度的两个面,那么您知道这两个面中的每一个都是50%吗?

答案 1 :(得分:1)

首先计算屏幕空间中顶点的位置。

如何:

var screenspaceVertexPosition = vertex.position.applyProjection(
    this.projectionMatrix.multiplyMatrices(object.matrixWorld))

对所有8个顶点执行此操作。 然后通过检查平面法线来确定哪些平面可见。 然后计算屏幕空间中每个面使用的面积。从那里,您可以计算完整的可见区域和百分比。