mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
fix crash, mesher
This commit is contained in:
parent
66483c0c99
commit
6ef748f7ab
@ -160,7 +160,9 @@ unify_attributes(EggPrimitive::Shading shading) {
|
|||||||
vertex->copy_color(*this);
|
vertex->copy_color(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
vertex = vertex->get_pool()->create_unique_vertex(*vertex);
|
EggVertexPool *vertex_pool = orig_vertex->get_pool();
|
||||||
|
nassertv(vertex_pool != (EggVertexPool *)NULL);
|
||||||
|
vertex = vertex_pool->create_unique_vertex(*vertex);
|
||||||
replace(pi, vertex);
|
replace(pi, vertex);
|
||||||
}
|
}
|
||||||
Components::iterator ci;
|
Components::iterator ci;
|
||||||
@ -194,7 +196,9 @@ unify_attributes(EggPrimitive::Shading shading) {
|
|||||||
vertex->clear_normal();
|
vertex->clear_normal();
|
||||||
vertex->clear_color();
|
vertex->clear_color();
|
||||||
|
|
||||||
vertex = vertex->get_pool()->create_unique_vertex(*vertex);
|
EggVertexPool *vertex_pool = orig_vertex->get_pool();
|
||||||
|
nassertv(vertex_pool != (EggVertexPool *)NULL);
|
||||||
|
vertex = vertex_pool->create_unique_vertex(*vertex);
|
||||||
replace(pi, vertex);
|
replace(pi, vertex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -184,6 +184,18 @@ clear() {
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
bool EggMesher::
|
bool EggMesher::
|
||||||
add_polygon(const EggPolygon *egg_poly, EggMesherStrip::MesherOrigin origin) {
|
add_polygon(const EggPolygon *egg_poly, EggMesherStrip::MesherOrigin origin) {
|
||||||
|
if (egg_poly->size() != 3 && egg_poly->size() != 4) {
|
||||||
|
// If we have a higher-order polygon, triangulate it
|
||||||
|
// automatically.
|
||||||
|
PT(EggGroupNode) temp_group = new EggGroupNode;
|
||||||
|
bool result = egg_poly->triangulate_into(temp_group, true);
|
||||||
|
EggGroupNode::iterator ci;
|
||||||
|
for (ci = temp_group->begin(); ci != temp_group->end(); ++ci) {
|
||||||
|
add_polygon(DCAST(EggPolygon, *ci), EggMesherStrip::MO_user);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (_vertex_pool == NULL) {
|
if (_vertex_pool == NULL) {
|
||||||
_vertex_pool = egg_poly->get_pool();
|
_vertex_pool = egg_poly->get_pool();
|
||||||
} else {
|
} else {
|
||||||
@ -215,18 +227,6 @@ add_polygon(const EggPolygon *egg_poly, EggMesherStrip::MesherOrigin origin) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Now identify the common edges.
|
// Now identify the common edges.
|
||||||
|
|
||||||
if (egg_poly->size() != 3 && egg_poly->size() != 4) {
|
|
||||||
// If we have a higher-order polygon, triangulate it
|
|
||||||
// automatically.
|
|
||||||
PT(EggGroupNode) temp_group = new EggGroupNode;
|
|
||||||
egg_poly->triangulate_into(temp_group, true);
|
|
||||||
EggGroupNode::iterator ci;
|
|
||||||
for (ci = temp_group->begin(); ci != temp_group->end(); ++ci) {
|
|
||||||
add_polygon(DCAST(EggPolygon, *ci), EggMesherStrip::MO_user);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
for (i = 0; i < num_verts; i++) {
|
for (i = 0; i < num_verts; i++) {
|
||||||
// Define an inner and outer edge. A polygon shares an edge with a
|
// Define an inner and outer edge. A polygon shares an edge with a
|
||||||
// neighbor only when one of its inner edges matches a neighbor's
|
// neighbor only when one of its inner edges matches a neighbor's
|
||||||
@ -253,7 +253,6 @@ add_polygon(const EggPolygon *egg_poly, EggMesherStrip::MesherOrigin origin) {
|
|||||||
eptrs[i]->insert(&outer_ref);
|
eptrs[i]->insert(&outer_ref);
|
||||||
eptrs[(i+1) % num_verts]->insert(&outer_ref);
|
eptrs[(i+1) % num_verts]->insert(&outer_ref);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user