问题标签 [voxel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
290 浏览

java - 在基于体素的等值面生成实现中,我将如何处理标量场的变形?

我已经实现了一个用于生成等表面地形的系统,该系统基于由 Perlin 噪声标量场定义的常规 3D 体素网格。噪声是通过连续函数获得的,因此它在体素和“块”(体素组)之间是无缝的。

我遇到的问题是如何使用该系统完成可变形地形。我有一个“挑选”系统,这样我就可以选择一个体素。通过这个,我可以访问体素的数据,并且可以在那时修改标量场。

到目前为止,我已经尝试修改所选体素中的数据点(例如增加或减少值),这成功地根据行进立方体向上或向下移动生成的多边形。

但是,这会在地形中产生撕裂,因为三角形与上方或下方的其余网格分开。

我需要的是一种以自然方式影响标量场本身的方法,从一个局部点开始,然后向外辐射,无缝融合。

这个事情谁有经验?

0 投票
1 回答
406 浏览

javascript - 鼠标在哪个体素上?

我计算从前到后的线。在我的代码中,它从frontback

然后我尝试在 3D 中使用Bresenham 的线算法来访问该线上的体素:

这经常会遗漏一些体素;0,0,0->1,1,1例如,当相机位于 时,一条穿过位于 的体素的线会丢失10,10,10

我的怀疑是我使用了Math.floor,但我应该使用什么来代替它?向 0 或远离 0 舍入只会移动我的失误,并不能真正解决它们。

如何准确访问鼠标光标射线经过的所有体素?

0 投票
1 回答
235 浏览

opengl - Is there any conventional way to do a per voxel shader programming?

I'm finding a way to do 3d filters in directx or opengl shaders, same as the gaussian filter for images.In detail, it is to do proccessing for every voxel of a 3d texture. Maybe store the volume data in slices can do it, but it is not a friendly way to access the volume data and not easy to write in shaders.

sorry for my poor english, any reply will be appreciate.

p.s.:Cuda's texture memory can do this work, but my poor gpu can only run in a very low frame rate with debug model,and i don't know why.

0 投票
1 回答
2497 浏览

c++ - 在 OpenGL 中创建和实现元球皮肤系统

我想创建或找到一个开源的元球皮肤系统,它使用元球、体素化来创建网格。我在 C\C++ 和 OpenGL 方面有 3 年的经验。然而,我不知道如何处理这个系统。我想要的是一种实现方式或一种构建这样的系统的方式。有什么想法/想法吗?

这是一个使用该系统的引擎的人的班轮笔记链接:http: //chrishecker.com/My_liner_notes_for_spore

0 投票
1 回答
1751 浏览

c++ - 体素数据/openvdb 结构如何工作?

因为我不想重新发明轮子,所以我正在寻找一个好的数据结构,它可以帮助我为 3D 渲染引擎提供一个非常基本的 3D 编辑器,我基本上是在寻找一种能够存储的数据结构在我的情况下,必要的数据仅限于:

  • 几何学
  • 局部和全局坐标或也称为变换
  • 材料或指向另一个结构的指针,该结构包含该材料的真实定义

现在这是我使用 3D 渲染的第一种方法,但我对光栅化器的工作原理、GPU 如何处理三角形、点和线以生成图像有很好的基础,我的问题是现在我不明白这是什么新的“基于体素”的数据结构是,即使这个OpenVDB对我来说是正确的结构。

我认为这个引擎的大部分“输入”将来自类似 obj 的文件,所以基本上是三角形和点,但我仍然不想错过最新最好的,所以我问,OpenVDB 和 OpenVDB 之间的真正区别是什么一个包含三角网格的通用数据结构?OpenVDB 可能的实际应用是什么?

0 投票
1 回答
345 浏览

opengl-es - Voxel Cone Tracing 在移动设备上的障碍是什么?

在观看了虚幻引擎 4 演示之后,我希望能够在 iPad 应用程序中使用该技术。我知道现在这不可行,因为他们的目标是 PC 和下一代游戏机,但我想知道必须发生什么才能使其在移动设备上实用。

有知识的人可以评论需要添加到 OpenGL ES 以使其工作吗?我假设还必须有更多的内存可用于存储体素结构,你需要多少?还有什么需要改变的吗?

0 投票
1 回答
153 浏览

c++ - 体素块没有渲染正确的块?

我目前正在尝试学习 3D,并尝试在使用 3d 数组和所有有趣的东西时获得一些乐趣。我似乎无法理解为什么我的代码没有渲染正确的立方体...我运行一个 3D 数组并分配随机状态(1 个绘制,2 个不绘制)我无法弄清楚为什么当我运行它的状态时似乎只画了所有的立方体或没有。

任何帮助表示赞赏,请原谅糟糕的代码。

编辑:(我添加了一个 cout 文件并修复了一些代码)

0 投票
0 回答
630 浏览

algorithm - 如何有效地将体素空间聚集成尽可能少的相似连续块?

我正在研究使用体素来表示具有可破坏地形的大型(256x256x256 体素)战场对于服务器托管的多人游戏的可行性。任何游戏一次只存在一个战场。然而,为了能够广播房间和改变他们的地形,我试图找到一种算法,可以将体素分组到尽可能少的矩形块中。

举个简单的例子,如果关卡的下半部分完全由一种类型的体素填充,而上半部分则由另一种类型的体素填充,则关卡应分为两个块,一个代表关卡的下半部分,而其他代表顶部。理想情况下,该算法应该能够实时运行,因此地形中的任何变形都可以按帧计算并广播给客户端。这应该使客户端能够有效地渲染地形,而不必担心在客户端中重复地形破坏逻辑。

以下是我尝试过的方法以及我发现的问题。报告的块数是通过将超过 4,194,304 个“EARTH”体素随机放入尽可能靠近底部的随机选择的 (x,z) 坐标来填充 256^3 空间。只计算“EARTH”块。

  • 八叉树:非常快,但如果我在一个空间的中间分裂,它会产生大量的块(800,000+)。
  • kD 树分裂以最小化分裂后的加权熵:比八叉树稍慢,但块少得多(~350,000)。
  • kD 树分裂以最大化信息增益比:比以前的 kD 树方法快两倍,生成的块少得多(~167,000),但仍然很慢。
  • kD 树分裂以最小化 Gower 相似性:非常慢,但生成的块比任何其他 kD 树方法都少(~155,000)。
  • 当考虑每个无人认领的“EARTH”块作为块的定义点时,贪婪地获取最大的非相交、最大体积块的子集:即使是线程,这个算法也非常慢(在 8 核系统上使用 8 个线程大约需要 16 分钟) ,但它生成的块最少(<65,536)。
  • 贪婪地抓取最大的非相交块子集,同时将块的尺寸视为目标分数以最大化:比其他贪婪方法慢得多,并且也生成了几千个块。

考虑到最大可接受的块数是每个 (x,y) 坐标一个块来表示单个列,只有贪心体积的结果可以被认为接近最优。

我不知道如何在不使用永无止境的蛮力方法的情况下计算最小块数,所以我不知道是否有可能比贪心交易量方法做得更好。此外,我不知道如何使它更快。谁能给我一个算法来尝试或至少指出我正确的方向?如果这不能做得更好,我想用另一种方法来解决我的问题。

0 投票
1 回答
281 浏览

java - 渲染非立方沙盒游戏的最佳方式?

在我的游戏中,世界是由立方体组成的,但立方体被分成 5 个部分:一个四面体和 4 个角。每种类型的块有两种颜色。如果一个角被切掉,这就是一个块的样子,尽管每个角/面可能有不同的颜色。

问题是,在四面体面上,我希望三角形之间的边缘是无缝的。所以我不能使用纹理。(我可以,但它们需要是高分辨率的,如果我想为颜色设置动画(例如在水上),这不是一个选项)。

我找到了这些方法:

  • 在每个四面体面上绘制每个三角形,然后在每个立方体面上绘制每个正方形(使用 VBO 和所有这些东西)
    多边形太多!出现滞后。这只是渲染四面体。

  • 在世界几何上使用片段着色器
    数学很简单:对于每个轴,找出点是否小于立方体内的 0.5,然后对结果进行异或运算。这决定了使用哪种颜色。我有滞后,但我认为我的代码很糟糕。

  • 世界几何上的 3D 纹理
    考虑到它与我的情况完美匹配,这似乎是最好的选择,但我真的不知道。

  • 将实例化几何与上述任何一种一起使用
    我不确定这一点;我读过大规模的实例化可能会很慢。如果我想优化跳过隐藏表面(这可能是不必要的),我将需要 31 个或更多网格。

  • 使用几何着色器
    我读过几何着色器在大尺度上表现不佳。

这些选项中哪个最有效?我认为使用 3d2d 纹理可能是最好的选择,但如果我得到延迟,我想确定这是因为我使用了糟糕的代码而不是低效的方法。

编辑:这是我的着色器代码

0 投票
0 回答
350 浏览

java - 读取 .vxl 文件(黑桃 A)

在过去的几天里,我一直忙于为 Java 设计和编码体素。

我的最终目标是与一个可以在基于体素的世界中四处走动和射击的玩家一起制作一个小游戏。到目前为止,一切都运行良好 - 我已经让体素引擎工作并加载以简单 XML 格式保存的地图。但是,我希望能够从 Ace of Spades 加载 .vxl 地图(我相信它使用 Voxlap)。

我发现是一本关于如何构建 .vxl 的手册。但是,我将如何在 Java 中实现类似的东西,而不是 C++ 伪代码?我不是要代码,只是要一个关于如何做这样的事情的方向。