首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谁能描述一下Ken Silverman的Voxlap引擎使用的算法?

谁能描述一下Ken Silverman的Voxlap引擎使用的算法?
EN

Stack Overflow用户
提问于 2010-09-25 23:06:04
回答 2查看 4.9K关注 0票数 5

据我所知,他使用稀疏体素八叉树和光线投射。看起来他并没有使用opengl或者direct3d,当我看到Voxelstein这个游戏的时候,他看到的似乎是微型的立方体,而不仅仅是一堆二维正方形。这让我猝不及防,我不知道他是如何做到没有opengl或direct3d。

我试图通读源代码,但对我来说很难理解发生了什么。我想实现类似的东西,并希望算法做到这一点。

我感兴趣的是他如何执行渲染、剔除、遮挡和照明。任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-27 20:25:38

该算法比光线跟踪更接近光线投射。你可以在这里从Ken Silverman本人那里得到解释:

https://web.archive.org/web/20120321063223/http://www.jonof.id.au/forum/index.php?topic=30.0

简而言之:在栅格上,为每个x,y堆栈的体素存储一个表面体素的rle列表(如果z表示“向上”)。假设4个自由度,对屏幕上的每条垂直线进行光线投射,并维护一个可见跨度列表,该列表在绘制每个立方体时被裁剪。对于6个自由度,做一些类似的事情,但扫描线在屏幕空间中倾斜。

票数 6
EN

Stack Overflow用户

发布于 2010-09-25 23:42:16

我没有看过算法本身,但我可以根据截图得出以下结论:

看起来微型立方体实际上是被绘制出来的,而不仅仅是一堆二维正方形

是的,这就是光线跟踪的工作原理。它不会绘制二维正方形,它会追踪光线。如果你在许多微型立方体上追踪光线,你会看到许多微型立方体。场景由许多微型立方体(体素)表示,因此当您近距离查看时,您会看到它们。以某种方式实际平滑数据(根据平滑的能量函数进行跟踪)以使其看起来更平滑,这将是很好的。

我感兴趣的是他是如何进行渲染的

通过光线跟踪

剔除

光线跟踪时不需要剔除,特别是在体素场景中。沿光线移动时,仅检查光线相交的体素。

遮挡

体素-体素遮挡是由光线跟踪自然处理的;它将返回最接近的第一个体素命中。如果绘制精灵,可以使用光线跟踪器生成的Z缓冲区。

和照明

可以通过查看附近的单元并查看哪些被占用,哪些没有被占用,来近似局部正常。然后执行光照计算。或者,每个体素可以存储法线及其颜色或其他材料属性。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3794306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档