Exemple #1
0
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);
}
Exemple #2
0
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?");

}