标签: procedural-generation

程序性地生成一个大规模的宇宙

我正在创建一个基于文本的游戏,并尝试实现程序世界生成.

我最初的计划有点随意:每个宇宙都有一个星系的3D阵列,太阳系,然后又随机天体传播.我打算单独生成实际的本地区域,但我不确定它是否可以像我一样完成任务.

Each universe is a Galaxy[10][10][10] (arbitrary number at the moment),
each galaxy is a randomly sized SolarSystem[50-150][50-150][50-150],
each SolarSystem is a randomly sized CelestialBody[5-20][5-20][5-20].
Run Code Online (Sandbox Code Playgroud)

然后将所有这些写出到数据文件中以便稍后读取.

现在看一下,如果我没有弄错的话,这将需要(((ClassSize ^ 3)^ 3)^ 3)字节,即使ClassSize只有4个字节也不可能存储.

我最初的阵列数组的意图是能够有效地将群集组合在一起,更好地帮助识别玩家在宇宙中的位置.

我的问题是:如何更有效地创造这样规模的世界?

java memory multithreading procedural-generation

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

在顶点着色器中移动顶点

我的代码创建了一个包含许多顶点的网格,然后在顶点着色器中用高度随机噪声值替换它们.四处走动

glTranslated(-camera.x, -camera.y, -camera.z);
Run Code Online (Sandbox Code Playgroud)

工作正常,但这意味着你可以直到网格的边缘.

我想过将相机位置发送到着色器,并让整个位移被它偏移.因此最终的顶点着色器代码:

uniform vec3 camera_position;
varying vec4 position;

void main()
{
    vec3 tmp;
    tmp = gl_Vertex.xyz;
    tmp -= camera_position;
    gl_Vertex.y = snoise(tmp.xz / NOISE_FREQUENCY) * NOISE_SCALING;
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
    position = gl_Position;
}
Run Code Online (Sandbox Code Playgroud)

编辑:我修复了一个缺陷,顶点本身不应该水平移位.

但是出于某种原因,当我运行它并改变相机位置时,屏幕会闪烁,但没有任何动作.顶点被噪声值正确移位,着色和一切都有效,但位移不会移动.

作为参考,这里是git存储库:https://github.com/Orpheon/Synthworld

我究竟做错了什么?

PS:"闪烁"是错误的.这就好像在某些位置它不会绘制任何东西,而其他位置则从位置0绘制正常场景,因此如果我在不停止的情况下移动它会闪烁.我可以在它保持黑色的地方停留,或者在它保持正常的地方停留.

opengl directx 3d procedural-generation vertex-shader

2
推荐指数
1
解决办法
4235
查看次数

为什么所有Simplex Noise算法都有Permutation&Gradient表?

我一直在努力实现Simplex Noise大约一个月,我确实理解使用Simplices来减少所需的计算量以及渐变侧的安全功率.然而,将其实现为任何语言,似乎都是不可能的任务.

在我找到的每一个,每一个,每个代码中,我读到的资源,无处不在,代码似乎都有一个G和一个P表.从一些谷歌搜索和询问周围我了解到他们是一个排列和一个渐变表.他们在做什么?我们为什么需要它们?

我目前的想法是排列表只包含随机值,因此不必在运行时计算它们.

例子:

algorithm procedural-generation noise simplex

2
推荐指数
1
解决办法
2145
查看次数

2D 或 3D 单工/柏林噪声?

我正在开发一个项目,该项目通过程序生成一个可以从远处看到的可航行“行星”(即:没有任何可见的“地形”/高度差异。这只会显示水和陆地)或特写(从一个人的观点,而不是“航天器”的观点,即:实际上看到山丘和山谷的高度差异)。为此,我想知道我是否应该使用 2D 或 3D 噪声,因为我在各种网站上都看到过。我还想知道我应该使用单工噪声还是柏林噪声。我知道用途,但加载时间差异会那么严重还是我应该坚持使用 Perlin 噪声?提前致谢。另外,不太重要的是,我将如何将输出实现到 JavaFX 中?

java 3d 2d procedural-generation noise

2
推荐指数
1
解决办法
1685
查看次数

"随机查找"序列生成器

我想不出一个好方法,如果可能的话,我会感激一些帮助!

我担心我没有任何代码可以发布,因为我没有那么远.

我需要从0-999范围内的3个(或可能更多)参数生成一系列值.

对于给定的输入,该值必须始终相同,但在上边界和下边界之间具有公平分布,以便看起来是随机的.

例如:

function (1, 1, 1) = 423

function (1, 1, 2) = 716

function (1, 2, 1) = 112
Run Code Online (Sandbox Code Playgroud)

这些必须合理地快速生成,我的意思是我应该能够在网页加载期间生成100-200而没有明显的延迟.

该方法必须可以在C#中执行,但也可以在JavaScript中执行,否则我可能会使用CRC32或MD5哈希算法.

如果有帮助,这将用作程序生成例程的一部分.

我以前曾经问过这个问题,但我认为我的解释质量很差让我失望.

如果措辞严厉,我道歉.如果是的话,请告诉我,我会尝试进一步解释.

非常感谢您的帮助.

javascript c# procedural-generation

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

使用three.js对Particle进行程序生成的纹理

我的目标是创建一个粒子系统,其中涉及每个粒子(顶点)的程序生成纹理,但我发现很难创建这样的粒子系统的原型,它在Canvas和WebGL渲染器下都可以使用three.js

我想要实现的标准:

  1. 渲染器独立(ParticleCanvasMaterial不能与WebGL一起使用)
  2. 圆形纹理(ParticleBasicMaterial不喜欢画布纹理;无法使其输出圆形)
  3. 程序生成那些纹理(不能只使用带有准备的圆纹理的loadTexture)

目前这是否可以使用three.js?我错过了一些功能吗?

//create a texture generation function
function simpleTexture() {

    // generate canvas
    var canvas = document.createElement('canvas');
    canvas.width = 100;
    canvas.height = 100;

    // get context
    var context = canvas.getContext('2d');

    // circle texture
    context.beginPath();
    context.arc(50, 50, 50, 0, Math.PI*2, true); 
    context.closePath();
    context.fillStyle = "red";
    context.fill();

    // get texture
    texture = new THREE.Texture(
        canvas
    );

    texture.needsUpdate = true;
    return texture;

}

    //then use it like following...

    var material = new THREE.ParticleBasicMaterial({
        color: 0xffffff,
        size: …
Run Code Online (Sandbox Code Playgroud)

javascript procedural-generation three.js

0
推荐指数
1
解决办法
1994
查看次数

关联three.js网格对象中的数据 - 在程序生成的城市中

我正在尝试使用three.js创建一个程序生成的城市,主要由建筑物组成.要求是,当点击建筑物(用鼠标)时,应显示有关该建筑物的信息(例如名称,位置等) - 例如,作为悬停在该建筑物旁边的文本框.

我试图查看three.js网格对象(代表建筑物)是否具有可以存储此信息的任何"数据"属性.它没有.

知道如何实现这个功能吗?TIA.

javascript procedural-generation three.js

0
推荐指数
1
解决办法
531
查看次数