添加新模型
This commit is contained in:
@@ -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}")
|
||||
Reference in New Issue
Block a user