标签: voxel

是否有用于使用体素引擎进行渲染的java库?

我很感兴趣,如果java中有库,它们会渲染基于体素的场景吗?开源是一如既往的首选.

java rendering voxel

6
推荐指数
1
解决办法
2795
查看次数

OpenGL体素引擎速度慢

我正在使用C++和OpenGL(àlaMinecraft)制作一个体素引擎,并且使用ATI X1600无法在我的3GHz上获得不错的fps ...我完全没有想法.

当我在屏幕上有大约12000个立方体时,它会降到20fps以下 - 可悲.

到目前为止,我的优化是:视锥体剔除,背面剔除(通过OpenGL的glEnable(GL_CULL_FACE)),引擎只绘制可见面(当然除了剔除面)并且它们在八叉树中.

我试过VBO,我不喜欢它们,它们不会显着增加fps.

Minecraft的引擎如何如此之快......我在10000立方体中挣扎,而Minecraft可以在更高的fps下轻松绘制.

有任何想法吗?

c++ opengl voxel

6
推荐指数
2
解决办法
9597
查看次数

体素引擎和优化

最近我开始开发体素引擎.我需要的只是没有纹理的彩色体素,但是数量非常大(比我的小得多) - 问题是如何快速绘制场景?我正在使用c#/ xna,但在这种情况下,我认为这不是很重要,让我们来谈谈一般情况.看看这两款游戏:

  1. http://www.youtube.com/watch?v=EKdRri5jSMs
  2. http://www.youtube.com/watch?v=in0bavLJ8KQ

特别是我认为2号视频代表了很棒的优化方法(我的gfx卡只能在192 x 192 x 64时开始窒息)他们是如何实现这一目标的?

我将在引擎中拥有什么:

  • 多彩的体素没有纹理,但阴影
    • 很多很多体素都说最小512 x 512 x 128来实现像#2这样的东西
    • 阴影(平滑阴影会很棒,但这不是必需的)
    • 可选:动态照明(例如来自火球飞行,在体素结构附近点亮)
    • 帧率至少40 FPS
    • 相机有3种自由方式(在x轴上移动,在y轴上移动,在z轴上移动),不需要相机旋转
    • 最后可选功能可能是景深(它会很甜蜜^^)

我已经知道的优化:

  • 去除位于体素结构内的看不见的体素(由其他体素从六个方向覆盖)
    • 去除体素的看不见的面孔 - 因为相机没有旋转并且总是像TPP游戏一样向前倾斜,所以如果我们通过垂直切割划分屏幕,左体素和右体素将仅显示3个面
    • 将体素保持在字典而不是三维数组 - 跳过大小为512 x 512 x 128的数组需要几毫秒这是不可接受的 - 但字典int:颜色其中int描述打包3D位置要快得多
    • 在适用的地方使用实例化
    • 封闭?(这该怎么做?)
    • 空间划分/ octtree(这是个好主意吗?)

如果有人给我一个提示,如何改进上面列出的现有优化或者可以分享新改进的想法,我将非常感激.谢谢

3d optimization voxel voxels

6
推荐指数
1
解决办法
1万
查看次数

在matlab中的3D体素显示

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

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

(:, :, 1) -> [0, 0;
              0, 0]
(:, :, 2) -> [0, 0;
              0, 0]
Run Code Online (Sandbox Code Playgroud)

数字0通常是我想用颜色或纳米表示的数字,如果那里没有体素的话.我想做的是用matlab显示体素网格,如下图所示:

在此输入图像描述

除了vocels应该用单元格中的数字着色.

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

matlab voxel

6
推荐指数
1
解决办法
4949
查看次数

无限立方体世界引擎(如Minecraft)优化建议?

体素引擎(像Minecraft)优化建议?

作为一个有趣的项目(并让我的Minecraft-adict儿子为编程兴奋)我正在使用C#.NET4.5.1,OpenGL和GLSL 4.x构建一个类似3D Minecraft的体素引擎.

现在我的世界是用块建造的.块存储在字典中,我可以根据64位X | Z<<32密钥选择它们.这允许创建一个可以缓存和缓存块的"无限"世界.

  • 每个块由16x16x16块段组成.从0级基岩开始,它可以达到你想要的高度(不像我认为限制为256的我的世界).

  • 当它们进入视图并需要渲染时,块会在单独的线程上排队生成.这意味着块可能不会立即显示.在实践中你不会注意到这一点.注意:我不是在等待它们生成,它们将不会立即显示.

  • 当一个块需要呈现为一个VBO(第一时间glGenBuffer,GL_STREAM_DRAW生成用于该块等),其含有可能可见的/外侧面(相邻块被检查以及).[这意味着在修改邻居时可能需要重新分配一个块].首次测试时,会为每个线段和透明线段测试不透明面.每个段都知道它在该顶点数组中的起始位置以及它有多少个顶点,包括不透明面和透明面.

  • 纹理取自数组纹理.

