问题描述
更新(2021-06-03):澄清我的问题,因为到目前为止还没有回复
我想计算两个 3D 网格的差异(布尔对称差异,XOR),并在第二步中将确定的“增量网格”保存为 OBJ 格式的文件。
是否有 JavaScript 实现来计算布尔对称差异?
为此,我已经在 JavaScript 中实现了一个代码,该代码读取两个 OBJ 文件并将它们传输到数组中。每个数组都包含顶点,顶点的索引,用于描述面等。
结果:(Shape_1 和 Shape_2 是输入网格(模型 A 和 B),Shape_3 是要计算的所需输出网格)
Shape_1_Vertices = {
"array_3D_Mesh_1": [
{
"0": {
"X": -25,"Y": -15,"Z": 0
}
},{
"1": {
"X": -25,"Z": 100
}
},{
"2": {
"X": -25,"Y": 15,{
"3": {
"X": -25,{
"4": {
"X": 25,{
"5": {
"X": 25,{
"6": {
"X": 25,{
"7": {
"X": 25,"Z": 100
}
}
]
}
Shape_1_Faces = {
"array_FaceIndices_Mesh_1": [
{
"face0": {
"1": 2,"2": 0,"3": 3
}
},{
"face1": {
"1": 3,"3": 1
}
},{
"face2": {
"1": 6,"2": 2,"3": 7
}
},{
"face3": {
"1": 7,{
"face4": {
"1": 4,"2": 6,"3": 5
}
},{
"face5": {
"1": 5,{
"face6": {
"1": 0,"2": 4,{
"face7": {
"1": 1,{
"face8": {
"1": 1,"2": 5,{
"face9": {
"1": 3,{
"face10": {
"1": 4,"3": 6
}
},{
"face11": {
"1": 6,"3": 2
}
}
]
}
Shape_2_Vertices = {
"array_3D_Mesh_2": [
{
"0": {
"X": -20,"Y": -40,{
"1": {
"X": -20,"Z": 40
}
},{
"2": {
"X": -20,"Y": 40,{
"3": {
"X": -20,{
"4": {
"X": 20,{
"5": {
"X": 20,{
"6": {
"X": 20,{
"7": {
"X": 20,"Z": 40
}
}
]
}
Shape_2_Faces = {
"array_FaceIndices_Mesh_2": [
{
"face0": {
"1": 0,{
"face1": {
"1": 1,{
"face2": {
"1": 2,{
"face3": {
"1": 3,{
"face4": {
"1": 6,{
"face5": {
"1": 7,{
"face6": {
"1": 4,{
"face7": {
"1": 5,{
"face8": {
"1": 7,"2": 3,{
"face9": {
"1": 5,"3": 2
}
}
]
}
Shape_4_Vertices = {
"array_3D_Mesh_4": [
{
"0": {
"X": -25,{
"4": {
"X": -20,{
"5": {
"X": -20,{
"6": {
"X": -20,{
"7": {
"X": -20,{
"8": {
"X": -20,{
"9": {
"X": -20,{
"10": {
"X": -20,{
"11": {
"X": -20,{
"12": {
"X": 20,{
"13": {
"X": 20,{
"14": {
"X": 20,{
"15": {
"X": 20,{
"16": {
"X": 20,{
"17": {
"X": 20,{
"18": {
"X": 20,{
"19": {
"X": 20,{
"20": {
"X": 25,{
"21": {
"X": 25,{
"22": {
"X": 25,{
"23": {
"X": 25,"Z": 100
}
}
]
}
Shape_4_Faces = {
"array_FaceIndices_Mesh_4": [
{
"face0": {
"1": 9,"2": 7,"3": 8
}
},{
"face1": {
"1": 8,{
"face2": {
"1": 16,"2": 14,"3": 17
}
},{
"face3": {
"1": 17,"3": 15
}
},{
"face4": {
"1": 9,"2": 17,{
"face6": {
"1": 8,"2": 16,"3": 9
}
},{
"face7": {
"1": 9,"2": 15,{
"face9": {
"1": 6,"3": 14
}
},{
"face10": {
"1": 16,"2": 22,{
"face11": {
"1": 14,"3": 20
}
},{
"face12": {
"1": 16,"2": 8,"3": 18
}
},{
"face13": {
"1": 18,"3": 10
}
},{
"face14": {
"1": 6,{
"face15": {
"1": 8,"3": 2
}
},{
"face16": {
"1": 6,"3": 4
}
},{
"face17": {
"1": 4,"3": 12
}
},{
"face18": {
"1": 6,{
"face19": {
"1": 7,{
"face20": {
"1": 15,"3": 13
}
},{
"face21": {
"1": 13,{
"face22": {
"1": 9,"3": 11
}
},{
"face23": {
"1": 11,"3": 19
}
},{
"face24": {
"1": 15,"2": 13,{
"face25": {
"1": 14,{
"face26": {
"1": 16,"2": 18,{
"face27": {
"1": 17,{
"face28": {
"1": 4,"2": 12,{
"face29": {
"1": 5,{
"face30": {
"1": 9,"2": 11,{
"face31": {
"1": 8,{
"face32": {
"1": 18,"2": 10,{
"face33": {
"1": 19,{
"face34": {
"1": 6,"3": 0
}
},{
"face35": {
"1": 0,{
"face36": {
"1": 1,{
"face37": {
"1": 1,"3": 21
}
},{
"face38": {
"1": 21,{
"face39": {
"1": 20,{
"face40": {
"1": 2,{
"face41": {
"1": 3,{
"face42": {
"1": 8,{
"face43": {
"1": 9,{
"face44": {
"1": 9,"3": 23
}
},{
"face45": {
"1": 9,"2": 23,{
"face46": {
"1": 17,"3": 22
}
},{
"face47": {
"1": 17,"3": 16
}
},{
"face48": {
"1": 20,{
"face49": {
"1": 21,{
"face50": {
"1": 1,"2": 21,{
"face51": {
"1": 3,"3": 23
}
}
]
}
为了澄清我的想法,我附上了一张图片。
- 显示要比较的初始主体,它们以 OBJ 格式单独提供
- 显示两个物体的叠加位置。 (定位会在导入过程中根据需要自动更正,因此我不必担心)。
- 显示所需的“增量网格”,我想将其计算并输出为 OBJ 格式的文件。 (虚线框中的主体显示了交叉点,最后必须将其剪掉,但不感兴趣)。
如果你想用布尔运算来实现我的意图,你就必须执行布尔对称差或 XOR(异或)。
我附上了三个文件,你可以找到我想用算法计算的两个输入网格和所需的输出。
Shape_1_Input_Model_A Shape_2_Input_Model_B Shape_4_Desired_Output http://www.filedropper.com/shape4
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)