Articles of 行进立方体

行进立方体在网格中留下孔

您好我正在尝试重现GPUgem3第1章(使用GPU生成复杂的程序性地形) ,到目前为止我管理的基本知识…现在我打赌一些奇怪的输出。 我从建议的-ws.y开始创建一架飞机。 然后,当我移动到噪音,我注意到网格中的一些洞。 但不像这个以前的问题 。 噪声网格: 所以我决定尝试一些更简单的方法,3管:x ^ 2 + y ^ 2-2 X ^ 2 + Z ^ 2-2 Y 1 2 + Z ^ 2-2 我会假设有一些问题与Z轴。 但我似乎可以弄清楚什么。 我的function,以获得三角形的顶点位置也似乎确定… Vector3 vertexAlongEdge(int edge, Voxel v){ Vector3 result=new Vector3(0,0,0); Vector3 p1=v.vertexes[edges [edge, 0]]; Vector3 p2=v.vertexes[edges [edge, 1]]; float v1 = density (p1); float v2 = […]

体素数据中的浮点值是什么意思?

我们知道体素可以用布尔值或浮点值的三维数组表示。 有一个答案完美演示了: 二进制/布尔或浮点体素的区别 。 如果我们使用二进制的方式,我们可能使用一个字节[,,],所以我们有256个插槽。 他们可以用来表示内容。 例如,0可以是空气,1草,2石,3水。 通过这种方式,我们可以定义什么是固体或不固定的颜色在哪里。 但是浮点方式呢? 所以我的问题是: 浮点值在浮点体素中意味着什么? 有没有一种方法可以用它来描述内容和保持地形的平滑? 。 我已经尝试了什么,我得到了什么? 我试图与Marching Cube建立一个网格,里面充满了来自Perlin Noise的 “随机”3d分形。 结果看起来非常好,但现在我应该如何定义什么是什么? (空气,石头,…) 我很确定解决scheme已经在这个答案中得到了回答 。 不幸的是,即使我读了5-6次的答案,我也不明白。 我知道有一个门槛来定义什么是固定的或不固定的。 给我3个for-loop伪代码来填充浮点三维数组可能会有所帮助。

“行进立方体”体素地形 – triplanar纹理与深度?

我目前正在使用行进立方体algorithm对体素的标量场进行多边形化的体素地形。 我正在使用triplanar纹理着色器进行纹理处理。 说我有一个草纹理设置为Y轴和一个污垢纹理的X和Z轴。 现在,当我的玩家向下挖,它仍然是草。 我将如何使它看起来像污垢? 我一直在想这个问题,唯一能想到的就是标记已经挖出某个顶点颜色的顶点。 当它具有该顶点颜色时,着色器将该污垢纹理应用于标记的顶点。 有更好的方法吗?

如何对行进立方体地形进行碰撞检测?

我在写游戏引擎的物理部分。 世界使用三维柏林噪声的行军立方体algorithm来制作地形。 如何在结果网格上进行碰撞检测? 我不能使用SAT,因为地形不是凸的,把它细分成更小的凸起部分似乎几乎是不可能的。 什么是这种网格最好的碰撞检测algorithm? 应该与地形碰撞的物体可以是任何凸多面体。 编辑:地形是不是“立方体”(像minecracft)。 地势平坦,有斜坡。 这是非常接近我的地形看起来像(这不是我的video): https : //www.youtube.com/watch?v=-4rA3fdKWQA 我在这里寻找一个通用的碰撞检测。 我需要接触的点和法线,以便我可以把这些放入我的碰撞parsing器。 使用的例子是把一个盒子扔到地形上,它应该像在现实世界中一样滚动和反弹。

如何在统一3D中进行三维立方体网格划分

我得到了很多独特的结果,这些结果来自于我的行进立方体表面生成器的统一性,并且认为这是一个已经解决的很常见的问题,所以我想我会把这个作为一个小例子项目来提取出来,代码… http://ccoder.co.uk/files/mc.zip …如果你下载和运行的例子,你应该得到这样的事情… …所以我的问题是: 我怎样才能解决在行进的立方体网格代码的逻辑来生成一个完整的网格与一致的uv映射? 如果有人可以解决这个问题,我会用这个解决scheme编辑这个问题中的示例,以便其他人可以在将来下载这个解决scheme。 更新: 所以我找出了引起顶点生成问题的原因,看起来像保罗伯克斯查找表,然而在某些情况下会导致不同顺序的顶点数据返回给其他人,这似乎是这个UV问题的原因(见图片,更新) 我已经更新了示例项目,任何人都喜欢debugging行军立方体三表??东西告诉我这将是一个漫长的任务!

来自体素网格的平滑网格

我尝试使用行进立方体algorithm来实现平滑的体素网格划分,但我不太明白如何做内插(我明白,这将解决问题),以实现在空间和填充空间之间的边界上的平滑过渡。 在上面的图片中,我已经将立方体网格单元格呈现为立方体。 目前体素网格只是一个3d数组,如果单元格为空(0.0)或填充(1.0)(不确定是否可以,我是否需要存储每个单元格的角)。 当处理进行立方体迭代时,我必须在浮点索引处采样我的数据,例如,如果位置(3.316,0.16,0.5)是数据表面/数据内部的空白空间,我需要查找。 目前我只是检查位置的单元格值,例如(3,0,0),对于以立方体网格为结果的示例。 这显示了我想要做的或多或less的事情:

使用2D高程地图数据通过Marching Cubesalgorithm生成地形

行进立方(MC)algorithm通过取8个具有不同密度值的立方体,并基于给定的iso等级(其上的阈值被认为是实心区域)将它们转换成顶点和三角形。 它可以创造一个相当顺利的结果。 例如,下面的图片显示了MC使用3D噪声perlin函数生成多边形。 然而3D perlin噪声对于生成地形并不是很有用。 二维perlin噪声要好得多。 可以使用以下函数在通过行进立方体algorithm发送的每个立方体的每个角处生成等密度值为0的密度值: float IsoValue(Vector3 pos) { float gap = maxHeight – minHeight; float perlin = (Mathf.PerlinNoise(pos.x * frequency, pos.z * frequency) * gap) + minHeight; if(pos.y > perlin) { return -1f; } else { return 1f; } } 它产生一个锯齿状的结果: 这是因为与3d噪声函数不同,密度值从0直到1,并且MC总是沿着网格生成顶点,而不是在网格之间的不同高度处生成顶点。 如何修改上面的IsoValue函数,并不总是给0和1之间的值(使地形更平滑),这取决于生成的噪声离网格有多近?

行进与可破坏的环境的立方体

在过去的几天中,我花了很多时间来查找有关行军立方体algorithm的信息,我很确定我明白这一点。 我的游戏将使用大块的土地和体内的八叉树存储的体素,除非它不会运行与这个许多体素,我打算尝试与.25m块开始。 使网格遍历所有我认为是固体的块(来自3d Perlin噪声的密度超过0.5),并为每个块顶点调用Perlin噪声函数。 根据可见密度范围内的顶点组合,网格将是256个组合中的一个。 然后基于插入角的密度值来移动网格的顶点以形成平滑的曲面。 现在我想让它放置块和挖它们。 所有放置的块不会有一个光滑的旗帜,所以不会有从他们建立的行军立方体网格,所以他们会保持清脆的边缘。 我怎么能这样做,如果你挖掘块,他们会看起来很顺利? 我不能只用perlin噪音,因为所有的挖掘块都被认为是完全固体的,因为它们在iso值之上的实心区域。 但是有很多video可变形的行军立方地形。 有人可以解释我怎么能做到这一点或建议另一种algorithm?

行进多维数据集顶点法线

我了解如何在等值面上使用行进立方体生成几何graphics,但是我无法find关于如何计算使用行进立方体生成的网格的顶点法线的清晰解释。 现在,对于在查找阶段生成的每个三角形,我可以简单地通过取三角形中两个向量的叉积计算一个面 (而不是顶点) Triangle = [p1, p2, p3]; normal[face] = (p2 – p1).cross(p3 – p1).normalized(); 但是,如何计算p1 p2和p3上的顶点法线以允许平滑着色? 我能想到的唯一方法是对密度函数进行采样以产生其梯度的估计 – 但是有更快的方法吗?

行进立方体地形

在过去一周里,我一直在研究Marching Cubesalgorithm。 我希望将它用于地形,因为它可以造成地形的破坏。 在查看源代码并阅读了许多文章之后,我决定尝试自己编译一些代码,并尝试制作地形。 但是,这让我很头疼,似乎也找不到有关如何做的好资源。 http://img.ufgame.com/c%2B%2B/BbvJR.png 这是从这里find的例子 – http://www.angelfire.com/linux/myp/MC/ 相关的源代码可以在网站上find。 我将源代码添加到我的项目中,并将所有代码转换为与OpenGL 3.2一起使用。 但是,我不想在我的最终项目中使用这个代码。 (这只是我能理解的)。 我无法理解代码。 我觉得我现在理解这个algorithm,但是我似乎无法理解这个对象是如何形成的。 我怎样才能改变这个对象来创建地形? 互联网上有更好的资源吗? 提前致谢。