问题标签 [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 回答
1160 浏览

opengl - SVO 渲染:OpenGL 还是自定义渲染器?

我正计划创建一个 Sparce Voxel Octree (SVO) 引擎,并且在使用 openGL 渲染每个小立方体或在汇编和 c 中编写我自己的渲染器之间陷入困境。如果我要做后者,我不确定如何在屏幕上绘制像素(我在 Mac 上,10.8)。什么图形上下文/窗口系统将是首选的方法(不是 X,我在我的 Mac 上遇到了 X 的问题)。

PS 引擎需要能够绘制至少 50.000 个立方体(我将使用 opencl/cuda 来帮助并行处理立方体)。我只是想知道通过专门设计的渲染器进行绘制是否更有效。

0 投票
3 回答
10609 浏览

algorithm - 如何平滑 3D 体素世界的块?

在我的(类似 Minecraft 的)3D 体素世界中,我想平滑形状以获得更自然的视觉效果。让我们首先在 2D 中查看这个示例。

无平滑、圆形平滑和贝塞尔平滑

左边是没有任何平滑的世界的样子。地形数据是二进制的,每个体素都被渲染为一个单位大小的立方体。

在中心,您可以看到一个简单的圆形平滑。它只考虑了四个直接相邻的块。它仍然不是很自然。此外,我希望出现平坦的 45 度斜坡。

在右边你可以看到我想出的一个平滑算法。为了得出一个块的形状,它考虑了八个直接和对角相邻的邻居。我有在线的 C++ 代码。这是绘制贝塞尔曲线的控制点的代码。

但是,这仍然是二维的。如何将这个算法转化为三个维度?

0 投票
1 回答
3421 浏览

python - 人们如何一次渲染这么多体素?

我实际上有2个问题。1)我看到这些数千个体素的渲染,但使用八叉树我仍然只能在屏幕上获得大约 500 个体素。

这就是我一直在使用的八叉树代码。我从一个网站上得到的,这很整洁。它非常适合移除内部的立方体。虽然它只是一个空心盒子,这很奇怪。虽然它确实大大提高了FPS。对于渲染立方体,我使用这个小类。

使用此代码,我可以获得大约 30FPS。我认为屏幕上大约有 62,210 个方格。我通常得到大约 30-40 FPS(这还不错。)

0 投票
1 回答
934 浏览

opengl - 为访问体素的多个线程获取唯一的缓冲区索引

我正在尝试实现“用于实时全局照明的基于八叉树的稀疏体素化”的一部分。

基本上只是体素化,我已经完成了。

还有“Voxel-fragment list”构造,它基本上是几个预先分配的体素位置和属性的缓冲区。

使用原子计数器和 atomic-comp-swap 或 atomic-add 创建位置缓冲区非常容易,以确保它仅由一个线程写入

但是,在多个线程写入相同体素位置的情况下,如何确保所有线程都获得适当的索引?如上所示,正确的索引仅对 1 个线程有效。

像下面的东西

我已经尝试了很多不同的方法。论文中唯一的提示是

为了管理(体素片段)列表,我们将下一个可用条目的索引(也是列表中体素片段数量的计数器)存储为另一个缓冲区对象中的单个 32 位值。

听起来它只是描述原子计数器的缓冲区对象。为了保持简单(目前),我没有计算运行平均值(如论文中所述),只是在渲染时将颜色相加并除以访问计数。

0 投票
2 回答
332 浏览

c# - XNA 体素引擎中的深度渲染问题

过去几天我们研究了体素引擎。如果我们绘制立方体,我们会遇到一些深度渲染问题。请参阅以下 Youtube 视频:http: //youtu.be/lNDAqO7yHBQ

我们已经沿着这个问题搜索并找到了不同的方法,但它们都没有解决我们的问题。

  • GraphicsDevice.Clear(ClearOptions.DepthBuffer | ClearOptions.Target, Color.CornflowerBlue, 1.0f, 0);
  • GraphicsDevice.BlendState = BlendState.Opaque;
  • GraphicsDevice.DepthStencilState = DepthStencilState.Default;
  • GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap;

我们的LoadContent()方法:

我们的Draw()方法:

我们的视图和投影设置:

