From 1edd26540b50ea2f0b5a3e1aefa96166306db8f0 Mon Sep 17 00:00:00 2001 From: Gyedo Jeon Date: Fri, 11 Jun 2010 00:59:15 +0000 Subject: [PATCH] Made vertices transformed properly --- pandatool/src/bam/bamToEgg.cxx | 10 ++++++++-- pandatool/src/mayaegg/mayaEggLoader.cxx | 7 +++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/pandatool/src/bam/bamToEgg.cxx b/pandatool/src/bam/bamToEgg.cxx index 82a0f45921..1248b30ae0 100644 --- a/pandatool/src/bam/bamToEgg.cxx +++ b/pandatool/src/bam/bamToEgg.cxx @@ -484,6 +484,12 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path, egg_group->set_cs_type(EggGroup::CST_polyset); egg_group->set_collide_flags(EggGroup::CF_descend); + NodePath np = node_path.get_node_path(); + CPT(TransformState) net_transform = np.get_net_transform(); + LMatrix4f net_mat = net_transform->get_mat(); + LMatrix4f inv = LCAST(float, egg_parent->get_vertex_frame_inv()); + net_mat = net_mat * inv; + int num_solids = node->get_num_solids(); if (num_solids > 0) { @@ -502,8 +508,8 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path, int num_points = poly->get_num_points(); for (int j = 0; j < num_points; j++) { EggVertex egg_vert; - egg_vert.set_pos(LCAST(double, poly->get_point(j))); - egg_vert.set_normal(LCAST(double, poly->get_normal())); + egg_vert.set_pos(LCAST(double, poly->get_point(j) * net_mat)); + egg_vert.set_normal(LCAST(double, poly->get_normal() * net_mat)); EggVertex *new_egg_vert = cvpool->create_unique_vertex(egg_vert); egg_poly->add_vertex(new_egg_vert); diff --git a/pandatool/src/mayaegg/mayaEggLoader.cxx b/pandatool/src/mayaegg/mayaEggLoader.cxx index 7ad48a7238..7d1de9e5fa 100755 --- a/pandatool/src/mayaegg/mayaEggLoader.cxx +++ b/pandatool/src/mayaegg/mayaEggLoader.cxx @@ -748,9 +748,12 @@ int MayaEggGeom::GetVert(EggVertex *vert, EggGroup *context) { MayaEggVertex vtx; vtx._sumWeights = 0.0; - vtx._pos = vert->get_pos3(); + + const LMatrix4d &xform = context->get_vertex_to_node(); + + vtx._pos = vert->get_pos3() * xform; if (vert->has_normal()) { - vtx._normal = vert->get_normal(); + vtx._normal = vert->get_normal() * xform; } if (vert->has_uv()) { vtx._uv = vert->get_uv();