Skinned.h

Go to the documentation of this file.
00001 /*
00002 ** Skinned.h
00003 ** 
00004 ** Made by damien
00005 ** Login   <damien@ortie>
00006 ** 
00007 ** Started on  Wed Feb  6 10:39:23 2008 damien
00008 ** Last update Wed Feb  6 10:39:23 2008 damien
00009 */
00010 
00011 #ifndef         SKINNED_H_
00012 # define        SKINNED_H_
00013 
00014 #define WEIGHT_EXPONENT 4
00015 
00016 
00017 #include <stdlib.h>
00018 #include <iostream>
00019 #include <cmath>
00020 #include <string>
00021 #include <errno.h>
00022 #include <stdio.h>
00023 using namespace std;
00024 
00025 
00026 #include <Mesh_object.h>
00027 #include <Skeleton.h>
00028 #include <int_vector.h>
00029 
00030 class Skinned
00031 {
00032  public:
00033 
00034   Skinned();
00035   Skinned(const Skinned&);
00036   ~Skinned();
00037 
00038 
00039 
00040 
00041   Mesh_object *get_mesh();
00042   Mesh_object *get_deformed_mesh();
00043   Skeleton *get_skeleton();
00044   Skeleton *get_deformed_skeleton();
00045   
00046 
00047 
00048   int set_skeleton(Skeleton *);
00049   int set_deformed_skeleton(Skeleton *_skeleton);
00050   int set_mesh(Mesh_object *);
00051   int set_deformed_mesh(Mesh_object *);
00052 
00053 
00054   //APPLY SKINNING
00055   int skinning();
00056 
00057 
00058 
00059 
00060   //weight
00061   int size_weight();
00062   int add_weight(double w);
00063   int set_weight(int k_index, double value);
00064   int set_weight(std::vector <double>& _weight);
00065   double get_weight(int k_index);//direct access from index
00066   double get_weight(int k_vertex,int k_index);//acces from
00067                                               //index_weight
00068   int set_weight(int k_vertex,int k_index_bone,double value);
00069 
00070 
00071   //index weight
00072   int size_index_weight();
00073   int size_index_weight(int k_vertex);
00074   int set_size_index_weight(int size);
00075   int set_size_index_weight(int k_vertex,int size);
00076   int get_size_index_weight(int k_vertex);
00077   int add_index_weight(int k_vertex,int index);
00078   int add_index_weight(int k_vertex,std::vector <int>& index);
00079   int set_index_weight(int k_vertex,int k_index,int _index_weight);
00080   int set_index_weight(std::vector <int_vector>& _index_weight);
00081   int get_index_weight(int k_vertex,int k_index);
00082 
00083   //index joint
00084   int size_index_joint();
00085   int size_index_joint(int k_vertex);
00086   int set_size_index_joint(int size);
00087   int set_size_index_joint(int k_vertex,int size);
00088   int add_index_joint(int k_vertex,int index);
00089   int add_index_joint(int k_vertex,std::vector <int>& index);
00090   int set_index_joint(int k_vertex,int k_index,int _index_joint);
00091   int set_index_joint(std::vector <int_vector>& _index_joint);
00092   int get_index_joint(int k_vertex,int k_index);
00093 
00094 
00095   int fill_vertex_depending_on_bone();
00096   int get_number_of_vertex_depending_on_bone(int k_bone);
00097   int get_index_vertex_depending_on_bone(int k_bone,int k_index);
00098 
00099 
00100 
00101 
00102 
00103 
00104 
00105   int check_integrity_skinning();
00106   double get_min_distance_to_any_bone(int k_vertex);
00107   double get_vertex_to_bone_distance(int k_vertex,int k_bone);
00108 
00109 
00110 
00111   //segmentation
00112   int get_max_weight_influence(int k_vertex,int *k_bone_max,double *weight_max);
00113   
00114 
00115   //weight calculation
00116   int automatic_weight_calculation();
00117   double calculate_weight(int k_vertex,int k_joint);
00118   int normalize_weight();
00119 
00120 
00121 
00122  private:
00123 
00124   Mesh_object *mesh;
00125   Mesh_object *deformed_mesh;
00126 
00127   Skeleton *skeleton;
00128   Skeleton *deformed_skeleton;
00129 
00130   std::vector <double> weight;
00131   std::vector <int_vector> index_weight;
00132   std::vector <int_vector> index_joint;
00133 
00134   std::vector <int_vector> vertex_depending_on_bone;//vertex which
00135                                                     //depends on bone
00136                                                     //k
00137 };
00138 
00139 
00140 #endif    /* !SKINNED_H_ */

Generated on Mon Mar 30 16:55:54 2009 by  doxygen 1.5.6