void SurfaceTool::create_from(const Ref<Mesh> &p_existing, int p_surface) { clear(); primitive = p_existing->surface_get_primitive_type(p_surface); _create_list(p_existing, p_surface, &vertex_array, &index_array, format); material = p_existing->surface_get_material(p_surface); }
void SurfaceTool::append_from(const Ref<Mesh>& p_existing, int p_surface,const Transform& p_xform) { if (vertex_array.size()==0) { primitive=p_existing->surface_get_primitive_type(p_surface); format=0; } int nformat; List<Vertex> nvertices; List<int> nindices; _create_list(p_existing,p_surface,&nvertices,&nindices,nformat); format|=nformat; int vfrom = vertex_array.size(); for(List<Vertex>::Element *E=nvertices.front();E;E=E->next()) { Vertex v=E->get(); v.vertex=p_xform.xform(v.vertex); if (nformat&VS::ARRAY_FORMAT_NORMAL) { v.normal=p_xform.basis.xform(v.normal); } if (nformat&VS::ARRAY_FORMAT_TANGENT) { v.tangent=p_xform.basis.xform(v.tangent); v.binormal=p_xform.basis.xform(v.binormal); } vertex_array.push_back(v); } for(List<int>::Element *E=nindices.front();E;E=E->next()) { int dst_index = E->get()+vfrom; //if (dst_index <0 || dst_index>=vertex_array.size()) { // print_line("invalid index!"); //} index_array.push_back(dst_index); } if (index_array.size()%3) print_line("IA not div of 3?"); }