标签: procedural-generation

帮助使用perlin噪声库libnoise

当我用x,y和z作为整数调用libnoise的getvalue函数时,结果总是得到0.这是正常的吗?当我在教程http://libnoise.sourceforge.net/tutorials/tutorial2.html中尝试1.25,0.75,0.5时,我得到了0.686347的预期结果.具体来说,我已经尝试过20岁以下的整数.我只是不明白这是如何工作的?

任何帮助是极大的赞赏.

c++ procedural-generation terrain perlin-noise minecraft

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

Diamond-Square算法的平滑问题

我使用菱形平方算法生成随机地形.它工作得很好,除了我将这些大锥形状伸出或伸入地形.问题似乎是每时不时地设置一个点太高或太低.

这是问题的图片
截图

当我将平滑度设置得非常高时,可以更好地看到它
截图特写

这是我的代码 -

private void CreateHeights()
    {
        if (cbUseLand.Checked == false) 
            return;
        int
            Size = Convert.ToInt32(System.Math.Pow(2, int.Parse(tbDetail.Text)) + 1),
            SideLength = Size - 1,
            d = 1025 / (Size - 1),
            HalfSide;
        Heights = new Point3D[Size, Size];
        float
            r = float.Parse(tbHeight.Text),
            Roughness = float.Parse(RoughnessBox.Text);

        //seeding all the points
        for (int x = 0; x < Size; x++)
            for (int y = 0; y < Size; y++)
                Heights[x, y] = Make3DPoint(x * d, 740, y * d);

        while (SideLength …
Run Code Online (Sandbox Code Playgroud)

algorithm height procedural-programming map procedural-generation

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

C#XNA生成MIDI

我希望从C#XNA程序中播放类似MIDI的音符.我实际上并不需要构建一个MIDI文件,只能启动和停止音符或在给定时间播放它们.

play("flute", "D4", "start");
play("flute", "D4", "stop");
play("flute", "E4", "5 secs");
Run Code Online (Sandbox Code Playgroud)

c# midi xna procedural-generation procedural-music

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

3D的速度更快?Perlin或Simplex噪音?

好的,在网上找到了Perlin和Simplex噪音之间的很多比较.但我真的找不到三个维度之间的简单处理时间比较,这是我最感兴趣的.我已经阅读了那个流行的PDF(甚至大部分都理解了 - 是的!)但是我无法回答这个简单的问题:假设最佳实现,哪一个更快3D?

这个stackoverflow问题答案表明,Simplex对我来说是一个非常明显的赢家.当然,还有其他资源声称完全相反.

然而,一般声明似乎是Perlin噪声具有O(2 ^ N)的复杂度,而Simplex具有O(N ^ 2).其中3D表示Perlin为8,Simplex为9.但是,在某些网站上,我发现Simplex实际上是O(N)的说法.那么这里的真实情况什么,这对3D的速度意味着什么呢?

我在这里不知所措,我真的主要对3D应用程序(包括洞穴的随机地形生成)的使用感兴趣,如果我希望它能像我一样快,我找不到一个问题的答案.可能.

所以也许有人可以帮助我:)

algorithm 3d procedural-generation perlin-noise simplex-noise

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

l 系统节点重写示例

这是我在 stackover 流中的第一篇文章。最近我开始阅读名为“植物的算法之美”的书,其中在第 1 章中,他解释了 L 系统。(您可以在此处阅读该章节)。

所以据我所知,有两种类型的 L 系统。边缘重写和节点重写。

边缘重写相对非常简单。有一个初始的起始多边形和一个生成器。初始多边形的每条边(边)都将被生成器替换。

但是这个节点重写非常混乱。从我收集到的信息来看,有两个或更多规则,并且每次迭代都将规则中的变量替换为其常量对应项。

对于海龟解释,这些是标准规则

F : Move turtle forward in current direction (initial direction is up)
+ : rotate turtle clock wise
- : rotate turtle anti clock wise
[ : Push the current state of the turtle onto a pushdown operations stack. 
    The information saved on the stack contains the turtle’s position and orientation, 
    and possibly other attributes such as the  color and width of lines being drawn. …
Run Code Online (Sandbox Code Playgroud)

algorithm procedural-programming l-systems procedural-generation fractals

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

用天空盒程序生成星星

我正在尝试在 OpenGL 中程序生成一个充满星星的背景。

我采用的方法是创建一个带有立方体贴图纹理的天空盒。立方体贴图纹理的每一面基本上由一个 2048x2048 的黑色图像组成,其中随机选择的纹素设置为白色。结果如下:

程序生成的星星。我不确定从图像上看它有多明显,但是当在一个非常明显的盒子形状周围移动时,可以看出靠近盒子边缘的星星看起来更小而且更靠近。我怎样才能防止这种情况?我是否需要放弃天空盒方法并使用类似天空球的东西?

编辑:这是我将立方体贴图映射到天空的方式。

// Create and bind texture.
glGenTextures(1, &texture_);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_CUBE_MAP, texture_);

for (unsigned int i = 0; i < 6; ++i) {
    std::vector<std::uint8_t> image = generateTexture(TEXTURE_WIDTH, TEXTURE_HEIGHT);
    glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, TEXTURE_WIDTH, TEXTURE_HEIGHT,
                 0, GL_RGB, GL_UNSIGNED_BYTE, image.data());
}

