我很感兴趣,如果java中有库,它们会渲染基于体素的场景吗?开源是一如既往的首选.
我正在使用C++和OpenGL(àlaMinecraft)制作一个体素引擎,并且使用ATI X1600无法在我的3GHz上获得不错的fps ...我完全没有想法.
当我在屏幕上有大约12000个立方体时,它会降到20fps以下 - 可悲.
到目前为止,我的优化是:视锥体剔除,背面剔除(通过OpenGL的glEnable(GL_CULL_FACE)),引擎只绘制可见面(当然除了剔除面)并且它们在八叉树中.
我试过VBO,我不喜欢它们,它们不会显着增加fps.
Minecraft的引擎如何如此之快......我在10000立方体中挣扎,而Minecraft可以在更高的fps下轻松绘制.
有任何想法吗?
最近我开始开发体素引擎.我需要的只是没有纹理的彩色体素,但是数量非常大(比我的小得多) - 问题是如何快速绘制场景?我正在使用c#/ xna,但在这种情况下,我认为这不是很重要,让我们来谈谈一般情况.看看这两款游戏:
特别是我认为2号视频代表了很棒的优化方法(我的gfx卡只能在192 x 192 x 64时开始窒息)他们是如何实现这一目标的?
我将在引擎中拥有什么:
我已经知道的优化:
如果有人给我一个提示,如何改进上面列出的现有优化或者可以分享新改进的想法,我将非常感激.谢谢
我有一个网格,它是3D,它存储一个数字.
以下是我的网格示例,如果它是2*2*2:
(:, :, 1) -> [0, 0;
0, 0]
(:, :, 2) -> [0, 0;
0, 0]
Run Code Online (Sandbox Code Playgroud)
数字0通常是我想用颜色或纳米表示的数字,如果那里没有体素的话.我想做的是用matlab显示体素网格,如下图所示:
除了vocels应该用单元格中的数字着色.
有没有人知道如何做到这一点,如果有一个图书馆或某种方式自己写?
体素引擎(像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
生成用于该块等),其含有可能可见的/外侧面(相邻块被检查以及).[这意味着在修改邻居时可能需要重新分配一个块].首次测试时,会为每个线段和透明线段测试不透明面.每个段都知道它在该顶点数组中的起始位置以及它有多少个顶点,包括不透明面和透明面.
纹理取自数组纹理.
渲染时;
现在......有没有人知道改善这种情况的方法,仍然允许动态生成无限世界?我目前达到〜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) 给定环境的体素化和具有顶点A,B和C的三角形,确定三角形"占据"或居住的哪些体素的最佳方法是什么?换句话说,我怎样才能枚举三角形的任何部分所在的所有体素?
我想测试射线与体素场的交叉点.
我可以通过计算与当前体素边缘的光线盒交点来天真地爬过体素场,然后对下一个体素做同样的操作,直到我碰到某个东西.但是没有更快的方法来追踪体素场吗?我正在思考Bresenham的 3D 线条算法,这可以很快地给出给定线条相交的所有单元格.有人这样做过吗?
由于certian限制以及这些光线跟踪不经常发生的事实,我不想构建八叉树或任何其他数据结构.
有没有办法在3d体素网格中松散地描述一个对象(例如通过模式匹配有限自动机),就像我们可以用regexp松散地描述一维字符串中的模式一样?
假设我想要描述具有下部小平面的"A"型体素的长方体,其由具有高度3和宽度5的"B"或"C"型体素组成,并且将该描述与体素场匹配以找到图案的示例.我可以搜索精确模型(类似Boyer-Moore-in-3D),但我需要为某些对象指定可变尺寸(如上述长方体的可变长度).
在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]]
,则所需的输出将如下所示
看来mplot3D
matplotlib 的模块可以实现这一目标,但我还没有找到这种绘图的任何示例。有人知道解决此问题的简单解决方案吗?
在此先感谢您的帮助。
我想画一条3D体素化线,即找到一条线经过的所有体素。3D Bresenham 总是会跳过一些体素。如图所示,3D bresenham生成的体素不能完全包含起始体素和目标体素之间的线。
这个链接中的算法:Algorithm for Drawing a 4-connected line可以解决我在2D平面上的问题,但我未能将其改进为3D。