我正在尝试了解Perlin Noise和程序生成。我正在阅读有关生成带有噪声的景观的在线教程,但是我不理解作者对制作高海拔区域的解释的一部分。
在“ {island””部分的this webpage上有文字
设计一个形状,使其与岛上的形状相匹配。使用下部形状将地图向上推动,使用上部形状将地图向下推动。这些形状是从距离d到高程0-1的函数。设置e =较低的(d)+ e *(较高的(d)-较低的(d))。
我想这样做,但是我不确定作者在谈论上下形状时是什么意思。
“使用下部形状将地图向上推动而使用上部形状将地图向下推动”是什么意思?
代码示例:
from __future__ import division
import numpy as np
import math
import noise
def __noise(noise_x, noise_y, octaves=1, persistence=0.5, lacunarity=2):
"""
Generates and returns a noise value.
:param noise_x: The noise value of x
:param noise_y: The noise value of y
:return: numpy.float32
"""
value = noise.pnoise2(noise_x, noise_y,
octaves, persistence, lacunarity)
return np.float32(value)
def __elevation_map():
elevation_map = np.zeros([900, 1600], np.float32)
for y in range(900):
for x in range(1600):
noise_x = x / 1600 - 0.5
noise_y = y / 900 - 0.5
# find distance from center of map
distance = math.sqrt((x - 800)**2 + (y - 450)**2)
distance = distance / 450
value = __noise(noise_x, noise_y, 8, 0.9, 2)
value = (1 + value - distance) / 2
elevation_map[y][x] = value
return elevation_map
答案 0 :(得分:3)
作者的意思是,您应根据其与中心fe
的距离以及初始位置来描述点的最终高度d
高度e
,大概是由噪声产生的。
例如,如果您希望地图看起来像碗形,但又要保持原始生成的地形的嘈杂特征,则可以使用以下功能:
def lower(d):
# the lower elevation is 0 no matter how near you are to the centre
return 0
def upper(d):
# the upper elevation varies quadratically with distance from the centre
return d ** 2
def modify(d, initial_e):
return lower(d) + initial_e * (upper(d) - lower(d))
请特别注意以“这是如何工作的”开头的段落,我发现它很有启发性。