Articles of 体素

AABB扫描与体素世界的碰撞反应

我遵循这个教程: 链接 ,我能够使它与3d体素世界的碰撞工作。 但是我遇到的问题是碰撞响应。 我想让玩家在靠墙的时候滑到墙上,而不是卡在每个体素边缘。 这是因为我得到了正常的AABB扫描testing是体素的一部分。 (是的,我正在做广泛的检查首先)。 在上面的图像是我的问题的2D表示。 体素是黑色矩形,蓝色是玩家,红色是扫描检查区,绿色线是法线。 我想到的可能的解决scheme是: – 将体素合并到基于邻居的更大的碰撞盒中,但是当洞出现并且玩家大小增加时,会导致其他问题。 – 如果沿正常方向存在邻居体素,则忽略碰撞正常。 这是我目前在我的代码中,并在地面上滑动墙壁时工作正常,但倒在他们身上时失败: http : //ideone.com/xdsr2d 因为碰撞的次数和碰撞的次序(我在aabb扫描testing后得到的体素和法线的次序)中有许多体素是难以预测的,所以难以确定熔融接缝是否足够好。 我很感激任何帮助,因为我一直在围绕这个问题扑了很长一段时间。 (如果我的问题有任何问题,请告诉我,这是我第一次在gamedev.stackexchange上发帖)

在三维体素世界中去除水平世界切片的方法

最近我最近在做一个爱好体素的世界。 我目前对想法或解决scheme感兴趣,这些想法或解决scheme可以使我基本上一次一步地上下Y轴1水平块切片,有效地使所有上面的水平切片透明,以便我可以看见下面的对象/地形/单元地球。 [描述问题的快速视觉尝试] 我已经做了一些关于这个主题的search,但也许我没有正确描述问题,因为我找不到任何满意的东西。 目标: 1)我不想在每次上下Y轴块的时候重新创建整个世界的块网格。 这会破坏性能,可能会导致Unity崩溃。 2.)合理优化快速升降Y轴,即不发生性能下降。 我知道有几个select必须在那里,因为我已经看过其他引擎和游戏的例子(Byte56的哥布林时代的技术演示和侏儒等)。 我猜测algorithm通过一些神奇的着色器math将是完美的。 所有的想法非常感谢!

数组的确定性混洗

我无法find答案,所以我在这里问,我已经做了一个体素引擎,它的工作相当好,除了一个小的细节:我还没有弄清楚如何播种我的单工噪音引擎,互联网给了我两个建议: 用第四个轴作为种子,生成一个更高维的单纯形,这种方法很有效,但是比较起来却很痛苦。 洗牌排列表,我喜欢这个想法。 它应该(如果我的理解math是正确的)产量512! 排列,但是我不知道如何以确定的方式可靠地洗牌数组,我希望每次使用相同的种子时洗牌都是一样的。 所以像shuffle(perm,12)这样的东西在每次种子是12时都会返回相同的结果,但是当种子是22321时会有所不同。 所以我真正想知道的是如何使用种子或更好的方法来快速,可靠和确定性地对置换表进行混洗,或者使用更好的方法来播种单纯的噪声。

如何使用数组纹理作为纹理地图集的替代品,赋予我的世界风格游戏中成千上万的块types?

我一直试图弄清楚纹理的分类是如何工作的,只是看到人们说你不应该这样做,而是使用数组纹理(假设你可以用这个function来定位人们)。 我不明白的是,这是如何在纹理地图集的替代品,考虑到纹理地图集可以一次容纳许多纹理,只有最大纹理大小,其中作为一个数组纹理只能处理旧的opengl版本的最小256 ,最新版本为4096。 在一个我的世界风格的游戏中,你可能有所有的块使用单独的纹理每个面,这意味着256/6 = 42最大块types,同样4096/6 = 682最新的块types为较新的opengl版本。 显然这不是一个好的模式,如果你想大量支持很多纹理。 在现代卡片上使用纹理图集要求2 ^ 14大小的纹理最小,其具有16×16正方形纹理,每纹理给出1,048,576个不同纹理/或最差情况下174,762最大types的块。 考虑到可以通过atlassing与数组纹理存储的块types数量之间的巨大差距,似乎不应该使用数组纹理来处理这种types的东西,是否有围绕这个限制,我不明白?

XNA基于树的引擎是一个cpu猪,内存猪

