问题标签 [procedural-generation]
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.
opengl - Haskell OpenGL 程序生成
我正在尝试使用 Haskell 以程序方式生成给定宽度的三角方形地形,以提供给 OpenGL。
唯一实际程序生成的是高度,这一点也不难,我只是使用随机函数创建一个[[GLfloat]]
,表示高度的行。
然后我还有一个函数,heightsToCoords
它接受[[GLfloat]]
并返回[GLfloat]
包含每个顶点的 x、y 和 z 坐标的 a。
所以如果我打电话heightsToCoords [[0, 1], [1, 0]]
,它会返回
我遇到的问题是将数据获取到 OpenGL。OpenGL 需要对每个面进行三角剖分(至少在我的设置中),而我所拥有的只是点,我不确定如何创建面。
如何将这些数据从点列表转换为人脸列表?忽略法线和顶点的顺序。
c# - 3D 地形生成器中大量块的程序生成结构
我正在使用 16*16*16 体素块创建大型世界,这些体素块的尺寸堆叠高达 32*32*32,可以这么说,我在路上遇到了一些颠簸。
我想创建跨越 20+*20+*20+ 体积块的大型结构,这些结构是从程序生成的结构中创建的,并且对某些内容使用模板。现在我有一个问题。视觉渲染范围最多为 32*32*32 块,而我在内存中一次可能最多保存 40*40*40 块。
这些结构可以是城镇、地牢和道路之类的任何东西。我在想像 perlin worms 这样的道路,只是将它们放在 x、z 的地形上,然后分析桥梁的路径等。
结构和结构集合需要在玩家进入可视范围之前预先生成,或者更像是 perlin 噪声对高度图所做的工作(最佳解决方案)。(避免玩家看到发电机在工作)。他们还需要每次都与世界种子保持一致。
我对此进行了一些思考,并有两种可能的解决方案。
1) 基于结构生成器的原点生成结构。这会导致几个问题,即使我从结构的中心生成,结构也很容易进入玩家的潜在视觉范围。
2) 预先生成“无法访问”的块,然后将它们分页进出,以便使用上述方法生成结构。这似乎也相当不必要。
这两种方法都需要大量分析地形以找到生成结构的有效位置。
我希望有人可能有一个更有机的解决方案,甚至只是一个更简单的解决方案,不需要我“看”这么远。
先感谢您。
编辑:
我有一个地牢生成的想法,我为房间生成点云/节点。脚步:
1) 当生成器找到一个“节点”时,它会创建一个 x、y 和 z 大小,以根据房间的始发点**(房间的中心或角落)和房间类型创建一个框。
**x,y,z 相对于 0,0,0 世界空间计算如下 new Vector3((chunkX*16)+voxelX,(chunkY*16)+voxelY,(chunkZ*16)+voxelZ)
2) 计算出房间大小后,检查是否有重叠,如果发现重叠,则做几件事中的一件。如果房间重叠较高,则将其降低,直到屋顶或地板齐平。如果屋顶是齐平的,则建造一个通往房间的楼梯并拆除相交的墙壁。
3) 向下、向北和向东看可能有一个小圆锥的房间,并尝试在它们之间创建一条走廊。
这可能会起作用,特别是如果地牢的中心是大厅/老板房间。
对于城镇、城市和地牢来说,情况会有所不同。不过似乎还是有点波澜不惊。有任何想法吗?
c# - C# Xna 像 1d 图形一样在 2d 图像上插值边缘
我用随机游走生成了一些洞穴。问题是输出太小了,我想把它放大大约 10-20 倍。当我这样做时,每个像素都变得可见,所以我需要一些算法来解决这个问题。我考虑了一些正弦或三次插值,因为它是一维的,沿着边缘并在像素中心之间进行插值......所以基本上每个像素的高度将是图形的 Y 轴。图像本身只有 2 种“颜色”,即黑色和白色。
黑点是每个像素的中心,红线是我要存档的插值:
这是整个洞穴的样子:
有没有办法意识到这一点?还是不可能?我想知道当洞穴边缘回到 X 轴时我怎么能解决它,因为图形不能有每个 X 的 2 个点。
c# - 钻石平方算法不会产生“平滑”噪声
我最近在 C# 中整理了 Diamond-Square 程序生成算法的实现。但是,生成的噪声在所使用的“正方形”之间具有非常明显的边界。伪代码看起来像这样
该算法最初从整个图像的左上角和右下角开始,并一直通过(深度优先)。
我用这篇文章来设计算法。他们给出的示例如下所示:
这是我的一张图片的样子:
这是我的完整代码:
在对正方形之间共享的中点取平均值后:
更新迭代代码:
c# - 如何优化 Marching Cubes 算法?如何组合相似的面孔组?
经过 3-4 天的 256 查找表的行进立方体算法工作后,我终于让它工作了。现在我让它工作了,我想尝试优化它。我想到的一件事是用一个浮动区域去除大的平坦区域。
示例图像以显示我的想法
我如何使用查找表生成网格
感谢您为我提供正确的方法或帮助我解决此问题。
编辑*我在做什么
c# - 确保部分连接的有向图是强连接的
语境
我正在使用程序生成构建 3d 游戏。我正在尝试以这样一种方式连接多个预先生成的房间,即无论如何,玩家总是可以到达地图中的任何其他房间。房间有“可能的入口点”,连接走廊必须连接到这些入口点。但是,并非所有入口点都可以从房间内的所有其他入口点到达。例如,可能有一个坑陷阱,因此位于底部的玩家将无法穿过房间到达顶部,而必须另谋出路。
问题
给定一组嵌入在 3d 空间中的预先存在的有向图,添加一组总长度最小的(双向)路径,将子图连接成更大的图。做不到这一点(因为一些研究表明这是 NP-Hard)使路径尽可能短,以便在短时间内计算。
工作至今
我最好的解决方案是基于这个程序生成帖子,他在其中创建了所有节点的德莱尼三角剖分。我将房间的每个强连接组件(例如陷阱的顶层和底层)视为单独的节点,并以此构建 MST,但这限制了一些更有趣的可能性(例如,必须通过两条单向路径返回您开始的位置)。
有谁知道解决这个问题的更好方法?
actionscript-3 - 带有种子的程序功能(如道路生成器)
我四处寻找,但没有找到可靠的答案。我正在用 AS3 构建游戏。我为我的游戏生成随机地图(2D 图块)没有问题,它基本上由随机数组成。如何始终将种子参数传递给我的函数以获得完全相同的结果?
c# - C# OpenGL (SharpGL) 程序生成的墨卡托球体(极坐标)
我想知道在开始结束批处理中使用 for 循环写入点是否有效,所以我阅读了球体算法并根据我的阅读产生了这个。正如您在下面的输出屏幕截图中看到的那样,它存在一些问题。我的目标是在程序上生成一个球体,然后在运行时对其进行修改。
但我想将我的目标设定在短期内,并找出面部不正确的原因。有人有想法么?
我有这个代码:
markov-chains - Using Markov chains for procedural music generation
Does anyone know of an online resource where I can find stochastic matrices for an nth order Markov chain describing the probability of a note being played based on the previous n notes (for different musical genres, if possible)? I am looking for something similar to the second-order matrix found on this page: http://algorithmiccomposer.com/2010/04/openmusic-markov-chains-and-omlea.html
If not, or otherwise, what would be the best way to construct such a matrix for each genre? The article states that this can be done by hand or by analysing existing pieces of music. How could large amounts of music for each genre be processed to generate these matrices?
3d - Procedural generation of a constrained landscape
I'd like to implement a procedural generation of a terrain. After a thorough research I came up with a conclusion that it should be implemented with one of the gradient (coherent) noise generation algorithms, for instance Perlin Noise algorithm. However, I don't want the generation to be completely random. I'd like to apply some constraints (like where should be a mountain range, or where should be a lowland etc.).
Question:
For example I have a curve which represents some landscape element. The curve is an array of points.
- How can I improve the Perlin Noise algorithm, so that along this curve the noise will have a preferred range of values (or, for simplicity, value 0)?
- Alternatively, if I have a texture which is an output of Perlin Noise algorithm (2d array), how can I transform it to the desired noise (influenced by the curve)?