渲染时;

  • 我首先采取截锥体的边界框并将其映射到块网格上.利用这些知识,我会选择平截头体内和相机一定距离内的每个块.
  • 现在我对块进行距离排序.
  • 之后,我确定实际可见的块区段的范围(索引,长度).现在我确切地知道哪些段(以及哪些顶点范围)在视图中"至少部分地".我所拥有的唯一多余部分是隐藏在山脉之后或"有时"深埋地下的部分.
  • 然后我开始渲染...首先我使用已知的顶点范围从前到后渲染不透明的面[启用剔除和深度测试,alpha测试和混合禁用].然后我将透明面渲染回前面[启用混合]

现在......有没有人知道改善这种情况的方法,仍然允许动态生成无限世界?我目前达到〜80FPS @ 1920×1080,〜120fps的@ 1024×768(截图http://i.stack.imgur.com/t4k30.jpg,http://i.stack.imgur.com/prV8X.jpg上)平均2.2Ghz i7笔记本电脑配ATI HD8600M gfx卡.我认为必须增加帧数.而且我想我必须,因为我想添加实体AI,声音并做凹凸和镜面映射.使用Occlusion Queries可以帮助我吗?......根据细分的性质,我无法想象.我已经最小化了对象的创建,因此整个地方都没有"新对象".此外,由于在使用调试或发布模式时性能没有真正改变,我认为这不是代码,而是更多的问题解决方法.

编辑:我一直在考虑使用,GL_SAMPLE_ALPHA_TO_COVERAGE但它似乎没有工作?

gl.Enable(GL.DEPTH_TEST);
gl.Enable(GL.BLEND); // gl.Disable(GL.BLEND);
gl.Enable(GL.MULTI_SAMPLE);
gl.Enable(GL.SAMPLE_ALPHA_TO_COVERAGE);
Run Code Online (Sandbox Code Playgroud)

opengl optimization cube voxel minecraft

6
推荐指数
1
解决办法
3434
查看次数

确定三角形所在的体素

给定环境的体素化和具有顶点A,B和C的三角形,确定三角形"占据"或居住的哪些体素的最佳方法是什么?换句话说,我怎样才能枚举三角形的任何部分所在的所有体素?

3d graphics geometry voxel

6
推荐指数
1
解决办法
2433
查看次数

Ray voxel intersection

我想测试射线与体素场的交叉点.

我可以通过计算与当前体素边缘的光线盒交点来天真地爬过体素场,然后对下一个体素做同样的操作,直到我碰到某个东西.但是没有更快的方法来追踪体素场吗?我正在思考Bresenham的 3D 线条算法,这可以很快地给出给定线条相交的所有单元格.有人这样做过吗?

由于certian限制以及这些光线跟踪不经常发生的事实,我不想构建八叉树或任何其他数据结构.

c# math voxel

5
推荐指数
1
解决办法
2796
查看次数

在体素空间上的正则表达式

有没有办法在3d体素网格中松散地描述一个对象(例如通过模式匹配有限自动机),就像我们可以用regexp松散地描述一维字符串中的模式一样?

假设我想要描述具有下部小平面的"A"型体素的长方体,其由具有高度3和宽度5的"B"或"C"型体素组成,并且将该描述与体素场匹配以找到图案的示例.我可以搜索精确模型(类似Boyer-Moore-in-3D),但我需要为某些对象指定可变尺寸(如上述长方体的可变长度).

regex 3d pattern-matching voxel

5
推荐指数
2
解决办法
410
查看次数

用matplotlib表示体素

在Python中,给定一个N_1 x N_2 x N_3包含0或1 的矩阵,我将寻找一种以3D形式将数据显示为N_1 x N_2 x N_3体积为1s 的体积像素(体素)的方法。

例如,如果1s的坐标为[[1, 1, 1], [4, 1, 2], [3, 4, 1]],则所需的输出将如下所示

看来mplot3Dmatplotlib 的模块可以实现这一目标,但我还没有找到这种绘图的任何示例。有人知道解决此问题的简单解决方案吗?

在此先感谢您的帮助。

python matplotlib voxel

5
推荐指数
1
解决办法
7122
查看次数

在 3D 体素空间中绘制通过 3D 线的所有体素

我想画一条3D体素化线,即找到一条线经过的所有体素。3D Bresenham 总是会跳过一些体素。如图所示,3D bresenham生成的体素不能完全包含起始体素和目标体素之间的线。

3D bresenham 生成的 3D 线

这个链接中的算法:Algorithm for Drawing a 4-connected line可以解决我在2D平面上的问题,但我未能将其改进为3D。

3d graphics voxel bresenham

5
推荐指数
1
解决办法
2246
查看次数