with open(obj_file, "w") as fp: fp.write(f'mtllib mesh_{cas}.mtl \n') print(f'[INFO] writing vertices {v_np.shape}')#写顶点 for v in v_np: fp.write(f'v {v[0]} {v[1]} {v[2]} \n') print(f'[INFO] writing vertices texture coords {vt_np.shape}')#写顶点的贴图坐标 for v in vt_np: fp.write(f'vt {v[0]} {1 - v[1]} \n') print(f'[INFO] writing vertices normal coords {vn_np.shape}') # 写顶点的法向量坐标 for v in vn_np: fp.write(f'vn {v[0]} {v[1]} {v[2]} \n')我这段代码输出后的结果vn在vt前面,这是为什么
时间: 2024-04-18 10:31:58 浏览: 80
obj.rar_obj_obj C++_obj 加载_obj文件_site:www.pudn.com
5星 · 资源好评率100%
根据你提供的代码,可以看到在写入文件时,先写入了顶点坐标(v),然后是顶点的贴图坐标(vt),最后是顶点的法向量坐标(vn)。因此,vn在vt前面是由于代码中的写入顺序决定的。
在3D图形中,通常先定义物体的顶点坐标,然后是贴图坐标(用于纹理映射),最后是法向量坐标(用于光照计算)。这样的顺序可以确保正确地渲染物体并应用纹理。
所以,根据你的代码逻辑和写入顺序,在输出结果中vn会在vt前面。
阅读全文