Не удалось упростить 3D-модели с помощью vcglib, утверждение «0» не удалось

я использовал vcglib упростить файл 3D-модели. Я использовал git-репозиторий master_a8e87662. Я бегу пример trimesh_clustering упростить трехмерную модель формата файла plf с этим,

 ./trimesh_clustering ./Zeus.ply out.ply -k 1000

И получите эту ошибку,

Input mesh  vn:152059 fn:304114
Clustering to 95472 cells
Grid of 51 x 26 x 72 cells
with cells size of 0.48 x 0.49 x 0.48 units
trimesh_clustering: vcglib/vcg/simplex/vertex/component.h:75: vcg::vertex::EmptyCore<TT>::ColorType& vcg::vertex::EmptyCore<TT>::C() [with TT = MyUsedTypes; vcg::vertex::EmptyCore<TT>::ColorType = vcg::Color4<unsigned char>]: Assertion `0' failed.

Сформируйте проблему, я думаю, это может быть вызвано цветом в файле ply, поэтому я использую файл ply без цвета, как этот,

ply
format ascii 1.0
comment VCGLIB generated
element vertex 152059
property float x
property float y
property float z
element face 304114
property list uchar int vertex_indices
end_header
-6.17266 0.227923 17.2279
-6.21338 0.633413 26.6069
2.48586 -2.95844 27.9508
1.00704 -3.94445 24.3854

и сложить файл таким цветом,

ply
format ascii 1.0
comment VCGLIB generated
element vertex 152059
property float x
property float y
property float z
property int flags
property uchar red
property uchar green
property uchar blue
property uchar alpha
element face 304114
property list uchar int vertex_indices
end_header
-6.17266 0.227923 17.2279 0 192 192 192 255
-6.21338 0.633413 26.6069 0 192 192 192 255
2.48586 -2.95844 27.9508 0 192 192 192 255
1.00704 -3.94445 24.3854 0 192 192 192 255
-0.337305 -4.75996 27.4304 0 192 192 192 255

Но оба безуспешно.

0

Решение

На данный момент я удалил атрибут цвета вершины, чтобы запустить, это потеряет информацию о цвете сетки. Это просто обходной путь, а не идеальный путь.

Ниже приведен процесс, как я могу получить его.

удалить атрибут цвета.

я использую g++ а также gdb отладить проблему,

g++ -std=c++11 -g -I vcglib vcglib/wrap/ply/plylib.cpp trimesh_clustering.cpp -o trimesh_clustering

часть вопроса вывода GDB,

(gdb) s
vcg::tri::AverageColorCell<MyMesh>::AddFaceVertex (this=0x656044, f=..., i=0) at vcglib/vcg/complex/algorithms/clustering.h:110
110   inline void AddFaceVertex(MeshType &/*m*/, FaceType &f, int i)
(gdb) l
105   typedef typename MeshType::VertexType  VertexType;
106
107   typedef BasicGrid<typename MeshType::ScalarType> GridType;
108
109 public:
110   inline void AddFaceVertex(MeshType &/*m*/, FaceType &f, int i)
111   {
112     p+=f.cV(i)->cP();
113     c+=CoordType(f.cV(i)->C()[0],f.cV(i)->C()[1],f.cV(i)->C()[2]);(gdb) p f.cV(0)->C()
trimesh_clustering: vcglib/vcg/simplex/vertex/component.h:75: vcg::vertex::EmptyCore<TT>::ColorType& vcg::vertex::EmptyCore<TT>::C() [with TT = MyUsedTypes; vcg::vertex::EmptyCore<TT>::ColorType = vcg::Color4<unsigned char>]: Assertion `0' failed.

Program received signal SIGABRT, Aborted.
0x00007ffff71a1428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
54  ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
The program being debugged was signaled while in a function called from GDB.
GDB remains in the frame where the signal was received.
To change this behavior use "set unwindonsignal on".
Evaluation of the expression containing the function
(vcg::vertex::EmptyCore<MyUsedTypes>::C()) will be abandoned.
When the function is done executing, GDB will silently stop.

Я нахожу это c+=CoordType(f.cV(i)->C()[0],f.cV(i)->C()[1],f.cV(i)->C()[2]); вызвал проблему. Эта строка кода обрабатывает атрибут цвета вершины в файле. Поэтому я комментирую эту строку, затем компилирую исходный код и запускаю его. Проблема ушла.

0

Другие решения

Вдохновленный этим вопросом Stackoverflow Как сохранить цвет с помощью vcglib? а также этот ответ, Я добавляю атрибут Color4b для вершины заменой

class MyVertex  : public vcg::Vertex< MyUsedTypes, vcg::vertex::Coord3f, vcg::vertex::Normal3f, vcg::vertex::BitFlags  >{};

с

class MyVertex  : public vcg::Vertex< MyUsedTypes, vcg::vertex::Coord3f, vcg::vertex::Normal3f, vcg::vertex::BitFlags, vcg::vertex::Color4b >{};

в trimesh_clustering.cpp файл. Затем скомпилируйте и запустите код, все работает.

0

По вопросам рекламы [email protected]