我们使用Aaron Reed 的书 ( http://shop.oreilly.com/product/0636920013709.do )中的相机 ( http://www.filedropper.com/camera_1 )。

你看到我们遗漏的东西了吗?或者你有解决这个问题的想法吗?

0 投票
1 回答
1015 浏览

c++ - 使用 Cmake 编译库

我正在尝试将体素库 PolyVox 包含到我的项目中。但是库下载不为您提供预编译的头文件,而是需要 Cmake。这不会是一个大问题,除了他们关于这个主题的教程非常不完整。我以前从未使用过 Cmake,搜索并没有解决这个问题。

我使用 Visual Studio 10 编译器运行了 Cmake,它生成了一堆 Visual Studio 项目。我将这些项目编译成 2 个库,并将库目录包含在项目的属性中。我还将 PolyVox 的所有头文件放在 Visual Studio 知道的目录中。尝试编译我的项目时,我收到链接器错误,例如:

有人可以向我解释如何使用 Cmake 正确地将 PolyVox 包含到我的代码中吗?

0 投票
1 回答
1183 浏览

c# - C# 中的体素地形

我正在寻找在 C# 中创建一个简单的体素引擎。我知道很多 XNA,但听说在 OpenGL/DirectX 中做会更好。有人知道我将如何完成这样的事情吗?我不想要图书馆,因为我想从头开始学习。

0 投票
1 回答
268 浏览

algorithm - 在体素环境中有效放置框

我有一组任意的体素来定义游戏的房间。我的目标是根据道具的特定规则在这个房间内放置各种道具(绑定到体素的大小)。一些简单的规则示例(体素维度为 xyz,props 远不止这三个):

  • 书架 (2x3x1) 需要靠墙和地面放置。
  • 需要在地面上放置一张桌子(4x1x2)。
  • 壁挂式灯 (1x1x1) 需要靠墙放置。

道具不能与其他道具或现有体素相交。我试图找到一些有效的数据结构和/或算法,可以让我相当快地做到这一点。我目前的方法是这样的:

  • 创建一组可能的道具位置,这是一组与填充体素相邻的空体素。
  • 如果是地板、墙壁、角落等,请在S中标记每个项目。
  • 选择要放置的道具P。
  • 选择满足道具放置规则的 S 的子集S ' 仅限墙壁、角落等)。
  • S'中选择任意元素E。
  • 这是非最佳部分:尝试以某种方式将P拟合到E周围。看看P的边界是否允许它被放置在E之上而不与其他道具和体素相交。如果不合适,请尝试旋转和/或平移P的边界,直到它位于包含E的合法位置。
  • 如果合适,则更新S以包含新道具,并开始放置更多道具。
  • 如果仍然不合适,则从S'中选择另一个任意元素并重试。

它在技术上是可行的,但不是非常理想,并且在最坏的情况下表现得非常糟糕,例如当道具不能放在房间的任何地方时,或者如果我要挑选许多大型地板道具放在一个房间里地面空间被柱子和洞打破。

如果我能在选择E时以某种方式考虑P的尺寸,那将是理想的。我正在研究生成体素网格的 3D卷积图(本质上是制作网格的模糊图像),以便每个体素都有一些关于它周围有多少空间的粗略数据,但问题是我需要更新地图每次我放下一个新道具,这听起来很贵。

另一个想法是将世界存储在八叉树中,并以某种方式进行更好的位置检查,但我似乎无法想象这会有多大帮助。八叉树是否允许我确定任意框是否包含比位置键控的字典更有效的任何点?

TLDR:您将如何使用比单个体素更大的装饰物以编程方式装饰 Minecraft 中的房子?

0 投票
1 回答
1657 浏览

r - 在R中绘制体素图像

您知道 R 中是否存在用于绘制体素对象(3D 数组)的库或函数吗?我找到了可以执行 3d 散点图的包 rgl,但我真的在寻找与 3D 数组一起使用的函数“image”的等价物。谢谢

0 投票
0 回答
1523 浏览

opengl-es - webgl glsl 模拟texture3d

我正在将一块opengl 移植到webgl,并且我正在尝试模拟texture3d。不知何故出了点问题。

不需要插值,因为它仅用于计算。我不确定原始代码的几何部分,现在通过纹理获取每层属性。

更新:好的,我重写了纹理 3d 函数,我仍然遇到一些问题:

这是我要移植的原始代码:

和 glsl