Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights 1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 2 // See the file tools.license for terms. 3 3 4 #ifndef tools_glprims 4 #ifndef tools_glprims 5 #define tools_glprims 5 #define tools_glprims 6 6 7 //same as OpenGL GL_[POINTS,etc...], but for t 7 //same as OpenGL GL_[POINTS,etc...], but for the case we don't have OpenGL. 8 8 9 #include <cstddef> //size_t 9 #include <cstddef> //size_t 10 10 11 namespace tools { 11 namespace tools { 12 namespace gl { 12 namespace gl { 13 13 14 typedef unsigned char mode_t; 14 typedef unsigned char mode_t; 15 15 16 inline mode_t points() {return 0x0000; 16 inline mode_t points() {return 0x0000;} 17 inline mode_t lines() {return 0x0001; 17 inline mode_t lines() {return 0x0001;} //segments 18 inline mode_t line_loop() {return 0x0002; 18 inline mode_t line_loop() {return 0x0002;} 19 inline mode_t line_strip() {return 0x0003; 19 inline mode_t line_strip() {return 0x0003;} //polyline 20 inline mode_t triangles() {return 0x0004; 20 inline mode_t triangles() {return 0x0004;} 21 inline mode_t triangle_strip() {return 0x0005; 21 inline mode_t triangle_strip() {return 0x0005;} 22 inline mode_t triangle_fan() {return 0x0006; 22 inline mode_t triangle_fan() {return 0x0006;} 23 //inline mode_t quads() {return 0x000 23 //inline mode_t quads() {return 0x0007;} 24 //inline mode_t quad_strip() {return 0x000 24 //inline mode_t quad_strip() {return 0x0008;} 25 //inline mode_t polygon() {return 0x000 25 //inline mode_t polygon() {return 0x0009;} 26 26 27 inline bool is_mode(mode_t a_mode) { 27 inline bool is_mode(mode_t a_mode) { 28 return a_mode<=0x006?true:false; 28 return a_mode<=0x006?true:false; 29 } 29 } 30 30 31 inline bool is_line(mode_t a_mode) { 31 inline bool is_line(mode_t a_mode) { 32 if(a_mode==points()) return true; //0 sz 32 if(a_mode==points()) return true; //0 sz line ! 33 if(a_mode==lines()) return true; 33 if(a_mode==lines()) return true; 34 if(a_mode==line_loop()) return true; 34 if(a_mode==line_loop()) return true; 35 if(a_mode==line_strip()) return true; 35 if(a_mode==line_strip()) return true; 36 return false; 36 return false; 37 } 37 } 38 38 39 inline void cvt_2to3(size_t a_npt,const float* 39 inline void cvt_2to3(size_t a_npt,const float* a_xys,float*& a_xyzs) { 40 const float* vpos = a_xys; 40 const float* vpos = a_xys; 41 float x,y; 41 float x,y; 42 for(size_t i=0;i<a_npt;i++) { 42 for(size_t i=0;i<a_npt;i++) { 43 x = *vpos;vpos++; 43 x = *vpos;vpos++; 44 y = *vpos;vpos++; 44 y = *vpos;vpos++; 45 *a_xyzs = x;a_xyzs++; 45 *a_xyzs = x;a_xyzs++; 46 *a_xyzs = y;a_xyzs++; 46 *a_xyzs = y;a_xyzs++; 47 *a_xyzs = 0;a_xyzs++; 47 *a_xyzs = 0;a_xyzs++; 48 } 48 } 49 } 49 } 50 50 51 51 52 inline void triangle_fan_to_triangles(size_t a 52 inline void triangle_fan_to_triangles(size_t a_npt,const float* a_xyzs,float*& a_pxyzs) { 53 // a_pxyzs = (a_npt-2)*3*3 53 // a_pxyzs = (a_npt-2)*3*3 54 54 55 const float* vpos = a_xyzs; 55 const float* vpos = a_xyzs; 56 56 57 float x1 = *vpos;vpos++; 57 float x1 = *vpos;vpos++; 58 float y1 = *vpos;vpos++; 58 float y1 = *vpos;vpos++; 59 float z1 = *vpos;vpos++; 59 float z1 = *vpos;vpos++; 60 60 61 float x2 = *vpos;vpos++; 61 float x2 = *vpos;vpos++; 62 float y2 = *vpos;vpos++; 62 float y2 = *vpos;vpos++; 63 float z2 = *vpos;vpos++; 63 float z2 = *vpos;vpos++; 64 64 65 float x3,y3,z3; 65 float x3,y3,z3; 66 for(size_t i=2;i<a_npt;i++) { 66 for(size_t i=2;i<a_npt;i++) { 67 x3 = *vpos;vpos++; 67 x3 = *vpos;vpos++; 68 y3 = *vpos;vpos++; 68 y3 = *vpos;vpos++; 69 z3 = *vpos;vpos++; 69 z3 = *vpos;vpos++; 70 *a_pxyzs = x1;a_pxyzs++; 70 *a_pxyzs = x1;a_pxyzs++; 71 *a_pxyzs = y1;a_pxyzs++; 71 *a_pxyzs = y1;a_pxyzs++; 72 *a_pxyzs = z1;a_pxyzs++; 72 *a_pxyzs = z1;a_pxyzs++; 73 73 74 *a_pxyzs = x2;a_pxyzs++; 74 *a_pxyzs = x2;a_pxyzs++; 75 *a_pxyzs = y2;a_pxyzs++; 75 *a_pxyzs = y2;a_pxyzs++; 76 *a_pxyzs = z2;a_pxyzs++; 76 *a_pxyzs = z2;a_pxyzs++; 77 77 78 *a_pxyzs = x3;a_pxyzs++; 78 *a_pxyzs = x3;a_pxyzs++; 79 *a_pxyzs = y3;a_pxyzs++; 79 *a_pxyzs = y3;a_pxyzs++; 80 *a_pxyzs = z3;a_pxyzs++; 80 *a_pxyzs = z3;a_pxyzs++; 81 81 82 x2 = x3; 82 x2 = x3; 83 y2 = y3; 83 y2 = y3; 84 z2 = z3; 84 z2 = z3; 85 } 85 } 86 86 87 } 87 } 88 88 89 inline void triangle_fan_to_triangles_texture( 89 inline void triangle_fan_to_triangles_texture(size_t a_npt,const float* a_xyzs,const float* a_tcs,float*& a_pxyzs,float*& a_ptcs) { 90 // a_pxyzs = (a_npt-2)*3*3 90 // a_pxyzs = (a_npt-2)*3*3 91 91 92 // a_ptcs = (a_npt-2)*3*2 92 // a_ptcs = (a_npt-2)*3*2 93 93 94 const float* vpos = a_xyzs; 94 const float* vpos = a_xyzs; 95 const float* tpos = a_tcs; 95 const float* tpos = a_tcs; 96 96 97 float x1 = *vpos;vpos++; 97 float x1 = *vpos;vpos++; 98 float y1 = *vpos;vpos++; 98 float y1 = *vpos;vpos++; 99 float z1 = *vpos;vpos++; 99 float z1 = *vpos;vpos++; 100 100 101 float tx1 = *tpos;tpos++; 101 float tx1 = *tpos;tpos++; 102 float ty1 = *tpos;tpos++; 102 float ty1 = *tpos;tpos++; 103 103 104 float x2 = *vpos;vpos++; 104 float x2 = *vpos;vpos++; 105 float y2 = *vpos;vpos++; 105 float y2 = *vpos;vpos++; 106 float z2 = *vpos;vpos++; 106 float z2 = *vpos;vpos++; 107 107 108 float tx2 = *tpos;tpos++; 108 float tx2 = *tpos;tpos++; 109 float ty2 = *tpos;tpos++; 109 float ty2 = *tpos;tpos++; 110 110 111 float x3,y3,z3,tx3,ty3; 111 float x3,y3,z3,tx3,ty3; 112 for(size_t i=2;i<a_npt;i++) { 112 for(size_t i=2;i<a_npt;i++) { 113 x3 = *vpos;vpos++; 113 x3 = *vpos;vpos++; 114 y3 = *vpos;vpos++; 114 y3 = *vpos;vpos++; 115 z3 = *vpos;vpos++; 115 z3 = *vpos;vpos++; 116 116 117 tx3 = *tpos;tpos++; 117 tx3 = *tpos;tpos++; 118 ty3 = *tpos;tpos++; 118 ty3 = *tpos;tpos++; 119 119 120 *a_pxyzs = x1;a_pxyzs++; 120 *a_pxyzs = x1;a_pxyzs++; 121 *a_pxyzs = y1;a_pxyzs++; 121 *a_pxyzs = y1;a_pxyzs++; 122 *a_pxyzs = z1;a_pxyzs++; 122 *a_pxyzs = z1;a_pxyzs++; 123 123 124 *a_ptcs = tx1;a_ptcs++; 124 *a_ptcs = tx1;a_ptcs++; 125 *a_ptcs = ty1;a_ptcs++; 125 *a_ptcs = ty1;a_ptcs++; 126 126 127 *a_pxyzs = x2;a_pxyzs++; 127 *a_pxyzs = x2;a_pxyzs++; 128 *a_pxyzs = y2;a_pxyzs++; 128 *a_pxyzs = y2;a_pxyzs++; 129 *a_pxyzs = z2;a_pxyzs++; 129 *a_pxyzs = z2;a_pxyzs++; 130 130 131 *a_ptcs = tx2;a_ptcs++; 131 *a_ptcs = tx2;a_ptcs++; 132 *a_ptcs = ty2;a_ptcs++; 132 *a_ptcs = ty2;a_ptcs++; 133 133 134 *a_pxyzs = x3;a_pxyzs++; 134 *a_pxyzs = x3;a_pxyzs++; 135 *a_pxyzs = y3;a_pxyzs++; 135 *a_pxyzs = y3;a_pxyzs++; 136 *a_pxyzs = z3;a_pxyzs++; 136 *a_pxyzs = z3;a_pxyzs++; 137 137 138 *a_ptcs = tx3;a_ptcs++; 138 *a_ptcs = tx3;a_ptcs++; 139 *a_ptcs = ty3;a_ptcs++; 139 *a_ptcs = ty3;a_ptcs++; 140 140 141 x2 = x3; 141 x2 = x3; 142 y2 = y3; 142 y2 = y3; 143 z2 = z3; 143 z2 = z3; 144 144 145 tx2 = tx3; 145 tx2 = tx3; 146 ty2 = ty3; 146 ty2 = ty3; 147 } 147 } 148 148 149 } 149 } 150 150 151 inline void triangle_strip_to_triangles(size_t 151 inline void triangle_strip_to_triangles(size_t a_npt,const float* a_xyzs,float*& a_pxyzs) { 152 // a_pxyzs = (a_npt-2)*3*3 152 // a_pxyzs = (a_npt-2)*3*3 153 153 154 const float* vpos = a_xyzs; 154 const float* vpos = a_xyzs; 155 155 156 float x1 = *vpos;vpos++; 156 float x1 = *vpos;vpos++; 157 float y1 = *vpos;vpos++; 157 float y1 = *vpos;vpos++; 158 float z1 = *vpos;vpos++; 158 float z1 = *vpos;vpos++; 159 159 160 float x2 = *vpos;vpos++; 160 float x2 = *vpos;vpos++; 161 float y2 = *vpos;vpos++; 161 float y2 = *vpos;vpos++; 162 float z2 = *vpos;vpos++; 162 float z2 = *vpos;vpos++; 163 163 164 float x3,y3,z3; 164 float x3,y3,z3; 165 bool flip = false; 165 bool flip = false; 166 for(size_t i=2;i<a_npt;i++) { 166 for(size_t i=2;i<a_npt;i++) { 167 x3 = *vpos;vpos++; 167 x3 = *vpos;vpos++; 168 y3 = *vpos;vpos++; 168 y3 = *vpos;vpos++; 169 z3 = *vpos;vpos++; 169 z3 = *vpos;vpos++; 170 170 171 if(flip) { 171 if(flip) { 172 *a_pxyzs = x1;a_pxyzs++; 172 *a_pxyzs = x1;a_pxyzs++; 173 *a_pxyzs = y1;a_pxyzs++; 173 *a_pxyzs = y1;a_pxyzs++; 174 *a_pxyzs = z1;a_pxyzs++; 174 *a_pxyzs = z1;a_pxyzs++; 175 175 176 *a_pxyzs = x3;a_pxyzs++; 176 *a_pxyzs = x3;a_pxyzs++; 177 *a_pxyzs = y3;a_pxyzs++; 177 *a_pxyzs = y3;a_pxyzs++; 178 *a_pxyzs = z3;a_pxyzs++; 178 *a_pxyzs = z3;a_pxyzs++; 179 179 180 *a_pxyzs = x2;a_pxyzs++; 180 *a_pxyzs = x2;a_pxyzs++; 181 *a_pxyzs = y2;a_pxyzs++; 181 *a_pxyzs = y2;a_pxyzs++; 182 *a_pxyzs = z2;a_pxyzs++; 182 *a_pxyzs = z2;a_pxyzs++; 183 } else { 183 } else { 184 *a_pxyzs = x1;a_pxyzs++; 184 *a_pxyzs = x1;a_pxyzs++; 185 *a_pxyzs = y1;a_pxyzs++; 185 *a_pxyzs = y1;a_pxyzs++; 186 *a_pxyzs = z1;a_pxyzs++; 186 *a_pxyzs = z1;a_pxyzs++; 187 187 188 *a_pxyzs = x2;a_pxyzs++; 188 *a_pxyzs = x2;a_pxyzs++; 189 *a_pxyzs = y2;a_pxyzs++; 189 *a_pxyzs = y2;a_pxyzs++; 190 *a_pxyzs = z2;a_pxyzs++; 190 *a_pxyzs = z2;a_pxyzs++; 191 191 192 *a_pxyzs = x3;a_pxyzs++; 192 *a_pxyzs = x3;a_pxyzs++; 193 *a_pxyzs = y3;a_pxyzs++; 193 *a_pxyzs = y3;a_pxyzs++; 194 *a_pxyzs = z3;a_pxyzs++; 194 *a_pxyzs = z3;a_pxyzs++; 195 } 195 } 196 196 197 x1 = x2; 197 x1 = x2; 198 y1 = y2; 198 y1 = y2; 199 z1 = z2; 199 z1 = z2; 200 200 201 x2 = x3; 201 x2 = x3; 202 y2 = y3; 202 y2 = y3; 203 z2 = z3; 203 z2 = z3; 204 204 205 flip = flip?false:true; 205 flip = flip?false:true; 206 } 206 } 207 } 207 } 208 208 209 inline void triangle_strip_to_triangles_textur 209 inline void triangle_strip_to_triangles_texture(size_t a_npt,const float* a_xyzs,const float* a_tcs,float*& a_pxyzs,float*& a_ptcs) { 210 // a_pxyzs = (a_npt-2)*3*3 210 // a_pxyzs = (a_npt-2)*3*3 211 // a_ptcs = (a_npt-2)*3*2 211 // a_ptcs = (a_npt-2)*3*2 212 212 213 const float* vpos = a_xyzs; 213 const float* vpos = a_xyzs; 214 const float* tpos = a_tcs; 214 const float* tpos = a_tcs; 215 215 216 float x1 = *vpos;vpos++; 216 float x1 = *vpos;vpos++; 217 float y1 = *vpos;vpos++; 217 float y1 = *vpos;vpos++; 218 float z1 = *vpos;vpos++; 218 float z1 = *vpos;vpos++; 219 219 220 float tx1 = *tpos;tpos++; 220 float tx1 = *tpos;tpos++; 221 float ty1 = *tpos;tpos++; 221 float ty1 = *tpos;tpos++; 222 222 223 float x2 = *vpos;vpos++; 223 float x2 = *vpos;vpos++; 224 float y2 = *vpos;vpos++; 224 float y2 = *vpos;vpos++; 225 float z2 = *vpos;vpos++; 225 float z2 = *vpos;vpos++; 226 226 227 float tx2 = *tpos;tpos++; 227 float tx2 = *tpos;tpos++; 228 float ty2 = *tpos;tpos++; 228 float ty2 = *tpos;tpos++; 229 229 230 float x3,y3,z3,tx3,ty3; 230 float x3,y3,z3,tx3,ty3; 231 bool flip = false; 231 bool flip = false; 232 for(size_t i=2;i<a_npt;i++) { 232 for(size_t i=2;i<a_npt;i++) { 233 x3 = *vpos;vpos++; 233 x3 = *vpos;vpos++; 234 y3 = *vpos;vpos++; 234 y3 = *vpos;vpos++; 235 z3 = *vpos;vpos++; 235 z3 = *vpos;vpos++; 236 236 237 tx3 = *tpos;tpos++; 237 tx3 = *tpos;tpos++; 238 ty3 = *tpos;tpos++; 238 ty3 = *tpos;tpos++; 239 239 240 if(flip) { 240 if(flip) { 241 *a_pxyzs = x1;a_pxyzs++; 241 *a_pxyzs = x1;a_pxyzs++; 242 *a_pxyzs = y1;a_pxyzs++; 242 *a_pxyzs = y1;a_pxyzs++; 243 *a_pxyzs = z1;a_pxyzs++; 243 *a_pxyzs = z1;a_pxyzs++; 244 244 245 *a_ptcs = tx1;a_ptcs++; 245 *a_ptcs = tx1;a_ptcs++; 246 *a_ptcs = ty1;a_ptcs++; 246 *a_ptcs = ty1;a_ptcs++; 247 247 248 *a_pxyzs = x3;a_pxyzs++; 248 *a_pxyzs = x3;a_pxyzs++; 249 *a_pxyzs = y3;a_pxyzs++; 249 *a_pxyzs = y3;a_pxyzs++; 250 *a_pxyzs = z3;a_pxyzs++; 250 *a_pxyzs = z3;a_pxyzs++; 251 251 252 *a_ptcs = tx3;a_ptcs++; 252 *a_ptcs = tx3;a_ptcs++; 253 *a_ptcs = ty3;a_ptcs++; 253 *a_ptcs = ty3;a_ptcs++; 254 254 255 *a_pxyzs = x2;a_pxyzs++; 255 *a_pxyzs = x2;a_pxyzs++; 256 *a_pxyzs = y2;a_pxyzs++; 256 *a_pxyzs = y2;a_pxyzs++; 257 *a_pxyzs = z2;a_pxyzs++; 257 *a_pxyzs = z2;a_pxyzs++; 258 258 259 *a_ptcs = tx2;a_ptcs++; 259 *a_ptcs = tx2;a_ptcs++; 260 *a_ptcs = ty2;a_ptcs++; 260 *a_ptcs = ty2;a_ptcs++; 261 } else { 261 } else { 262 *a_pxyzs = x1;a_pxyzs++; 262 *a_pxyzs = x1;a_pxyzs++; 263 *a_pxyzs = y1;a_pxyzs++; 263 *a_pxyzs = y1;a_pxyzs++; 264 *a_pxyzs = z1;a_pxyzs++; 264 *a_pxyzs = z1;a_pxyzs++; 265 265 266 *a_ptcs = tx1;a_ptcs++; 266 *a_ptcs = tx1;a_ptcs++; 267 *a_ptcs = ty1;a_ptcs++; 267 *a_ptcs = ty1;a_ptcs++; 268 268 269 *a_pxyzs = x2;a_pxyzs++; 269 *a_pxyzs = x2;a_pxyzs++; 270 *a_pxyzs = y2;a_pxyzs++; 270 *a_pxyzs = y2;a_pxyzs++; 271 *a_pxyzs = z2;a_pxyzs++; 271 *a_pxyzs = z2;a_pxyzs++; 272 272 273 *a_ptcs = tx2;a_ptcs++; 273 *a_ptcs = tx2;a_ptcs++; 274 *a_ptcs = ty2;a_ptcs++; 274 *a_ptcs = ty2;a_ptcs++; 275 275 276 *a_pxyzs = x3;a_pxyzs++; 276 *a_pxyzs = x3;a_pxyzs++; 277 *a_pxyzs = y3;a_pxyzs++; 277 *a_pxyzs = y3;a_pxyzs++; 278 *a_pxyzs = z3;a_pxyzs++; 278 *a_pxyzs = z3;a_pxyzs++; 279 279 280 *a_ptcs = tx3;a_ptcs++; 280 *a_ptcs = tx3;a_ptcs++; 281 *a_ptcs = ty3;a_ptcs++; 281 *a_ptcs = ty3;a_ptcs++; 282 } 282 } 283 283 284 x1 = x2; 284 x1 = x2; 285 y1 = y2; 285 y1 = y2; 286 z1 = z2; 286 z1 = z2; 287 287 288 tx1 = tx2; 288 tx1 = tx2; 289 ty1 = ty2; 289 ty1 = ty2; 290 290 291 x2 = x3; 291 x2 = x3; 292 y2 = y3; 292 y2 = y3; 293 z2 = z3; 293 z2 = z3; 294 294 295 tx2 = tx3; 295 tx2 = tx3; 296 ty2 = ty3; 296 ty2 = ty3; 297 297 298 flip = flip?false:true; 298 flip = flip?false:true; 299 } 299 } 300 } 300 } 301 301 302 inline void triangle_fan_to_triangles_nms(size 302 inline void triangle_fan_to_triangles_nms(size_t a_npt,const float* a_xyzs,const float* a_nms,float*& a_pxyzs,float*& a_pnms) { 303 triangle_fan_to_triangles(a_npt,a_xyzs,a_pxy 303 triangle_fan_to_triangles(a_npt,a_xyzs,a_pxyzs); 304 triangle_fan_to_triangles(a_npt,a_nms,a_pnms 304 triangle_fan_to_triangles(a_npt,a_nms,a_pnms); 305 } 305 } 306 306 307 inline void triangle_strip_to_triangles_nms(si 307 inline void triangle_strip_to_triangles_nms(size_t a_npt,const float* a_xyzs,const float* a_nms,float*& a_pxyzs,float*& a_pnms) { 308 // a_pxyzs, a_pnms = (a_npt-2)*3*3 308 // a_pxyzs, a_pnms = (a_npt-2)*3*3 309 triangle_strip_to_triangles(a_npt,a_xyzs,a_p 309 triangle_strip_to_triangles(a_npt,a_xyzs,a_pxyzs); 310 triangle_strip_to_triangles(a_npt,a_nms,a_pn 310 triangle_strip_to_triangles(a_npt,a_nms,a_pnms); 311 } 311 } 312 312 313 inline void triangle_fan_to_triangles_2to3(siz 313 inline void triangle_fan_to_triangles_2to3(size_t a_npt,const float* a_xyzs,float*& a_pxyzs) { 314 314 315 const float* vpos = a_xyzs; 315 const float* vpos = a_xyzs; 316 316 317 float x1 = *vpos;vpos++; 317 float x1 = *vpos;vpos++; 318 float y1 = *vpos;vpos++; 318 float y1 = *vpos;vpos++; 319 319 320 float x2 = *vpos;vpos++; 320 float x2 = *vpos;vpos++; 321 float y2 = *vpos;vpos++; 321 float y2 = *vpos;vpos++; 322 322 323 float x3,y3; 323 float x3,y3; 324 for(size_t i=2;i<a_npt;i++) { 324 for(size_t i=2;i<a_npt;i++) { 325 x3 = *vpos;vpos++; 325 x3 = *vpos;vpos++; 326 y3 = *vpos;vpos++; 326 y3 = *vpos;vpos++; 327 327 328 *a_pxyzs = x1;a_pxyzs++; 328 *a_pxyzs = x1;a_pxyzs++; 329 *a_pxyzs = y1;a_pxyzs++; 329 *a_pxyzs = y1;a_pxyzs++; 330 *a_pxyzs = 0;a_pxyzs++; 330 *a_pxyzs = 0;a_pxyzs++; 331 331 332 *a_pxyzs = x2;a_pxyzs++; 332 *a_pxyzs = x2;a_pxyzs++; 333 *a_pxyzs = y2;a_pxyzs++; 333 *a_pxyzs = y2;a_pxyzs++; 334 *a_pxyzs = 0;a_pxyzs++; 334 *a_pxyzs = 0;a_pxyzs++; 335 335 336 *a_pxyzs = x3;a_pxyzs++; 336 *a_pxyzs = x3;a_pxyzs++; 337 *a_pxyzs = y3;a_pxyzs++; 337 *a_pxyzs = y3;a_pxyzs++; 338 *a_pxyzs = 0;a_pxyzs++; 338 *a_pxyzs = 0;a_pxyzs++; 339 339 340 x2 = x3; 340 x2 = x3; 341 y2 = y3; 341 y2 = y3; 342 } 342 } 343 343 344 } 344 } 345 345 346 inline void triangle_strip_to_triangles_2to3(s 346 inline void triangle_strip_to_triangles_2to3(size_t a_npt,const float* a_xyzs,float*& a_pxyzs) { 347 347 348 const float* vpos = a_xyzs; 348 const float* vpos = a_xyzs; 349 349 350 float x1 = *vpos;vpos++; 350 float x1 = *vpos;vpos++; 351 float y1 = *vpos;vpos++; 351 float y1 = *vpos;vpos++; 352 352 353 float x2 = *vpos;vpos++; 353 float x2 = *vpos;vpos++; 354 float y2 = *vpos;vpos++; 354 float y2 = *vpos;vpos++; 355 355 356 float x3,y3; 356 float x3,y3; 357 bool flip = false; 357 bool flip = false; 358 for(size_t i=2;i<a_npt;i++) { 358 for(size_t i=2;i<a_npt;i++) { 359 x3 = *vpos;vpos++; 359 x3 = *vpos;vpos++; 360 y3 = *vpos;vpos++; 360 y3 = *vpos;vpos++; 361 361 362 if(flip) { 362 if(flip) { 363 *a_pxyzs = x1;a_pxyzs++; 363 *a_pxyzs = x1;a_pxyzs++; 364 *a_pxyzs = y1;a_pxyzs++; 364 *a_pxyzs = y1;a_pxyzs++; 365 *a_pxyzs = 0;a_pxyzs++; 365 *a_pxyzs = 0;a_pxyzs++; 366 366 367 *a_pxyzs = x3;a_pxyzs++; 367 *a_pxyzs = x3;a_pxyzs++; 368 *a_pxyzs = y3;a_pxyzs++; 368 *a_pxyzs = y3;a_pxyzs++; 369 *a_pxyzs = 0;a_pxyzs++; 369 *a_pxyzs = 0;a_pxyzs++; 370 370 371 *a_pxyzs = x2;a_pxyzs++; 371 *a_pxyzs = x2;a_pxyzs++; 372 *a_pxyzs = y2;a_pxyzs++; 372 *a_pxyzs = y2;a_pxyzs++; 373 *a_pxyzs = 0;a_pxyzs++; 373 *a_pxyzs = 0;a_pxyzs++; 374 } else { 374 } else { 375 *a_pxyzs = x1;a_pxyzs++; 375 *a_pxyzs = x1;a_pxyzs++; 376 *a_pxyzs = y1;a_pxyzs++; 376 *a_pxyzs = y1;a_pxyzs++; 377 *a_pxyzs = 0;a_pxyzs++; 377 *a_pxyzs = 0;a_pxyzs++; 378 378 379 *a_pxyzs = x2;a_pxyzs++; 379 *a_pxyzs = x2;a_pxyzs++; 380 *a_pxyzs = y2;a_pxyzs++; 380 *a_pxyzs = y2;a_pxyzs++; 381 *a_pxyzs = 0;a_pxyzs++; 381 *a_pxyzs = 0;a_pxyzs++; 382 382 383 *a_pxyzs = x3;a_pxyzs++; 383 *a_pxyzs = x3;a_pxyzs++; 384 *a_pxyzs = y3;a_pxyzs++; 384 *a_pxyzs = y3;a_pxyzs++; 385 *a_pxyzs = 0;a_pxyzs++; 385 *a_pxyzs = 0;a_pxyzs++; 386 } 386 } 387 387 388 x1 = x2; 388 x1 = x2; 389 y1 = y2; 389 y1 = y2; 390 390 391 x2 = x3; 391 x2 = x3; 392 y2 = y3; 392 y2 = y3; 393 393 394 flip = flip?false:true; 394 flip = flip?false:true; 395 } 395 } 396 396 397 } 397 } 398 398 399 inline void line_strip_to_lines_2to3(size_t a_ 399 inline void line_strip_to_lines_2to3(size_t a_npt,const float* a_xyzs,float*& a_pxyzs) { 400 400 401 const float* vpos = a_xyzs; 401 const float* vpos = a_xyzs; 402 402 403 float x1 = *vpos;vpos++; 403 float x1 = *vpos;vpos++; 404 float y1 = *vpos;vpos++; 404 float y1 = *vpos;vpos++; 405 405 406 float x2,y2; 406 float x2,y2; 407 for(size_t i=1;i<a_npt;i++) { 407 for(size_t i=1;i<a_npt;i++) { 408 x2 = *vpos;vpos++; 408 x2 = *vpos;vpos++; 409 y2 = *vpos;vpos++; 409 y2 = *vpos;vpos++; 410 410 411 *a_pxyzs = x1;a_pxyzs++; 411 *a_pxyzs = x1;a_pxyzs++; 412 *a_pxyzs = y1;a_pxyzs++; 412 *a_pxyzs = y1;a_pxyzs++; 413 *a_pxyzs = 0;a_pxyzs++; 413 *a_pxyzs = 0;a_pxyzs++; 414 414 415 *a_pxyzs = x2;a_pxyzs++; 415 *a_pxyzs = x2;a_pxyzs++; 416 *a_pxyzs = y2;a_pxyzs++; 416 *a_pxyzs = y2;a_pxyzs++; 417 *a_pxyzs = 0;a_pxyzs++; 417 *a_pxyzs = 0;a_pxyzs++; 418 418 419 x1 = x2; 419 x1 = x2; 420 y1 = y2; 420 y1 = y2; 421 } 421 } 422 422 423 } 423 } 424 424 425 inline void line_strip_to_lines(size_t a_npt,c 425 inline void line_strip_to_lines(size_t a_npt,const float* a_xyzs,float*& a_pxyzs) { 426 // a_pxyzs = (a_npt-1)*2*3 426 // a_pxyzs = (a_npt-1)*2*3 427 427 428 const float* vpos = a_xyzs; 428 const float* vpos = a_xyzs; 429 429 430 float x1 = *vpos;vpos++; 430 float x1 = *vpos;vpos++; 431 float y1 = *vpos;vpos++; 431 float y1 = *vpos;vpos++; 432 float z1 = *vpos;vpos++; 432 float z1 = *vpos;vpos++; 433 433 434 float x2,y2,z2; 434 float x2,y2,z2; 435 for(size_t i=1;i<a_npt;i++) { 435 for(size_t i=1;i<a_npt;i++) { 436 x2 = *vpos;vpos++; 436 x2 = *vpos;vpos++; 437 y2 = *vpos;vpos++; 437 y2 = *vpos;vpos++; 438 z2 = *vpos;vpos++; 438 z2 = *vpos;vpos++; 439 439 440 *a_pxyzs = x1;a_pxyzs++; 440 *a_pxyzs = x1;a_pxyzs++; 441 *a_pxyzs = y1;a_pxyzs++; 441 *a_pxyzs = y1;a_pxyzs++; 442 *a_pxyzs = z1;a_pxyzs++; 442 *a_pxyzs = z1;a_pxyzs++; 443 443 444 *a_pxyzs = x2;a_pxyzs++; 444 *a_pxyzs = x2;a_pxyzs++; 445 *a_pxyzs = y2;a_pxyzs++; 445 *a_pxyzs = y2;a_pxyzs++; 446 *a_pxyzs = z2;a_pxyzs++; 446 *a_pxyzs = z2;a_pxyzs++; 447 447 448 x1 = x2; 448 x1 = x2; 449 y1 = y2; 449 y1 = y2; 450 z1 = z2; 450 z1 = z2; 451 } 451 } 452 452 453 } 453 } 454 454 455 inline void line_loop_to_lines(size_t a_npt,co 455 inline void line_loop_to_lines(size_t a_npt,const float* a_xyzs,float*& a_pxyzs) { 456 // a_pxyzs = a_npt*2*3 456 // a_pxyzs = a_npt*2*3 457 457 458 const float* vpos = a_xyzs; 458 const float* vpos = a_xyzs; 459 459 460 float x1 = *vpos;vpos++; 460 float x1 = *vpos;vpos++; 461 float y1 = *vpos;vpos++; 461 float y1 = *vpos;vpos++; 462 float z1 = *vpos;vpos++; 462 float z1 = *vpos;vpos++; 463 463 464 float x0 = x1; 464 float x0 = x1; 465 float y0 = y1; 465 float y0 = y1; 466 float z0 = z1; 466 float z0 = z1; 467 467 468 float x2,y2,z2; 468 float x2,y2,z2; 469 for(size_t i=1;i<a_npt;i++) { 469 for(size_t i=1;i<a_npt;i++) { 470 x2 = *vpos;vpos++; 470 x2 = *vpos;vpos++; 471 y2 = *vpos;vpos++; 471 y2 = *vpos;vpos++; 472 z2 = *vpos;vpos++; 472 z2 = *vpos;vpos++; 473 473 474 *a_pxyzs = x1;a_pxyzs++; 474 *a_pxyzs = x1;a_pxyzs++; 475 *a_pxyzs = y1;a_pxyzs++; 475 *a_pxyzs = y1;a_pxyzs++; 476 *a_pxyzs = z1;a_pxyzs++; 476 *a_pxyzs = z1;a_pxyzs++; 477 477 478 *a_pxyzs = x2;a_pxyzs++; 478 *a_pxyzs = x2;a_pxyzs++; 479 *a_pxyzs = y2;a_pxyzs++; 479 *a_pxyzs = y2;a_pxyzs++; 480 *a_pxyzs = z2;a_pxyzs++; 480 *a_pxyzs = z2;a_pxyzs++; 481 481 482 x1 = x2; 482 x1 = x2; 483 y1 = y2; 483 y1 = y2; 484 z1 = z2; 484 z1 = z2; 485 } 485 } 486 486 487 *a_pxyzs = x1;a_pxyzs++; 487 *a_pxyzs = x1;a_pxyzs++; 488 *a_pxyzs = y1;a_pxyzs++; 488 *a_pxyzs = y1;a_pxyzs++; 489 *a_pxyzs = z1;a_pxyzs++; 489 *a_pxyzs = z1;a_pxyzs++; 490 490 491 *a_pxyzs = x0;a_pxyzs++; 491 *a_pxyzs = x0;a_pxyzs++; 492 *a_pxyzs = y0;a_pxyzs++; 492 *a_pxyzs = y0;a_pxyzs++; 493 *a_pxyzs = z0;a_pxyzs++; 493 *a_pxyzs = z0;a_pxyzs++; 494 494 495 } 495 } 496 496 497 inline void line_loop_to_line_strip(size_t a_n 497 inline void line_loop_to_line_strip(size_t a_npt,const float* a_xyzs,float*& a_pxyzs) { 498 // a_pxyzs = (a_npt+1)*3 498 // a_pxyzs = (a_npt+1)*3 499 499 500 const float* vpos = a_xyzs; 500 const float* vpos = a_xyzs; 501 501 502 float x1 = *vpos;vpos++; 502 float x1 = *vpos;vpos++; 503 float y1 = *vpos;vpos++; 503 float y1 = *vpos;vpos++; 504 float z1 = *vpos;vpos++; 504 float z1 = *vpos;vpos++; 505 505 506 for(size_t i=0;i<a_npt;i++) { 506 for(size_t i=0;i<a_npt;i++) { 507 *a_pxyzs = *vpos;vpos++;a_pxyzs++; 507 *a_pxyzs = *vpos;vpos++;a_pxyzs++; 508 *a_pxyzs = *vpos;vpos++;a_pxyzs++; 508 *a_pxyzs = *vpos;vpos++;a_pxyzs++; 509 *a_pxyzs = *vpos;vpos++;a_pxyzs++; 509 *a_pxyzs = *vpos;vpos++;a_pxyzs++; 510 } 510 } 511 511 512 *a_pxyzs = x1;a_pxyzs++; 512 *a_pxyzs = x1;a_pxyzs++; 513 *a_pxyzs = y1;a_pxyzs++; 513 *a_pxyzs = y1;a_pxyzs++; 514 *a_pxyzs = z1;a_pxyzs++; 514 *a_pxyzs = z1;a_pxyzs++; 515 } 515 } 516 516 517 /// for DirectX_action : 517 /// for DirectX_action : 518 inline void triangle_fan_to_triangles_2to3(siz 518 inline void triangle_fan_to_triangles_2to3(size_t a_npt,const float* a_xyzs, 519 flo 519 float a_r,float a_g,float a_b,float a_a, 520 float*& a_pxyz_rgbas) { 520 float*& a_pxyz_rgbas) { 521 521 522 const float* vpos = a_xyzs; 522 const float* vpos = a_xyzs; 523 523 524 float x1 = *vpos;vpos++; 524 float x1 = *vpos;vpos++; 525 float y1 = *vpos;vpos++; 525 float y1 = *vpos;vpos++; 526 526 527 float x2 = *vpos;vpos++; 527 float x2 = *vpos;vpos++; 528 float y2 = *vpos;vpos++; 528 float y2 = *vpos;vpos++; 529 529 530 float x3,y3; 530 float x3,y3; 531 for(size_t i=2;i<a_npt;i++) { 531 for(size_t i=2;i<a_npt;i++) { 532 x3 = *vpos;vpos++; 532 x3 = *vpos;vpos++; 533 y3 = *vpos;vpos++; 533 y3 = *vpos;vpos++; 534 534 535 *a_pxyz_rgbas = x1;a_pxyz_rgbas++; 535 *a_pxyz_rgbas = x1;a_pxyz_rgbas++; 536 *a_pxyz_rgbas = y1;a_pxyz_rgbas++; 536 *a_pxyz_rgbas = y1;a_pxyz_rgbas++; 537 *a_pxyz_rgbas = 0;a_pxyz_rgbas++; 537 *a_pxyz_rgbas = 0;a_pxyz_rgbas++; 538 538 539 *a_pxyz_rgbas = a_r;a_pxyz_rgbas++; 539 *a_pxyz_rgbas = a_r;a_pxyz_rgbas++; 540 *a_pxyz_rgbas = a_g;a_pxyz_rgbas++; 540 *a_pxyz_rgbas = a_g;a_pxyz_rgbas++; 541 *a_pxyz_rgbas = a_b;a_pxyz_rgbas++; 541 *a_pxyz_rgbas = a_b;a_pxyz_rgbas++; 542 *a_pxyz_rgbas = a_a;a_pxyz_rgbas++; 542 *a_pxyz_rgbas = a_a;a_pxyz_rgbas++; 543 543 544 *a_pxyz_rgbas = x2;a_pxyz_rgbas++; 544 *a_pxyz_rgbas = x2;a_pxyz_rgbas++; 545 *a_pxyz_rgbas = y2;a_pxyz_rgbas++; 545 *a_pxyz_rgbas = y2;a_pxyz_rgbas++; 546 *a_pxyz_rgbas = 0;a_pxyz_rgbas++; 546 *a_pxyz_rgbas = 0;a_pxyz_rgbas++; 547 547 548 *a_pxyz_rgbas = a_r;a_pxyz_rgbas++; 548 *a_pxyz_rgbas = a_r;a_pxyz_rgbas++; 549 *a_pxyz_rgbas = a_g;a_pxyz_rgbas++; 549 *a_pxyz_rgbas = a_g;a_pxyz_rgbas++; 550 *a_pxyz_rgbas = a_b;a_pxyz_rgbas++; 550 *a_pxyz_rgbas = a_b;a_pxyz_rgbas++; 551 *a_pxyz_rgbas = a_a;a_pxyz_rgbas++; 551 *a_pxyz_rgbas = a_a;a_pxyz_rgbas++; 552 552 553 *a_pxyz_rgbas = x3;a_pxyz_rgbas++; 553 *a_pxyz_rgbas = x3;a_pxyz_rgbas++; 554 *a_pxyz_rgbas = y3;a_pxyz_rgbas++; 554 *a_pxyz_rgbas = y3;a_pxyz_rgbas++; 555 *a_pxyz_rgbas = 0;a_pxyz_rgbas++; 555 *a_pxyz_rgbas = 0;a_pxyz_rgbas++; 556 556 557 *a_pxyz_rgbas = a_r;a_pxyz_rgbas++; 557 *a_pxyz_rgbas = a_r;a_pxyz_rgbas++; 558 *a_pxyz_rgbas = a_g;a_pxyz_rgbas++; 558 *a_pxyz_rgbas = a_g;a_pxyz_rgbas++; 559 *a_pxyz_rgbas = a_b;a_pxyz_rgbas++; 559 *a_pxyz_rgbas = a_b;a_pxyz_rgbas++; 560 *a_pxyz_rgbas = a_a;a_pxyz_rgbas++; 560 *a_pxyz_rgbas = a_a;a_pxyz_rgbas++; 561 561 562 x2 = x3; 562 x2 = x3; 563 y2 = y3; 563 y2 = y3; 564 } 564 } 565 } 565 } 566 566 567 inline void triangle_fan_to_triangles(size_t a 567 inline void triangle_fan_to_triangles(size_t a_npt,const float* a_xyzs, 568 float a_ 568 float a_r,float a_g,float a_b,float a_a, 569 float*& a_pxyz_rgbas) { 569 float*& a_pxyz_rgbas) { 570 570 571 const float* vpos = a_xyzs; 571 const float* vpos = a_xyzs; 572 572 573 float x1 = *vpos;vpos++; 573 float x1 = *vpos;vpos++; 574 float y1 = *vpos;vpos++; 574 float y1 = *vpos;vpos++; 575 float z1 = *vpos;vpos++; 575 float z1 = *vpos;vpos++; 576 576 577 float x2 = *vpos;vpos++; 577 float x2 = *vpos;vpos++; 578 float y2 = *vpos;vpos++; 578 float y2 = *vpos;vpos++; 579 float z2 = *vpos;vpos++; 579 float z2 = *vpos;vpos++; 580 580 581 float x3,y3,z3; 581 float x3,y3,z3; 582 for(size_t i=2;i<a_npt;i++) { 582 for(size_t i=2;i<a_npt;i++) { 583 x3 = *vpos;vpos++; 583 x3 = *vpos;vpos++; 584 y3 = *vpos;vpos++; 584 y3 = *vpos;vpos++; 585 z3 = *vpos;vpos++; 585 z3 = *vpos;vpos++; 586 586 587 *a_pxyz_rgbas = x1;a_pxyz_rgbas++; 587 *a_pxyz_rgbas = x1;a_pxyz_rgbas++; 588 *a_pxyz_rgbas = y1;a_pxyz_rgbas++; 588 *a_pxyz_rgbas = y1;a_pxyz_rgbas++; 589 *a_pxyz_rgbas = z1;a_pxyz_rgbas++; 589 *a_pxyz_rgbas = z1;a_pxyz_rgbas++; 590 590 591 *a_pxyz_rgbas = a_r;a_pxyz_rgbas++; 591 *a_pxyz_rgbas = a_r;a_pxyz_rgbas++; 592 *a_pxyz_rgbas = a_g;a_pxyz_rgbas++; 592 *a_pxyz_rgbas = a_g;a_pxyz_rgbas++; 593 *a_pxyz_rgbas = a_b;a_pxyz_rgbas++; 593 *a_pxyz_rgbas = a_b;a_pxyz_rgbas++; 594 *a_pxyz_rgbas = a_a;a_pxyz_rgbas++; 594 *a_pxyz_rgbas = a_a;a_pxyz_rgbas++; 595 595 596 *a_pxyz_rgbas = x2;a_pxyz_rgbas++; 596 *a_pxyz_rgbas = x2;a_pxyz_rgbas++; 597 *a_pxyz_rgbas = y2;a_pxyz_rgbas++; 597 *a_pxyz_rgbas = y2;a_pxyz_rgbas++; 598 *a_pxyz_rgbas = z2;a_pxyz_rgbas++; 598 *a_pxyz_rgbas = z2;a_pxyz_rgbas++; 599 599 600 *a_pxyz_rgbas = a_r;a_pxyz_rgbas++; 600 *a_pxyz_rgbas = a_r;a_pxyz_rgbas++; 601 *a_pxyz_rgbas = a_g;a_pxyz_rgbas++; 601 *a_pxyz_rgbas = a_g;a_pxyz_rgbas++; 602 *a_pxyz_rgbas = a_b;a_pxyz_rgbas++; 602 *a_pxyz_rgbas = a_b;a_pxyz_rgbas++; 603 *a_pxyz_rgbas = a_a;a_pxyz_rgbas++; 603 *a_pxyz_rgbas = a_a;a_pxyz_rgbas++; 604 604 605 *a_pxyz_rgbas = x3;a_pxyz_rgbas++; 605 *a_pxyz_rgbas = x3;a_pxyz_rgbas++; 606 *a_pxyz_rgbas = y3;a_pxyz_rgbas++; 606 *a_pxyz_rgbas = y3;a_pxyz_rgbas++; 607 *a_pxyz_rgbas = z3;a_pxyz_rgbas++; 607 *a_pxyz_rgbas = z3;a_pxyz_rgbas++; 608 608 609 *a_pxyz_rgbas = a_r;a_pxyz_rgbas++; 609 *a_pxyz_rgbas = a_r;a_pxyz_rgbas++; 610 *a_pxyz_rgbas = a_g;a_pxyz_rgbas++; 610 *a_pxyz_rgbas = a_g;a_pxyz_rgbas++; 611 *a_pxyz_rgbas = a_b;a_pxyz_rgbas++; 611 *a_pxyz_rgbas = a_b;a_pxyz_rgbas++; 612 *a_pxyz_rgbas = a_a;a_pxyz_rgbas++; 612 *a_pxyz_rgbas = a_a;a_pxyz_rgbas++; 613 613 614 x2 = x3; 614 x2 = x3; 615 y2 = y3; 615 y2 = y3; 616 z2 = z3; 616 z2 = z3; 617 } 617 } 618 } 618 } 619 619 620 }} 620 }} 621 621 622 #endif 622 #endif