gpt4 book ai didi

javascript - 在 three.js 中合并几何

转载 作者:行者123 更新时间:2023-12-04 22:06:00 26 4
gpt4 key购买 nike

我有一个包含多个网格的场景,每个网格都有不同的形状和大小。

我已经遍历了每个网格并使用 geometry.merge() 我已经能够从场景中的几何体创建一个新的网格。

我想用 alphaMask mask 整个网格,但是,每个几何体都单独应用了 Material 。

可以在这里看到一个例子 - https://codepen.io/danlong/pen/KXOObr

    function addObjects(scene) {

// merged geomoetry & material
var mergedGeometry = new THREE.Geometry();
var mergedMaterial = new THREE.MeshStandardMaterial({ color: "#444", transparent: true, side: THREE.DoubleSide, alphaTest: 0.5, opacity: 1, roughness: 1 });


// multiple meshes
var geometry = new THREE.IcosahedronGeometry(30, 5);
var material = new THREE.MeshStandardMaterial({ color: "#444" });

var geo1 = new THREE.IcosahedronGeometry(30, 5);
var mesh1 = new THREE.Mesh( geo1, material );
mesh1.position.x = 10;
mesh1.position.y = 10;
mesh1.position.z = 0;

var geo2 = new THREE.IcosahedronGeometry(30, 5);
var mesh2 = new THREE.Mesh( geo2, material );
mesh2.position.x = 20;
mesh2.position.y = 20;
mesh2.position.z = 0;

var geo3 = new THREE.IcosahedronGeometry(30, 5);
var mesh3 = new THREE.Mesh( geo3, material );
mesh3.position.x = 30;
mesh3.position.y = 30;
mesh3.position.z = 0;

// scene.add(mesh1, mesh2, mesh3);
mesh1.updateMatrix();
mergedGeometry.merge(mesh1.geometry, mesh1.matrix);

mesh2.updateMatrix();
mergedGeometry.merge(mesh2.geometry, mesh2.matrix);

mesh3.updateMatrix();
mergedGeometry.merge(mesh3.geometry, mesh3.matrix);

// alpha texture
var image = document.createElement('img');
var alphaMap = new THREE.Texture(image);
image.onload = function() {
alphaMap.needsUpdate = true;
};
image.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGUlEQVQoU2NkYGD4z4AHMP7//x+/gmFhAgCXphP14bko/wAAAABJRU5ErkJggg==';
mergedMaterial.alphaMap = alphaMap;
mergedMaterial.alphaMap.magFilter = THREE.NearestFilter;
mergedMaterial.alphaMap.wrapT = THREE.RepeatWrapping;
mergedMaterial.alphaMap.repeat.y = 1;

// merged geometry with alpha mask
merge1 = new THREE.Mesh(mergedGeometry, mergedMaterial);
merge1.rotation.z = -Math.PI/4;

// merge geometry without alpha mask
var merge2 = new THREE.Mesh(mergedGeometry, material);
merge2.position.x = -100;
merge2.rotation.z = -Math.PI/4;

scene.add(merge1, merge2);
return mesh;
}

左边的网格是我要应用 alphaMask 的合并几何体。右侧的网格是此操作的结果,而不是将贴图作为一个整体应用于网格,每个几何体都应用了贴图。

有没有办法屏蔽整个网格而不是每个几何体?

--三.js r86

编辑:我尝试将剪裁平面应用到我的网格,但这不是我想要的效果。我希望能够在整个网格上应用 alphaMask 并显示它,但是我制作了蒙版图像。类似这种效果 - https://codepen.io/supah/pen/zwJxdb

这与从原始几何体中保留 UV 有什么关系吗?我需要以某种方式改变这些吗?

最佳答案

我认为您真正想要的是一个叠加的 mask 。这可以通过在场景渲染之上渲染应用了 alpha 贴图的单个平面来实现。使用正交相机,并控制某些渲染器设置,例如禁用自动清除颜色。

关于javascript - 在 three.js 中合并几何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46956120/

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