renderer.setSize(window.innerWidth, window.innerHeight);document.body.appendChild(renderer.domElement);
side: THREE.DoubleSide, vertexColors:
true
plane.rotation.x = Math.PI / 2;
scene.add(plane);
wall.position.set(4, 2.5, 0);
let signalStrength = Math.max(0, 1 - distance / 10);
const raycaster =
new
THREE.Raycaster();
raycaster.origin.set(signalSource.x, signalSource.y, signalSource.z);
raycaster.direction.set(x - signalSource.x, 0, z - signalSource.z);
const intersects = raycaster.intersectObject(wall);
if
(intersects.length > 0) {
signalStrength *= 0.3;
}
return
signalStrength;
}
const signalStrength = calculateSignalStrength(x, z,
new
THREE.Vector3(0, 0, 0));
const color =
new
THREE.Color();
color.setHSL((1 - signalStrength) / 2, 1, 0.5);
geometry.attributes.color.array[i] = color.r;
geometry.attributes.color.array[i + 1] = color.g;
geometry.attributes.color.array[i + 2] = color.b;
}
geometry.attributes.color.needsUpdate =
true
;
}
renderer.render(scene, camera);
}
camera.position.z = 5;animate();