颜色不适用于具有噪音功能的 p5.js 示例
Color don't apply on a p5.js example with noise function
我想实现《代码的本质》一书的 p5.js 示例。
目的是用 Perlin 噪声函数随机选择亮度的像素填充 canvas。我受到了 Processing 的 Java 等价物的启发,但我得到的并不是我所期望的,它几乎是黑色的 canvas。
这是我的代码:
var increment = 0.02
function setup() {
createCanvas(100, 100)
noLoop()
}
function draw() {
background(0)
loadPixels();
var xoff = 0
for (var x = 0; x < width; x++) {
xoff += increment
var yoff = 0
for (var y = 0; y < height; y++) {
yoff += increment
var bright = floor(noise(xoff, yoff) * 255)
console.log('bright', bright, '(', x, ', ', y, ')')
pixels[x+y*width] = color(bright);
}
}
updatePixels();
}
我的 console.log 显示了一个似乎连贯的明亮值。
你在我的代码中看到任何问题吗?
像素数组是扁平的,每 4 个元素创建一个像素。
第一个像素实际上是:
pixels[0] // red value of pixel, between 0-255
pixels[1] // green value of pixel, between 0-255
pixels[2] // blue value of pixel, between 0-255
pixels[3] // alpha value of pixel, between 0-255
但是,在查看 p5.js 文档时,我注意到有一个 helper method set
which abstracts the setting of a pixel's color. To use the set
method all we need is a pixel's coordinates as well as a color
instance。改变颜色模式还可以让我们轻松创建具有给定亮度的颜色对象。
注意:我在 p5.js 中包含了一个 CDN link,因此您可以 运行 这个例子。
const increment = 0.02;
function setup() {
createCanvas(200, 200);
noLoop();
}
function draw() {
background(0);
colorMode(HSB, 255);
let xOff = 0;
for (let x = 0; x < width; x++) {
let yOff = 0;
xOff += increment;
for (let y = 0; y < height; y++) {
yOff += increment
const n = noise(xOff, yOff); // noise
const h = 255; // hue
const s = 126; // saturation
const b = map(n, 0, 1, 0, 255); // brightness
const c = color(h, s, b); // color instance
set(x, y, c); // set pixel
}
}
updatePixels();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.8/p5.min.js"></script>
我想实现《代码的本质》一书的 p5.js 示例。
目的是用 Perlin 噪声函数随机选择亮度的像素填充 canvas。我受到了 Processing 的 Java 等价物的启发,但我得到的并不是我所期望的,它几乎是黑色的 canvas。
这是我的代码:
var increment = 0.02
function setup() {
createCanvas(100, 100)
noLoop()
}
function draw() {
background(0)
loadPixels();
var xoff = 0
for (var x = 0; x < width; x++) {
xoff += increment
var yoff = 0
for (var y = 0; y < height; y++) {
yoff += increment
var bright = floor(noise(xoff, yoff) * 255)
console.log('bright', bright, '(', x, ', ', y, ')')
pixels[x+y*width] = color(bright);
}
}
updatePixels();
}
我的 console.log 显示了一个似乎连贯的明亮值。 你在我的代码中看到任何问题吗?
像素数组是扁平的,每 4 个元素创建一个像素。
第一个像素实际上是:
pixels[0] // red value of pixel, between 0-255
pixels[1] // green value of pixel, between 0-255
pixels[2] // blue value of pixel, between 0-255
pixels[3] // alpha value of pixel, between 0-255
但是,在查看 p5.js 文档时,我注意到有一个 helper method set
which abstracts the setting of a pixel's color. To use the set
method all we need is a pixel's coordinates as well as a color
instance。改变颜色模式还可以让我们轻松创建具有给定亮度的颜色对象。
注意:我在 p5.js 中包含了一个 CDN link,因此您可以 运行 这个例子。
const increment = 0.02;
function setup() {
createCanvas(200, 200);
noLoop();
}
function draw() {
background(0);
colorMode(HSB, 255);
let xOff = 0;
for (let x = 0; x < width; x++) {
let yOff = 0;
xOff += increment;
for (let y = 0; y < height; y++) {
yOff += increment
const n = noise(xOff, yOff); // noise
const h = 255; // hue
const s = 126; // saturation
const b = map(n, 0, 1, 0, 255); // brightness
const c = color(h, s, b); // color instance
set(x, y, c); // set pixel
}
}
updatePixels();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.8/p5.min.js"></script>