void Mesh::surface_remove(int p_idx) { ERR_FAIL_INDEX(p_idx, surfaces.size() ); VisualServer::get_singleton()->mesh_remove_surface(mesh,p_idx); surfaces.remove(p_idx); triangle_mesh=Ref<TriangleMesh>(); _recompute_aabb(); _change_notify(); }
void ArrayMesh::add_surface(uint32_t p_format, PrimitiveType p_primitive, const PoolVector<uint8_t> &p_array, int p_vertex_count, const PoolVector<uint8_t> &p_index_array, int p_index_count, const AABB &p_aabb, const Vector<PoolVector<uint8_t> > &p_blend_shapes, const Vector<AABB> &p_bone_aabbs) { Surface s; s.aabb = p_aabb; s.is_2d = p_format & ARRAY_FLAG_USE_2D_VERTICES; surfaces.push_back(s); _recompute_aabb(); VisualServer::get_singleton()->mesh_add_surface(mesh, p_format, (VS::PrimitiveType)p_primitive, p_array, p_vertex_count, p_index_array, p_index_count, p_aabb, p_blend_shapes, p_bone_aabbs); }
void ArrayMesh::surface_remove(int p_idx) { ERR_FAIL_INDEX(p_idx, surfaces.size()); VisualServer::get_singleton()->mesh_remove_surface(mesh, p_idx); surfaces.remove(p_idx); _clear_triangle_mesh(); _recompute_aabb(); _change_notify(); emit_changed(); }
void Mesh::add_surface(PrimitiveType p_primitive,const Array& p_arrays,const Array& p_blend_shapes,bool p_alphasort) { ERR_FAIL_COND(p_arrays.size()!=ARRAY_MAX); Surface s; VisualServer::get_singleton()->mesh_add_surface(mesh,(VisualServer::PrimitiveType)p_primitive, p_arrays,p_blend_shapes,p_alphasort); surfaces.push_back(s); /* make aABB? */ { DVector<Vector3> vertices=p_arrays[ARRAY_VERTEX]; int len=vertices.size(); ERR_FAIL_COND(len==0); DVector<Vector3>::Read r=vertices.read(); const Vector3 *vtx=r.ptr(); // check AABB AABB aabb; for (int i=0;i<len;i++) { if (i==0) aabb.pos=vtx[i]; else aabb.expand_to(vtx[i]); } surfaces[surfaces.size()-1].aabb=aabb; surfaces[surfaces.size()-1].alphasort=p_alphasort; _recompute_aabb(); } triangle_mesh=Ref<TriangleMesh>(); _change_notify(); }
void ArrayMesh::add_surface_from_arrays(PrimitiveType p_primitive, const Array &p_arrays, const Array &p_blend_shapes, uint32_t p_flags) { ERR_FAIL_COND(p_arrays.size() != ARRAY_MAX); Surface s; VisualServer::get_singleton()->mesh_add_surface_from_arrays(mesh, (VisualServer::PrimitiveType)p_primitive, p_arrays, p_blend_shapes, p_flags); surfaces.push_back(s); /* make aABB? */ { Variant arr = p_arrays[ARRAY_VERTEX]; PoolVector<Vector3> vertices = arr; int len = vertices.size(); ERR_FAIL_COND(len == 0); PoolVector<Vector3>::Read r = vertices.read(); const Vector3 *vtx = r.ptr(); // check AABB AABB aabb; for (int i = 0; i < len; i++) { if (i == 0) aabb.position = vtx[i]; else aabb.expand_to(vtx[i]); } surfaces[surfaces.size() - 1].aabb = aabb; surfaces[surfaces.size() - 1].is_2d = arr.get_type() == Variant::POOL_VECTOR2_ARRAY; _recompute_aabb(); } _clear_triangle_mesh(); _change_notify(); emit_changed(); }