添加新模型

This commit is contained in:
xsl
2025-09-29 17:48:07 +08:00
parent bf43130c0d
commit 7b41c64a59
2 changed files with 1415 additions and 0 deletions
+81
View File
@@ -0,0 +1,81 @@
import json
def create_triangular_obj_from_json(vertices_file, indices_file, output_file):
# 读取顶点数据
with open(vertices_file, 'r') as f:
vertices = json.load(f)
# 读取线索引数据
with open(indices_file, 'r') as f:
edges = json.load(f)
print(f"读取到 {len(vertices)} 个顶点")
print(f"读取到 {len(edges)} 条边")
# 根据边的连接关系自动识别三角形面
triangles = edges_to_triangles(edges)
print(f"识别到 {len(triangles)} 个三角形面")
# 创建OBJ文件
with open(output_file, 'w') as f:
# 写入文件头
f.write("# OBJ文件 - 三角形面网格\n")
f.write(f"# 顶点数: {len(vertices)}, 面数: {len(triangles)}\n\n")
# 写入顶点信息 (v x y z)
for i, vertex in enumerate(vertices):
#f.write(f"# 顶点 {i}\n")
f.write(f"v {vertex['x']:.6f} {vertex['y']:.6f} {vertex['z']:.6f}\n")
f.write("\n")
# 写入面信息 (f v1 v2 v3)
for triangle in triangles:
# OBJ文件索引从1开始,所以需要+1
#f.write(f"# 面 {triangle[0]} {triangle[1]} {triangle[2]}\n")
f.write(f"f {triangle[0]+1} {triangle[1]+1} {triangle[2]+1}\n")
def edges_to_triangles(edges):
"""
将edges数组转换为triangles数组
每三个元素的第一值组成一个三角形
Args:
edges: 从JSON读取的边数组
Returns:
triangles: 三角形数组,每个元素包含三个点的索引
"""
triangles = []
# 确保边的数量是3的倍数(每个三角形由3条边组成)
if len(edges) % 3 != 0:
print(f"警告: 边的数量({len(edges)})不是3的倍数")
# 每3条边组成一个三角形,取每条边的第一个点
for i in range(0, len(edges), 3):
if i + 2 < len(edges): # 确保有足够的边
triangle = [
edges[i][0], # 第一条边的第一个点
edges[i+1][0], # 第二条边的第一个点
edges[i+2][0] # 第三条边的第一个点
]
triangles.append(triangle)
return triangles
# 使用示例
if __name__ == "__main__":
# 输入文件
vertices_file = "coordinates.json" # 顶点数据文件
indices_file = "point_connection.json" # 线索引数据文件
# 输出文件
output_file = "face_929.obj" # 生成的OBJ文件
# 生成OBJ文件
create_triangular_obj_from_json(vertices_file, indices_file, output_file)
print(f"OBJ文件已生成: {output_file}")