У меня есть функция, которая изменяет прозрачность всех сетей (кроме одного указанного) в загруженном объекте .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
Сделайте тени объекта исчезнуть, когда прозрачность изменяется в Three.js ⇐ Javascript
Форум по Javascript
1751884536
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;
}
});
},
};
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79692711/make-shadows-of-an-object-fade-as-the-transparency-changes-in-three-js[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия