【发布时间】:2012-08-21 20:53:26
【问题描述】:
假设您的眼睛位于对象 A 上的表面点 P1 上,并且有一个目标对象 B,并且对象 B 后面有一个点光源。
问题:如果我看向光源并说“我在阴影中”,如果我因为物体 B 而看不到光,我是否正确?然后我将对象 A 的那个点标记为“A 上 B 的阴影点之一”。
如果这是真的,那么我们是否可以在 A 的表面上构建一个“阴影几何”(黑色)对象,然后因为光、B、A 等的运动而不断改变它... 在实时 ?假设一个球体(A)有 1000 个顶点,而其他球体(B)也有 1000 个顶点,那么这是否意味着 100 万个比较? (是阴影,O(N ^ 2)(时间)复杂度?)。我不确定复杂性,因为改变 P1(眼睛)也会改变 B 的可见点(在 P1 和光源点之间)。那么二阶及更高级别的阴影(例如灯光在两个物体之间多次反射)呢?
我现在正在使用 java-3D,但它没有影子功能,所以我想转移到其他与 java 兼容的库。
谢谢。
编辑:我需要在移动相机来构建阴影时禁用“相机”。我怎样才能做到这一点?这会严重降低性能吗?
新思路: java3D 内置了碰撞检测。我将创建从光到目标多边形顶点的线(不可见),然后检查来自另一个对象的碰撞。如果发生碰撞,请添加该顶点corrd。到阴影列表,但这仅适用于点灯:( .
任何提供真正的 java3d 阴影库的人都会很有帮助。
java3D 中的极小样本 Geomlib 阴影/光线追踪将是最好的 可能是光线追踪示例?
我知道这有点难,但至少有一百人尝试过。
谢谢。
【问题讨论】:
-
当然可以。它会在 CPU 上花费一些东西,但在 GPU 的时代,这是很有可能的。 OpenGL 和 Java3D 应该能够做到。这是早已为人所知的技术。
-
我知道 java3D 是一个线程实现,但是在多核 cpus 和 gpus 上执行时它会有所改进吗?
-
我的猜测是多核是“是”,因为将线程分配给一个核心是有意义的。 GPU 是另一回事,因为作者必须明确写入 NVIDIA API。您会知道,因为您需要将 NVIDIA .dll 添加到 PATH。我对 GPU 的猜测是“不”。
-
你能在你的答案中举一个光线追踪/阴影的小例子吗?