Mshb Texturize.cpp 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /******************************************************************************/
  2. #include "stdafx.h"
  3. namespace EE{
  4. /******************************************************************************/
  5. MeshBase& MeshBase::texMap(Flt scale, Byte tex_index)
  6. {
  7. if(InRange(tex_index, 3))
  8. if(C Vec *pos=vtx.pos())
  9. {
  10. Vec2 *tex; switch(tex_index){default: include(VTX_TEX0); tex=vtx.tex0(); break; case 1: include(VTX_TEX1); tex=vtx.tex1(); break; case 2: include(VTX_TEX2); tex=vtx.tex2(); break;}
  11. REPA(vtx)
  12. {
  13. (tex++)->set(pos->x*scale, 1-pos->y*scale);
  14. pos++;
  15. }
  16. }
  17. return T;
  18. }
  19. MeshBase& MeshBase::texMapXZ(Flt scale, Byte tex_index)
  20. {
  21. if(InRange(tex_index, 3))
  22. if(C Vec *pos=vtx.pos())
  23. {
  24. Vec2 *tex; switch(tex_index){default: include(VTX_TEX0); tex=vtx.tex0(); break; case 1: include(VTX_TEX1); tex=vtx.tex1(); break; case 2: include(VTX_TEX2); tex=vtx.tex2(); break;}
  25. REPA(vtx)
  26. {
  27. (tex++)->set(pos->x*scale, 1-pos->z*scale);
  28. pos++;
  29. }
  30. }
  31. return T;
  32. }
  33. MeshBase& MeshBase::texMap(C Matrix &matrix, Byte tex_index)
  34. {
  35. if(InRange(tex_index, 3))
  36. if(C Vec *pos=vtx.pos())
  37. {
  38. Vec2 *tex; switch(tex_index){default: include(VTX_TEX0); tex=vtx.tex0(); break; case 1: include(VTX_TEX1); tex=vtx.tex1(); break; case 2: include(VTX_TEX2); tex=vtx.tex2(); break;}
  39. REPA(vtx)(*tex++)=((*pos++)*matrix).xy;
  40. }
  41. return T;
  42. }
  43. MeshBase& MeshBase::texMap(C Plane &plane, Byte tex_index)
  44. {
  45. if(InRange(tex_index, 3))
  46. if(C Vec *pos=vtx.pos())
  47. {
  48. Vec2 *tex; switch(tex_index){default: include(VTX_TEX0); tex=vtx.tex0(); break; case 1: include(VTX_TEX1); tex=vtx.tex1(); break; case 2: include(VTX_TEX2); tex=vtx.tex2(); break;}
  49. Matrix3 matrix; matrix.setDir(plane.normal);
  50. REPA(vtx)
  51. {
  52. Vec vec=(*pos++)-plane.pos;
  53. (tex++)->set(Dot(vec, matrix.x),
  54. Dot(vec, matrix.y));
  55. }
  56. }
  57. return T;
  58. }
  59. MeshBase& MeshBase::texMap(C Ball &ball, Byte tex_index)
  60. {
  61. if(InRange(tex_index, 3))
  62. if(C Vec *pos=vtx.pos())
  63. {
  64. Vec2 *tex; switch(tex_index){default: include(VTX_TEX0); tex=vtx.tex0(); break; case 1: include(VTX_TEX1); tex=vtx.tex1(); break; case 2: include(VTX_TEX2); tex=vtx.tex2(); break;}
  65. REPA(vtx)
  66. {
  67. Vec v=(*pos++)-ball.pos;
  68. (tex++)->set(Angle ( Vec2(v.x, v.z))/PI2,
  69. AbsAngleBetween(v, Vec(0, 1, 0))/PI );
  70. }
  71. }
  72. return T;
  73. }
  74. MeshBase& MeshBase::texMap(C Tube &tube, Byte tex_index)
  75. {
  76. if(InRange(tex_index, 3))
  77. if(C Vec *pos=vtx.pos())
  78. {
  79. Vec2 *tex; switch(tex_index){default: include(VTX_TEX0); tex=vtx.tex0(); break; case 1: include(VTX_TEX1); tex=vtx.tex1(); break; case 2: include(VTX_TEX2); tex=vtx.tex2(); break;}
  80. Matrix3 matrix; matrix.setDir(tube.up); matrix.z.chs();
  81. REPA(vtx)
  82. {
  83. Vec v=(*pos++)-tube.pos;
  84. (tex++)->set(-Angle(v, matrix )/PI2,
  85. Dot(v, matrix.z)/tube.h/2+0.5f);
  86. }
  87. }
  88. return T;
  89. }
  90. MeshBase& MeshBase::texMove (C Vec2 &move , Byte tex_index) {if(InRange(tex_index, 3) && move.any()){Vec2 *tex=(tex_index==0 ? vtx.tex0() : tex_index==1 ? vtx.tex1() : vtx.tex2()); if(tex)REPA(vtx)(*tex++)+=move ;} return T;}
  91. MeshBase& MeshBase::texScale (C Vec2 &scale, Byte tex_index) {if(InRange(tex_index, 3) && scale!=1 ){Vec2 *tex=(tex_index==0 ? vtx.tex0() : tex_index==1 ? vtx.tex1() : vtx.tex2()); if(tex)REPA(vtx)(*tex++)*=scale ;} return T;}
  92. MeshBase& MeshBase::texRotate( Flt angle, Byte tex_index) {if(InRange(tex_index, 3) && angle ){Vec2 *tex=(tex_index==0 ? vtx.tex0() : tex_index==1 ? vtx.tex1() : vtx.tex2()); Flt cos, sin; CosSin(cos, sin, angle); if(tex)REPA(vtx)(*tex++).rotateCosSin(cos, sin);} return T;}
  93. /******************************************************************************/
  94. }
  95. /******************************************************************************/