【发布时间】:2026-01-31 12:15:01
【问题描述】:
我希望这些点能够平稳地反应,所以我想知道是否有办法提高这段代码的性能。
我正在尝试创建一个等距的点网格,既可以用作半色调效果(我已经达到),又可以用作对鼠标位置(重力/排斥)做出反应的粒子系统。
因为它应该表现得像半色调图像,所以点的密度应该保持相当高。 任何想法将不胜感激
let img;
let smallPoint, largePoint;
let res;
let manualBrightness = 6;
let lineLength = 1;
let row;
let gfg;
function preload() {
img = loadImage('https://i.imgur.com/Jvh1OQm.jpg');
}
function setup() {
createCanvas(400, 400);
smallPoint = 4;
largePoint = 40;
imageMode(CENTER);
noStroke();
background(0);
img.loadPixels();
res = 5;
row = 0;
gfg = new Array(floor((img.height)/res));
for (var i = 0; i < gfg.length; i++) {
gfg[i] = new Array(floor((img.height)/res));
}
var h = 0;
for (var i = 0; i < gfg.length; i++) {
row++;
let localI=i*res;
for (var j = 0; j < gfg[0].length; j++) {
let localJ = j*res*2*Math.sqrt(3);
// localJ=localJ+res*2*Math.sqrt(3);
gfg[i][j] = brightness(img.get(localJ, localI));
// console.log(gfg[i][j]);
}
}
}
function draw() {
background(0);
row = 0;
for (let i = 0; i<gfg.length; i++){
let localI = i*res;
row++;
for (let j = 0; j<gfg[i].length; j++){
let localJ = j*res*2*Math.sqrt(3);
if(row%2==0){
localJ=floor(localJ+res*Math.sqrt(3));
}
let pix = gfg[i][j];
// B = brightness(pix);
B=pix;
B=(1/300)*B*manualBrightness;
fill(255);
stroke(255);
strokeWeight(0);
ellipse(localJ, localI,2,2);
fill(255);
let ellipseSize =B*res*(mouseX/width);
// if(i%8==0 && (j+4)%8==0){
// ellipseSize = 4;
// }
ellipse(localJ, localI, ellipseSize,ellipseSize);
}
}
}
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.2.0/p5.js" integrity="sha512-cuCpFhuSthtmbmQ5JjvU7msRYynRI67jVHsQhTP8RY+H4BC9qa9kQJeHTomV9/QnOWJbDpLFKdbIHtqTomJJug==" crossorigin="anonymous"></script>
</head>
<body>
<main>
</main>
</body>
【问题讨论】:
标签: performance p5.js particles