【发布时间】:2016-03-11 11:36:36
【问题描述】:
我正在创建自己的光线追踪器以供娱乐和学习。我要添加的功能之一是能够直接将 SVG 文件用作纹理。
执行此操作的简单直接的方法是首先将 SVG 渲染为另一种更“便于查找”的光栅格式,并将其作为常规纹理提供,以便在光线追踪期间使用。但是我不想这样做。
相反,我想直接“跟踪”SVG 本身。所以我想知道是否有任何用于 Java 的 SVG 库有一个 API 可以让它自己以这种方式使用?它需要一些调用,将float point2D[] 作为输入并返回float colorRGBA[] 作为输出。
如果不是,最好的方法是什么?
【问题讨论】:
-
不是你的问题的答案,但如果你不光栅化 SVG 文件,如果你的 SVG 文件不是最简单的形状,你的性能会受到巨大影响。对于光栅化文件,您需要的方法只是几行汇编,但对于任意 SVG,它可能非常复杂。
-
我同意你对现有 SVG 库的看法,因为它们针对“自上而下”渲染进行了优化,但我认为用于优化光线追踪的原则(例如创建边界体积层次结构)可以扩展进入 SVG 渲染引擎,使其至少可行,尤其是在渲染管道受内存限制的情况下。
-
那么我相信如果你想走这条路,那么你必须自己实现它。我能找到的唯一库对图像进行光栅化。见jfree.org/jfreesvg/javadoc/index.html。
标签: java svg 3d rendering vector-graphics