问题标签 [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 投票
1 回答
95 浏览

data-structures - 自动平衡(或廉价平衡)3D 数据结构

我正在开发一个需要 3D“基于体素”引擎的工具。我的意思是它将涉及从网格中添加和删除多维数据集。为了管理这些多维数据集,我需要一个允许快速插入和删除的数据结构。我在 kd 树和八叉树中看到的问题是,由于这些操作,它们似乎经常需要重新创建(或至少重新平衡)。

在我加入之前,我想就解决此问题的最佳方法获得意见。

更多细节:

  • x,y,z 位置在整数空间中
  • 需要对实时应用程序足够高效
  • 对将使用的多维数据集的数量没有硬性限制。很可能这个数字通常会很低(<100),但是我想让工具处理尽可能多的立方体

我想最终的问题是,以可以处理频繁插入和删除的方式管理本质上是 3D 点数据的最佳方法是什么?

(不,我不是在制作 Minecraft)

0 投票
0 回答
445 浏览

algorithm - 用双轮廓形成立方体的最小网格点数?(体素)

我一直在学习双轮廓算法,该算法很有用,因为它允许表面同时包含光滑和锐利的边缘。我对如何使用输入数据感到有些困惑。我相信如果我了解最小锐角立方体是如何定义的,我会更好地理解这一点。

花了很长时间阅读各种资源后,我开始相信以下想法之一是正确的,但我无法确定哪个是正确的。为避免混淆,我们将表面称为立方体,将任何 8 个相邻网格点称为一个单元格。非常感谢您提供插图以帮助说明构造。

想法#1 - 一个最小的尖锐立方体由一个 2x2x2 网格定义,其中每个网格点等于形成的立方体的一个角。

想法 #2 - 一个最小的尖锐立方体由 3x3x3 网格定义,其中每个网格单元包含一个所谓的“特征点”,并且需要 8 个特征点来形成立方体。

想法#3 - 一个最小尖锐立方体由一个 1x1x1 网格定义,其中一个特定密度的网格单元导致形成一个最小尖锐立方体。

这是另一个可能对未来读者有用的参考:http: //upvoid.com/devblog/2013/05/terrain-engine-part-1-dual-contouring/

0 投票
1 回答
776 浏览

3d - 实时 GI - 体素锥追踪

最近我一直在研究实时 GI 技术,如 Light Propagation Volumes、Reflective Shadow Mapping、Imperfect Shadow Mapping 等。但真正引起我注意的当然是 Sparse Octree Voxel Cone Tracing。它拥有一切:GI,近似镜面反射,可以很容易地集成到延迟渲染管道中,没有噪音,不依赖于参与计算的模型的多边形重量/真正困扰我的一件事是透明度。如何实现半透明体素的适当照明?(如彩色玻璃或半透明窗帘)?

是否可以?有任何想法吗?谢谢!

0 投票
1 回答
702 浏览

matlab - 使用 Matlab 进行体素主成分分析

我有在图像中具有特定位置(体素)的向量。我想执行 pca 来聚类所有相互关联的体素。

例如,我有三个一维体素:

现在位置 1 和 2 具有很强的相关性,而位置 3 则没有。可以使用corr查看哪些体素相关,但不可能对 3D 大数据集上的所有体素进行此操作。

有没有办法对此类数据执行 pca,以便我可以看到相似的体素聚类?

PS:请不要对体素这个词感到困惑,因为归根结底,我只是在谈论像素,它们具有由向量表示的多个属性。如果这有助于理解我的问题,我当然很乐意提供更多信息。

0 投票
1 回答
583 浏览

c++ - 创建体素系统并陷入困境,发现自己需要有关如何实现它的信息

所以,我可能应该先解释一下我想如何实现它。我的想法很简单,我想创建每个块并通过利用每个块本地的浮点网格来确定每个顶点的位置,然后我想将体素放置在一个大的 64 位整数网格中(每个块的位置由它具有的整数值,0,0,0 将是中间,20,20,20 将在 x、y 和 z 轴上 20 个块)进一步创建一个巨大的世界我会进行一些检查以确定如何将根据它们在整数网格中的位置推断出块,这是我尚未弄清楚的。(不如让它运行重要)

我遇到的问题:

  1. 弄清楚如何使用 libnoise 生成 3D perlin 噪声,据我所知,该文档没有涉及这个主题,而且我从谷歌那里得到了没有像样的结果。
  2. 不知何故将块放在整数网格中
  3. 弄清楚一个人将如何确定从网格中的位置推断出该块的坚固程度(我认为这很简单,例如检查周围的块是什么以及您在网格中的位置并根据该数据确定它)
  4. 根据从整数网格推断出的位置,将各种稀有矿石散布在周围,这相当容易,但在解决其他问题之前无法完成。
  5. 找出区间树。

那么,有什么想法吗?到目前为止的相关代码(删除了光、遮挡、UV 和正常计算代码,因为它与问题无关)

据我所知,你可能会注意到这段代码与用 C 和 python 编写的某个演示非常相似,这是因为很多代码是在阅读后编写的,对我来说有点影响

问题是它似乎没有涵盖我的问题,它让我对体素的工作方式有了更好的理解,就是这样。

那么,关于我应该如何解决我的这个项目的任何指示?

PS,这和战地 3 是 DOOM 克隆一样多是我的世界克隆,我想我会让你决定如何解释。

哦,我已经完成了我的研究,我发现:关于 0fps 的帖子,我相信你们中的大多数人都熟悉博客 https://sites.google.com/site/letsmakeavoxelengine 和其他一些,包括 GPU gems 3,行进立方体和其他一些东西,没有一个能解决我的问题。

0 投票
2 回答
1420 浏览

3d - 重用 three.js 网格(用于体素世界)

我目前正在第一次学习 three.js 和 3D 图形,并且正在尝试创建一个体素引擎(想想 Minecraft、Infiniminer)。我发现我的脚本占用了大量内存,但我怀疑为什么 - 我创建的每个块都使用一个新的 Mesh 对象,即使其中一些块看起来相同。

我问一些我认识的人,他们是否知道一种更节省内存的方法——他们建议为每种类型的块创建一个网格,并使用矩阵为块的每个实例转换网格(他们熟悉 OpenGL ,但不是这么多的三个.js)。three.js 是否允许这样的事情?如果是这样,你会怎么做,如果不是,还有其他选择吗?

(到目前为止,我的理解是您要渲染的每个项目都需要在场景图中,因此即使多个块看起来相同,您也需要将块的多个副本(具有不同的 x、y、z 坐标)添加到图。我可能错了。)

0 投票
1 回答
395 浏览

javascript - ThreeJS 体素未固定到网格

我正在使用 ThreeJS git repo 中的体素画家示例。

我已经改变了它,使体素比示例大。它们不占用 X 坐标上的一个网格空间,而是占用 2 个网格空间。

然而,这样做意味着翻转网格不固定在网格上,而是在一侧超过一半,另一侧超过一半。

在此处输入图像描述

这是我的代码:

有人知道为什么是这样吗?

0 投票
1 回答
2684 浏览

file - 了解 .binvox 文件格式

我有一个包含 (x,y,z) 点坐标列表的文件,我试图将其转换为viewvox可读的体素文件格式。我遇到了binvox文件格式,它看起来应该相对简单,但我无法理解它。特别是当它提到使用值字节和计数字节时,我一定误解了,因为我不清楚为什么计数的范围必须是 1<=count<=255。

希望有人可以执行以下一项或多项操作:向我解释格式,就像我五岁时一样,为小型模型提供 binvox 文件的工作示例,或者建议将坐标数据转换为体素格式的更好方法。

提前感谢您的任何建议。

编辑:在考虑了更多之后,我已经了解了计数字节的范围 - 1 是最小值,因为 0 的计数不会提供信息,最大值是 255,因为这是一个字节的最大值。

0 投票
0 回答
346 浏览

python - Blender:如何指定体素坐标?

我一直在玩 Blender Voxel Data 一段时间,但我仍然不确定它是如何工作的。我需要的是能够为每个体素指定坐标。我有一个这样的数据集:

我有一段 python 代码提取每个 dd 值,将它们转换为 ASCII 字符,并将它们填充到以尺寸为标题的 .bvox 文件中。但是,不会保存任何 xyz 坐标。Blender 如何知道将每个体素放在哪里?我看过一些纹理映射的想法,但没有一个允许我准确指定放置每个体素的坐标。

任何建议都乐意接受!

0 投票
1 回答
2737 浏览

matlab - Impose voxel grid on 3D point cloud

I am working with structured 2.5D and unstructured 3D data, which generally is available in (X,Y,Z) coordinates, i.e. point clouds. Now I want to impose a regular voxel grid onto the data. This is not meant for visualization purposes, but rather for "cleaning" or fusing the data. I imagine cases, where e.g. 3 points fall within the volume of one voxel. Then I would aim at either just setting this voxel to "activated" and discarding the 3 original points or alternatively I would like to calculate the euclidian mean of the points and return the thus "cleaned" point cloud as an irregularly structured one again.

I hope I could make my intentions clear enough: It's not about visualization and not necessarily about using volumetric cubes instead of points. It's only about manipulating possibily irregular point clouds in a structured way.

I was thinking about kd-tree or octree based solutions in this context, but can anybody point me in the proper direction? Hinting at existing MATLAB implementations would be most appreciated.