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

java - 由体素组成的平面 3D 三角形

我有一个问题,我似乎无法找到一个可行的算法,我已经尝试了好几天,但距离如此之近。

我想绘制一个由 3 个点(p0、p1、p2)定义的三角形。这个三角形可以是任何形状、大小和方向。三角形也必须在里面填充。

以下是我尝试过的一些事情以及它们失败的原因:

1

  • 沿着三角形从一边到另一边画线
    • 失败,因为三角形会有孔,并且由于在有角度的表面上随着位置变化而画线的笨拙而不是平坦的

2

  • 迭代一个区域并测试该点是否落在与三角形平行的平面以及投影到覆盖三角形区域的 XY、ZY 和 XZ 平面上的其他 3 个平面
    • 失败是因为对于某些三角形(具有非常接近的边)会有不可预测的结果,例如漂浮在周围的体素没有连接到任何东西

3

  • 沿着三角形的边迭代一个区域(线算法)并测试一个点是否越过平行平面
    • 失败是因为从 p0 到 p1 画一条线与从 p1 到 p0 画一条线不同,任何重新排列的尝试都没有帮助,或者会导致更多问题。不对称是这个问题。

这都是为了制作多边形和平面。3 给了我最大的成功并制作了准确的三角形,但是当我尝试将它们连接在一起时,一切都崩溃了,我遇到了无法连接、不对称等问题。我相信 3 可以进行一些调整,但我只是磨损了从试图使这项工作这么长时间并需要帮助。

我的算法中有很多不相关的小细节,所以我把它们排除在外。对于数字 3,这可能是我的实现而不是算法本身的问题。如果您想要代码,我会尝试将其清理到足以理解的程度,不过这需要我几分钟。但我正在寻找已知有效的算法。我似乎在任何地方都找不到任何体素形状制作算法,我一直在从头开始做所有事情。

编辑:

这是第三次尝试。这是一个烂摊子,但我试图清理它。

0 投票
1 回答
352 浏览

algorithm - 从体素列表创建邻域图比在 O(n^2) 中更快?

我目前正在通过大致执行以下操作来创建“邻域图”:

它大致以 n 平方(减去 n)运行。对于一定数量的体素是可以接受的,但显然对于更大的列表需要更多时间。

另一个简单的解决方案是将所有内容放入一个大的 3d 数组或 hashmap 中,这将在 O(n) 中运行,但会以更多内存为代价。

有更快的方法吗?我似乎无法在 google 中输入正确的搜索词...

0 投票
2 回答
229 浏览

algorithm - 如何获得每个有效点的法线向量?

如何评估每个有效点的法线向量?

pts 是 Point-cloud-data 中的点,在 (w,h) 大小的视图中看到;

像这样的东西:

每个点都由它们的邻居关联,并共同为我们生成一个表面。

pts 排列紧密,行和列。我们的任务是找到一种方法来尽可能准确地评估每个点的法线向量朝向我们的视野。

我正在尝试实时执行此操作,因为 pts 是实时生成的。例如,一次计算 1024x1024 点。有人以前发布过解决方案吗?

0 投票
1 回答
4141 浏览

java - 基于体素的游戏中的块管理

我正在开发基于 minecraft 的 java LWJGL 游戏。我正在研究地形管理,这很困难,因为世界可以随着你的探索而扩展。如果地形存储在块对象中,并且您需要知道从渲染列表中删除哪个块、添加哪个块以及根据玩家的 xyz 位置生成哪个块,您将如何管理地形?

0 投票
1 回答
2113 浏览

java - 程序地形生成

我正在尝试制作一个 3-d java lwjgl 游戏,它将数据存储在块中,并在玩家探索时一次生成一个块(无限)。地形如何在块之间混合以使其无缝?在研究了很长时间(几天,很多天)后,我感到很困惑。请帮我!

0 投票
1 回答
6137 浏览

c# - 基于 XNA 体素的地形引擎有什么好的资源吗?