// Set texture parameters.
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
Run Code Online (Sandbox Code Playgroud)

下面是generateTexture函数的定义:

std::vector<std::uint8_t> Stars::generateTexture(GLsizei width, GLsizei height) {
    std::vector<std::uint8_t> image(static_cast<std::size_t>(3 * width * height)); …
Run Code Online (Sandbox Code Playgroud)

c++ opengl procedural-generation

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

恒星的平均颜色是多少?

我试图在程序上生成点星,为我的游戏创建一个星空背景.我想根据平均星的真实颜色来加权颜色.有人能指出我这种数据的方向吗?

procedural-generation

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

粒子沉积地形生成

我正在使用粒子沉积来尝试在程序上创造一些类似火山的山脉,但我所能摆脱的只是金字塔状的结构.是否有人熟悉该算法可能能够揭示我可能做错的事情.我现在正在将每个粒子放在同一个地方.如果我不这样做,它们会分散在非常薄的一层,而不是任何一种山.

void TerrainClass::ParticalDeposition(int loops){
float height = 0.0;




//for(int k= 0; k <10; k++){

    int dropX = mCurrentX = rand()%(m_terrainWidth-80) + 40;
    int dropY = mCurrentZ = rand()%(m_terrainHeight-80) + 40;
    int radius = 15;
    float angle = 0;
    int tempthing = 0;
    loops = 360;

    for(int i = 0; i < loops; i++){



        mCurrentX = dropX + radius * cos(angle);
        mCurrentZ = dropY + radius * sin(angle);

        /*f(i%loops/5 == 0){
            dropX -= radius * cos(angle);
            dropY += radius * sin(angle); …
Run Code Online (Sandbox Code Playgroud)

c++ procedural-generation terrain

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

Unity 中的程序纹理?

我主要是一个程序员,不太擅长绘图,所以我决定在运行时以程序方式制作纹理,我的意思是每次都生成一些新的和新鲜的东西,它应该看起来可信。如何获得从这个开始?在 Unity 中编程,如果这会有所帮助的话。

textures procedural-generation texture2d unity-game-engine

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

有限状态机一次生成一个字母的名称

我记得几年前上过一个班级,在那里我得到了一个有趣状态机的有趣例子,其中每个州都包含一个字母,并且有多条路径导致其他字母通常跟着它们一个字.一些字母也有导致终止的路径,并且通过从有限状态机中的任何点开始并遵循到终止的有效路径,您可以将字母链接在一起并且(几乎)总是以有效的方式结束字.当然,这只是该语言中的一部分单词(遗憾的是我忘记了FSM的用语).我的问题涉及多个相关问题:

  • 这是随机生成"伪"字的可行方法吗?我的意思是一个不一定有效的词,但是一个看起来有效的拼写的词.
  • 这种技术是用于任何众所周知的随机字生成算法,还是作为其中的一部分,如果是,那么哪些技术?
  • 是否有其他常见的替代方法,一次生成一个字母的随机单词,或者可能采用以这种方式生成的随机字符串并将其强制转换为"伪"字?

string random algorithm state-machine procedural-generation

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