javascript - ThreeJS 新网格 vs 克隆

标签 javascript jquery three.js geometry

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

例如,我有一个循环创建多次“相同的网格”。 但我也注意到,如果我将网格的不透明度设置为 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/

相关文章:

javascript - 单元测试时刻日期 - 内存地址问题?

javascript - 使用 javascript (jquery) 在 django 中重定向表单提交

JavaScript:将延迟添加到 jquery ajax 重试

jquery - 使用 JQuery 检索 JSON 数据后 Html 表单元素消失

javascript - 移动(平移)模型后绕模型中心旋转

javascript - Threejs,了解Raycaster相交的对象坐标

javascript - 从另一个脚本调用函数?

javascript - Reflect.getOwnMetadata 不是最新 Aurelia 的 karma 函数

jquery - 生成的 JsonResult 中的属性名称大小写不一致

javascript - 在 javascript 中围绕 3D 轴旋转表面