我想模拟由复杂和复合透明对象投射的阴影。 对于特定光源,此阴影必须在数学上是正确的(至少对于点光源)。我认为任何图形库都是如此,是吗? 比,根本不可能有任何折射。
OpenGL可以做到这一点吗?如果它不能,那么我应该使用什么呢?
UPD。所以我需要一些路径追踪器。有什么我可以编程使用:给对象的3d场景文件,并获得跟踪的结果?
答案 0 :(得分:2)
此阴影必须在数学上正确
没有数学上正确或错误的照明。你的意思是身体正确。
您想要创建它们的图像依赖于光传播。正确模拟光传播的唯一方法是将虚拟光子射入场景并沿着它们的路径前进。这称为路径跟踪。
OpenGL可以做到吗?
OpenGL只绘制点,线和三角形......一次一个,没有任何场景或模型的概念。
旧的固定功能管道OpenGL内置了一个简单的Blinn照明模型,但这只是计算了一个" light"每个顶点的值基于表面方向(法线)和相对于光源的位置。
现代OpenGL甚至没有这样做。相反,它依赖程序员提供为每个顶点执行的程序,以决定它在图片中的位置以及绘制的每个片段(大致是一个像素)以确定给出它的颜色。
在这个名为着色器的程序中,你可以做任何事情。因此,如果您想使用OpenGL着色器实现路径跟踪器,您肯定可以这样做。但是此路径跟踪器将不会与您绘制的点,线和三角形进行交互。相反,这些仅用于定义着色器进行计算的边界。
如果不能,那么我应该使用什么?
问题不在于它是否可能,而在于实施起来有多容易。在你的情况下,OpenGL肯定不是正确的编程环境,因为你基本上是从头开始。相反,您应该使用现有的路径跟踪器之一。还有一些是GPU加速的。