Сделайте тени объекта исчезнуть, когда прозрачность изменяется в Three.jsJavascript

Форум по Javascript
Ответить
Anonymous
 Сделайте тени объекта исчезнуть, когда прозрачность изменяется в Three.js

Сообщение Anonymous »

У меня есть функция, которая изменяет прозрачность всех сетей (кроме одного указанного) в загруженном объекте .glb с использованием Three.js; в соответствии с положением мышиного свитка. Все работает хорошо, за исключением того, что тени, которые актеры объекта остаются видимыми. Таким образом, объект хорошо угасает, чтобы невидим и обратно, но тень, которую он бросает на объект под ним, остается видимой. Так что это выглядит немного странно. Кто -нибудь может предложить какие -либо идеи по этому поводу? Я немного озадачен, так как вы, похоже, не сможете получить доступ к тени, кроме как сделать ее правдой или ложным, и я довольно новичок в Three.js < /p>
function lerp(x, y, a) {
return (1 - a) * x + a * y;
}

function scalePercent(start, end, scrollPosY) {
return (scrollPosY - start) / (end - start);
}

export function lerpChangeAllTransparency(name, el, startPer, endPer) {
return {
frame: name, //Keyfram name that the animation plays in
command: el.command, //Animation type
start: startPer, //Scroll percent animation starts
end: endPer, //Scroll percent the animation stops
target: el.target, //Target to be made transparent/not
alphaFrom: el.alphaFrom, //Start transparentcy
alphaTo: el.alphaTo, //End transparency

//Function called from update when animation is playing
func: (loadedObject, scrollPercent, target, from, to) => {
const percent = scalePercent(startPer, endPer, scrollPercent);
const currentAlpha = lerp(from, to, percent);
const targetArray = target.split(',');

loadedObject.traverse((child) => {
if (child.isMesh && child.material) {
// Skip target items that should remain unaffected
if (targetArray.includes(child.name)) return;

// Clone material only once and enable transparency
if (!child.userData.hasTransparentMaterial) {
const cloned = child.material.clone();
cloned.transparent = true;
child.material = cloned;
child.userData.hasTransparentMaterial = true;
}

// Apply lerped opacity
child.material.opacity = currentAlpha;
}
});
},
};
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... n-three-js
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»