У меня есть лента, которая отображает несколько миниатюр. Чтобы дать задний фон, миниатюры будут нарисованы на холсте, а затем добавлены в текстуру.SpotLight не работает в ThreeJS
var texture = new THREE.Texture(textureCanvas);
Сетка создается следующим образом
loader.load('mesh_blender.js', function(geom) {
var mesh = new THREE.Mesh(geom, new THREE.MeshLambertMaterial({
color: 0xffffffff,
opacity: 0.7,
overdraw: 0.21,
side: THREE.DoubleSide,
transparent: true,
//shading: THREE.SmoothShading,
map: texture
}));
Все, что до здесь хорошо. Лента создается следующим образом
У меня нет никаких жалоб с этим. Но мне нужен этот дополнительный эффект, который вы видите на изображении ниже. Как можно видеть, эскиз, находящийся в центре (фокус), должен иметь более темный эффект, чтобы показать, что он подсвечивается/выбирается. Все остальные миниатюры имеют прозрачный эффект, изображающий, что они не могут быть выбраны.
Я пытаюсь обернуть мою голову вокруг этого, используя Свет в Threejs, но не очень успешно. Я думал об использовании AmbientLight, чтобы пролить свет на всю ленту, а затем на SpotLight только на центральном изображении (возможно, с более темным цветом) для достижения желаемого эффекта. Но это не сработало. У меня что-то вроде этого
Но центр сфокусированное изображение не имеет никакого эффекта. Как вы можете видеть на изображении, я использовал помощника, чтобы показать направление «Свет», но я не вижу на нем какого-либо света. Это код, который я использую для разработки SpotLight
var spotLight = new THREE.SpotLight(0xffeedd);
spotLight.position.set(0, -50, 50);
spotLight.castShadow = true;
//spotLight.penumbra = 0.2;
spotLight.decay = 2;
spotLight.distance = 300;
spotLight.angle = 0.5;
var helper = new THREE.SpotLightHelper(spotLight, 2.5);
scene.add(helper);
scene.add(spotLight);
Я очень новичок в трехмерной и трехмерной графике. Любая помощь будет оценена. Спасибо. Я открыт для любого другого предложения, если для достижения конечного результата не использовать огни.
Альтернативы Approch к ответу уже дали, может быть, чтобы создать свой собственный ShaderMaterial – 2pha