前言
在安装手物交互的代码时报了以下错误:
sp_m.add_mesh_with_normals(m.v.astype(np.float32),m.estimate_vertex_normals().astype(np.float32),m.f,m.vc.astype(np.float32))
TypeError: add_mesh_with_normals(): incompatible function arguments. The following argument types are supported:
1. (self: scenepic._scenepic.Mesh, vertices: numpy.ndarray[numpy.float32[m, 3], flags.c_contiguous], normals: numpy.ndarray[numpy.float32[m, 3], flags.c_contiguous], triangles: numpy.ndarray[numpy.uint32[m, 3], flags.c_contiguous], colors: numpy.ndarray[numpy.float32[m, 3], flags.c_contiguous] = array([], shape=(0, 3), dtype=float32), uvs: numpy.ndarray[numpy.float32[m, 2], flags.c_contiguous] = array([], shape=(0, 2), dtype=float32), transform: numpy.ndarray[numpy.float32[4, 4]] = array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]], dtype=float32), reverse_triangle_order: bool = False, fill_triangles: bool = True, add_wireframe: bool = False) -> None
Invoked with: {
"CameraSpace": false,
"CommandType": "DefineMesh",
"Definition":
{
"IndexBufferType": "UInt16",
"LineBuffer": "eAEDAAAAAAEAAAAAAg==",
"PrimitiveType": "MultiColorMesh",
"TriangleBuffer": "eAEDAAAAAAEAAAAAAw==",
"VertexBuffer": "eAEDAAAAAAEAAAAACQ=="
},
"DoubleSided": false,
"IsBillboard": false,
"IsLabel": false,
"LayerId": "refined_grasp",
"MeshId": "Mesh-0"
}
, array([[0.44010776, 1.102836 , 0.3594451 ],
[0.4411273 , 1.100206 , 0.35626718],
[0.4413275 , 1.1008232 , 0.35573846],
...,
[0.38605005, 1.0967678 , 0.45902026],
[0.38805935, 1.0965946 , 0.45762292],
[0.38996518, 1.0959445 , 0.45622495]], dtype=float32), array([[ 0.6386571 , 0.29692566, -0.70989597],
[ 0.4416749 , 0.724088 , -0.5297357 ],
[ 0.01698366, 0.7839792 , -0.62055475],
...,
[ 0.05409202, 0.99331456, 0.10198127],
[ 0.18289949, 0.9831139 , -0.00590737],
[ 0.3254221 , 0.93929446, -0.10874928]], dtype=float32), array([[ 3, 1, 0],
[ 7, 5, 4],
[ 12, 14, 13],
...,
[ 9944, 10097, 10084],
[ 9940, 10084, 10071],
[10071, 10058, 9932]], dtype=uint32), array([[0., 1., 0.],
[0., 1., 0.],
[0., 1., 0.],
...,
[0., 1., 0.],
[0., 1., 0.],
[0., 1., 0.]], dtype=float32)
这个方法挺冷门的,只有外网上有解决方案,故搬运过来方便后来者。
外网解决连接:https://github.com/microsoft/scenepic/issues/34
解决方法
这个问题是由于pybind11和numpy==1.23版本冲突原因导致的,
故执行以下命令降级numpy即可解决问题:
pip install numpy==1.22