X3DDocument x3d_doc ("/this/models/workspace.x3d", obj_reg);
vector<X3DTransform> transforms = x3d_doc.GetTransforms ();
const int NUM_OF_OBJS = transforms.size ();
cout << "num of trans = " << NUM_OF_OBJS << endl;
csRefArray <iMeshFactoryWrapper> x3d_objs_fact (NUM_OF_OBJS);
csRefArray <iGeneralFactoryState> x3d_objs_fact_states (NUM_OF_OBJS);
for (int i = 0; i < NUM_OF_OBJS; i++) {
csRef<iMeshFactoryWrapper> fw_tmp;
csRef<iGeneralFactoryState> fws_tmp;
fw_tmp = engine->CreateMeshFactory ("crystalspace.mesh.object.genmesh",
"one_of_obj_facts");
x3d_objs_fact[i] = fw_tmp;
fws_tmp = scfQueryInterface<iGeneralFactoryState> (
x3d_objs_fact[i]->GetMeshObjectFactory ());
x3d_objs_fact_states[i] = fws_tmp;
x3d_objs_fact_states[i]->SetLighting (false);
x3d_objs_fact_states[i]->SetManualColors (false);
// Add vetices and triangles
vector<csVector3> vertices = transforms[i].GetVertices ();
vector<csTriangle> tris = transforms[i].GetTris ();
for (int j = 0; j < vertices.size (); j++) {
x3d_objs_fact_states[i]->AddVertex (
csVector3 (vertices[j].x, vertices[j].y, vertices[j].z),
csVector2 (0, 1), csVector3 (1, 1, 1), csColor4 (1, 1, 1, 1)
);
}
for (int j = 0; j < tris.size (); j++) {
x3d_objs_fact_states[i]->AddTriangle (
csTriangle (tris[j].a, tris[j].b, tris[j].c)
);
}
x3d_objs_fact_states[i]->CalculateNormals ();
csVector3 translation = transforms[i].GetTranslation ();
csRef<iMeshWrapper> obj = engine->CreateMeshWrapper (x3d_objs_fact[i],
"obj", room, csVector3 (0 + translation.x, 20 + translation.y,
0 + translation.z));
csRef<iGeneralMeshState> obj_state = scfQueryInterface<iGeneralMeshState> ( obj->GetMeshObject ());
obj_state->SetMaterialWrapper (null_mw);
csRandomGen rnd;
cout << "rnd.Get = " << rnd.Get () << endl;
obj_state->SetColor (csColor (rnd.Get (), rnd.Get (), rnd.Get ()));
cout << "IsManualColors = " << obj_state->IsManualColors () << endl;
cout << "IsLighting = " << obj_state->IsLighting () << endl;
}