0

有没有办法将 Perlin Noise 合并到我的 Minecraft 克隆中?我尝试了许多不同的方法,但都不起作用。

这是我的代码片段:

from ursina import *
from ursina.prefabs.first_person_controller import FirstPersonController
from ursina.shaders import camera_grayscale_shader
app = Ursina()

grass = 'textures/grass.jpg'

class Voxel(Button):
    def __init__(self, position = (0,0,0), texture = grass):
        super().__init__(
            model='cube',
            texture=texture,
            color=color.color(0,0,random.uniform(.823,.984)),
            parent=scene,
            position=position,
        )

    def input(self, key):
        if self.hovered:
            if key == 'right mouse down':
                voxel = Voxel(position = self.position + mouse.normal, texture = plank)
                

            if key == 'left mouse down':
                destroy(self)

for z in range(16):
    for x in range(16):
            voxel = Voxel(position = (x,0,z))
4

2 回答 2

0

要使用 perlin 噪声生成地形,您可以使用Terrainperlin 噪声图像创建具有高度图的实体:

from ursina import *

app = Ursina()

noise = 'perlin_noise_file' # file 

t = Terrain(noise) # noise must be a file

app.run()

要制作 perlin 噪音,您可以使用perlin_noise库。这是文档中的一个示例:

import matplotlib.pyplot as plt
from perlin_noise import PerlinNoise

noise = PerlinNoise(octaves=10, seed=1)
xpix, ypix = 100, 100
pic = [[noise([i/xpix, j/ypix]) for j in range(xpix)] for i in range(ypix)]

plt.imshow(pic, cmap='gray')
plt.show()
于 2021-02-17T18:19:16.980 回答
0

是的,有一种方法可以将 perlin 噪声合并到我的世界克隆中,这是我的世界克隆中随机地形的一个简单示例:

from perlin_noise import PerlinNoise
import random

noise = PerlinNoise (octaves=3,seed=random.randint(1,1000000))

for z in range(-10,10):
    for x in range(-10,10):
        y = noise([x * .02,z * .02])
        y = math.floor(y * 7.5)
        voxel = Voxel(position=(x,y,z))

这是最终结果:https ://imgur.com/a/VZd1Uip

请记住,您需要安装 perlin noise,为此只需在终端中写入:pip install perlin-noise

于 2021-10-06T13:54:44.710 回答