我成功地在XNA中创建了一个简单的基于树节点的引擎,它可以主动导入和显示.obj模型。 我试图用它来创建一个体素环境,但是在20x20x20块之后,我的内存不足了,稍微less了一点,我就达到了5fps。 我运行了一个性能分析器,在更新阶段,我的大部分CPU时间都是循环遍历节点树。 此外,每个模型消耗太多的内存,因为我需要有比20x20x20更多的块。 引擎:引擎几乎是3D对象的树状节点列表,使用预照明进行点亮。 3D对象的基类是Transform.cs,Light,Mesh等类都inheritance自它。 每个对象都有一个子项列表,其位置和方向都是相对于父项的。 父母的边界框包括所有的孩子,这棵树可以无限地继续(理论上:)) Transform.cs: using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.Design; using System.Drawing; using System.Linq; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; using System.IO; using CharcoalEngine.Scene; using CharcoalEngine; using CharcoalEngine.Utilities; using Jitter; using Jitter.Collision; using Jitter.Collision.Shapes; using Jitter.DataStructures; using Jitter.Dynamics; using Jitter.LinearMath; […]

体素引擎的硬件实例

我刚刚从这个来源的硬件实例教程: http : //www.float4x4.net/index.php/2011/07/hardware-instancing-for-pc-in-xna-4-with-textures/ 。 在900.000和1.000.000之间的某个地方绘制了多维数据集的调用,我得到这个错误“XNA Framework HiDefconfiguration文件支持的最大VertexBuffer大小为67108863.” 而在900K仍然运行顺利。 这比100x100x100略less一点,这正好是一百万。 现在我已经看到了具有非常“微小”体素的体素引擎,在崎岖的地形和体面的远景平面上,您可以轻松获得1,000,000个立方体。 显然,我可以在几何缓冲区方法中优化很多,比如只渲染一个立方体的可见面,或者如果区域是平坦的,则使用覆盖多个立方体的较大面。 但是,我可以使用最大的67MB的顶点缓冲区,或者我可以创建多个?

渲染一个体素化的网格

我一直在阅读很多关于如何使用不同的GPU技术体元化网格的论文,但是我遇到了一个问题,我不知道如何正确解决。 我了解如何将3D网格转换为存储在3D纹理中的体素的过程,但是我不知道在此之后显示体素化网格的非常有效的方法。 我读过的许多论文都看过这部分。 我能想到的一个办法就是绘制一个实例化的立方体,每个立方体一个。 每个实例化的立方体都将具有与其在3D纹理中的位置相对应的纹理坐标。 每个实例化的多维数据集也将通过几何着色器。 如果当前坐标处的纹理条目为0(空体素),则几何着色器将不会输出任何三角形。 这是一个有效的方法/好主意吗?

如何在三维像素网格中的对象之间获得逼真的滑动接触?

我在我的游戏中有一个三维网格的体素。 实体四处走动,用简单的物理学将它们表示为一个与速度,质量和加速度一致的轴alignment边界框。 我正在做碰撞解决方法是相当简单的。 这是一些伪代码: function ResolveCollisions() // For each voxel that could intersect the bounding box… foreach (Voxel neighbor in VoxelGrid.GetVoxelsIntersecting(this.bounds)) // Check a collision between the voxel and the bounding box if (neighbor.Collides(this.bounds)) ResolveCollision(neighbor, bounds); function ResolveCollision(Voxel neighbor, BoundingBox bounds) // Compute the contact normal and penetration distance between the two // boxes. [Vector3 […]

我如何dynamic地生成一个体素世界的大块?

我已经组织了一个体素世界,但问题是它只能“向外扩展”。 结果,有一个角落,从那里生长,然后从那里向外。 我希望能够从四面八方发展世界。 我认为这最好是通过维护一个大块的世界位置,但这将需要遍历每个块只是为了find我正在寻找和检查哪些块需要创建(或只是为了做任何事情涉及到这个块),弄清哪些是加载的,哪些不是加载的,这将是一团糟。 现有的Voxel游戏(如Minecraft)如何处理这个问题?

在glsl着色器中绘制立方体

我正在研究一个体素引擎。 目前我的多维数据集呈现为vbos。 我认为,最好只加载体素的cooridinates到着色器,并绘制一个立方体本身。 有人可以告诉我,如果可能的话,如果可能的话,怎么样?