gpt4 book ai didi

javascript - ThreeJS 新网格 vs 克隆

转载 作者:行者123 更新时间:2023-11-30 14:50:00 25 4
gpt4 key购买 nike

我想知道创建新网格或克隆网格哪种样式更有效。

例如,我有一个循环创建多次“相同的网格”。但我也注意到,如果我将网格的不透明度设置为 0,并且我想稍后将其更改为可见,这将影响所有具有相同 Material 的网格。难道是因为他们有相同的uuid。

var material = new THREE.MeshPhongMaterial({
color: 0xff0000,
transparent: true, // Make the material transparent
opacity: 0 // Set material opacity to 0
});

var geometry = new THREE.PlaneGeometry(width, height);

$.each(things, function(i, something) {
var mesh = new THREE.Mesh(geometry, material);
// Mesh positioning
scene.add(mesh);
});

因此,如果我多次使用相同的材​​质和几何体并使用光线转换器更改网格不透明度,它会更改所有网格的不透明度。

我应该在每个循环中使用克隆还是一次又一次地创建网格的 Material 和几何形状?

$.each(things, function(i, something) {
var mesh = new THREE.Mesh(geometry.clone(), material.clone());
// Mesh positioning
scene.add(mesh);
});

$.each(things, function(i, something) {
var material = new THREE.MeshPhongMaterial({
color: 0xff0000,
transparent: true, // Make the material transparent
opacity: 0 // Set material opacity to 0
});

var geometry = new THREE.PlaneGeometry(width, height);
var mesh = new THREE.Mesh(geometry, material);
// Mesh postioning here
scene.add(mesh);
});

最佳答案

在您的第一种方法中,所有网格都建立在相同的几何和 Material (正如您所说,它们也具有相同的 uuid)。所以当你改变 Material 的属性时,它会影响所有使用相同 Material 的网格。但是当您克隆 Material 时,它会创建一个具有相同属性的新 Material ,并且原始 Material 的更改也不会影响克隆的 Material 。所以这个方法很可能对你有用,

$.each(things, function(i, something) {
var mesh = new THREE.Mesh(geometry, material.clone());
// rest of your code...
});

我尝试了以下方法,它对我有用,

var material = new THREE.MeshPhongMaterial({
color: 0xff0000,
transparent: true,
opacity: 0.5
});
var geometry = new THREE.PlaneGeometry(100, 100, 1, 1);
for( var i = 0; i < 5; i++ ){

scene.add( new THREE.Mesh( geometry, material.clone() ) );

}

关于javascript - ThreeJS 新网格 vs 克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48295573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com