This commit is contained in:
enn0x 2014-02-23 09:49:12 +00:00
parent b0c508827b
commit 3ac369a3b0
2 changed files with 20 additions and 10 deletions

View File

@ -220,9 +220,11 @@ make_geom(BulletSoftBodyNode *node, const GeomVertexFormat *format, bool two_sid
if (two_sided) {
for (int j=0; j<nodes.size(); ++j) {
btVector3 &v = nodes[j].m_x;
btVector3 v = nodes[j].m_x;
btVector3 &n = nodes[j].m_n;
v = trans.invXform(v);
vwriter.add_data3((PN_stdfloat)v.getX(), (PN_stdfloat)v.getY(), (PN_stdfloat)v.getZ());
nwriter.add_data3((PN_stdfloat)n.getX(), (PN_stdfloat)n.getY(), (PN_stdfloat)n.getZ());
fwriter.add_data1i(1);
@ -231,23 +233,29 @@ make_geom(BulletSoftBodyNode *node, const GeomVertexFormat *format, bool two_sid
// Indices
btSoftBody::Node *node0 = &nodes[0];
int i0, i1, i2;
if (use_faces) {
btSoftBody::tFaceArray &faces(body->m_faces);
prim = new GeomTriangles(Geom::UH_stream);
prim->set_shade_model(Geom::SM_uniform);
for (int j=0; j<faces.size(); ++j) {
prim->add_vertices(int(faces[j].m_n[0] - node0),
int(faces[j].m_n[1] - node0),
int(faces[j].m_n[2] - node0));
i0 = int(faces[j].m_n[0] - node0);
i1 = int(faces[j].m_n[1] - node0);
i2 = int(faces[j].m_n[2] - node0);
prim->add_vertices(i0, i1, i2);
prim->close_primitive();
if (two_sided) {
prim->add_vertices(nodes.size() + int(faces[j].m_n[0] - node0),
nodes.size() + int(faces[j].m_n[2] - node0),
nodes.size() + int(faces[j].m_n[1] - node0));
i0 = nodes.size() + int(faces[j].m_n[0] - node0);
i1 = nodes.size() + int(faces[j].m_n[2] - node0);
i2 = nodes.size() + int(faces[j].m_n[1] - node0);
prim->add_vertices(i0, i1, i2);
prim->close_primitive();
}
}
@ -259,8 +267,10 @@ make_geom(BulletSoftBodyNode *node, const GeomVertexFormat *format, bool two_sid
prim->set_shade_model(Geom::SM_uniform);
for (int j=0; j<links.size(); ++j) {
prim->add_vertices(int(links[j].m_n[0] - node0),
int(links[j].m_n[1] - node0));
i0 = int(links[j].m_n[0] - node0);
i1 = int(links[j].m_n[1] - node0);
prim->add_vertices(i0, i1);
prim->close_primitive();
}
}

View File

@ -29,7 +29,7 @@ PUBLISHED:
INLINE ~BulletSoftBodyConfig();
enum CollisionFlag {
CF_rigid__vs_soft_mask = 0x000f, // RVSmask: Rigid versus soft mask
CF_rigid_vs_soft_mask = 0x000f, // RVSmask: Rigid versus soft mask
CF_sdf_rigid_soft = 0x0001, // SDF_RS: SDF based rigid vs soft
CF_cluster_rigid_soft = 0x0002, // CL_RS: Cluster vs convex rigid vs soft
CF_soft_vs_soft_mask = 0x0030, // SVSmask: Soft versus soft mask