我已经尝试了一周的游戏(XNA/C#),现在我已经到了创建地形的地步。我很可能会为此使用基于体素的引擎(类似于 Minecraft),实际上我已经尝试了很多玩 Cube 教程,但它们中的大多数都非常基础,对我没有多大帮助。现在我已经考虑了以下结构:

游戏 -> 处理主要任务。

-->调用世界级。-->

World -> 负责世界上发生的所有任务,保存区块数据。

-->放弃屏幕偏移后触发 Block 的 draw() 函数-->

Block -> 在正确的屏幕位置绘制方块,由 World 给出

但是,由于我需要渲染数千个块,这可能会非常困难,因为我没有 3D 编程经验。

使用 36 个(6 个边 x 6 个点代表 2 个三角形)索引方法是否仍然有效,因为我可以想象这会占用大量内存?

0 投票
2 回答
5363 浏览

matlab - matlab中的3D体素显示

我有一个网格,它是 3D 的,它存储一个数字。

这是我的网格的示例,如果它是 2*2*2:

如果那里不存在体素,数字 0 通常是我想用 color 或 nan 表示的数字。我想做的是用matlab显示一个体素网格,如下图所示:

在此处输入图像描述

除了元音应该用单元格中的数字着色。

有谁知道如何做到这一点,如果有一个图书馆或某种方式自己写?

0 投票
4 回答
12888 浏览

python - 在 Python 中,如何体素化 3D 网格

我需要帮助才能开始使用 Python(我几乎一无所知)来体素化从 Rhino 生成的 3D 网格。数据输入将是一个 .OBJ 文件,输出也是如此。这种用法的最终目的是找到建筑物内两点之间的最短距离。但那是以后的事了。至于现在,我需要先体素化一个 3D 网格。体素化原语可能只是一个简单的立方体。

到目前为止,我可以从 OBJ 文件解析器中读取已解析的 obj,并去除 V、VT、VN、F 前缀,并使用这些坐标查找 3D 对象的边界框。体素化网格的正确方法应该是什么?

0 投票
1 回答
2891 浏览

webgl - 使用 WebGL 渲染体素动画的最佳方法?

我想使用 WebGL 和 Three.js 渲染一个动画体素场景,用于一个爱好项目(可视化来自服务器端流的实时点云数据)。

场景不是很大——应该是 128*128*128 体素(200 万点)左右。

所以我想我可以只加载一个包含所有体素数据的大静态文件,然后根据来自服务器的流中的事件逐步添加或删除单个体素。

然而,在看到这个演示后(它不是基于体积(带有“内部”细节)而是一个更简单的“XY坐标+高程+时间”模型):

webgl kinect 演示

我想知道:

我可以使用相同的东西(视频、纹理、着色器..)来渲染我的体素动画吗?你将如何实现这一点?

我没有那么多的“爱好时间”,所以我更愿意在之前问出来:) 目前我正在考虑为体素模型的每一层加载许多视频。

但我不确定three.js 是否会喜欢它。另一方面,体素总是消耗大量内存,所以也许我没有太多选择。

谢谢


更新1:

事实上,我不需要数据的实时可视化。我可以偶尔轮询一下服务器(在 GPU 上加载前一个快照后立即下载一个新快照)!


更新 2:

每个体素都有一个附加的材料(“颜色”)

0 投票
0 回答
552 浏览

voxel - 具有实例化对象的场景的体素化

我在directx11 中创建了一个简单的场景,它有一个平面作为地板,有几个球体、立方体和矩形墙。只加载了 3 个对象:平面、立方体和球体;但是立方体和球体被多次实例化,具有不同的缩放、位置和旋转。其中两个对象是动态的。

考虑到具有不同比例和旋转的对象实例,我想将整个场景(100x100x20 单位)体素化为 0.2 单位体素。

我已经阅读了几篇关于体素化的文章,并获得了来自 GPU Pro 3 的“Practical Binary Surface and Solid Voxelization with Direct3D 11”的源代码;但是所有这些文章都展示了单个对象的体素化——将它们的三角形分割成一个网格。

我将如何扩展这些方法以解决具有多个对象实例的整个场景?

我唯一能想到的就是我必须对整个场景进行自上而下的八叉树划分。但对于动态场景,这会不会太贵?

对于我的场景,我为每个加载的模型使用一个缓冲区,所以如果我要在计算着色器中进行体素化,我是否需要将所有三个缓冲区复制到一个缓冲区中?我如何考虑模型实例?

谢谢你。