| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /******************************************************************************/
- #include "stdafx.h"
- namespace EE{
- /******************************************************************************/
- MeshBase& MeshBase::texMap(Flt scale, Byte tex_index)
- {
- if(InRange(tex_index, 3))
- if(C Vec *pos=vtx.pos())
- {
- 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;}
- REPA(vtx)
- {
- (tex++)->set(pos->x*scale, 1-pos->y*scale);
- pos++;
- }
- }
- return T;
- }
- MeshBase& MeshBase::texMapXZ(Flt scale, Byte tex_index)
- {
- if(InRange(tex_index, 3))
- if(C Vec *pos=vtx.pos())
- {
- 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;}
- REPA(vtx)
- {
- (tex++)->set(pos->x*scale, 1-pos->z*scale);
- pos++;
- }
- }
- return T;
- }
- MeshBase& MeshBase::texMap(C Matrix &matrix, Byte tex_index)
- {
- if(InRange(tex_index, 3))
- if(C Vec *pos=vtx.pos())
- {
- 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;}
- REPA(vtx)(*tex++)=((*pos++)*matrix).xy;
- }
- return T;
- }
- MeshBase& MeshBase::texMap(C Plane &plane, Byte tex_index)
- {
- if(InRange(tex_index, 3))
- if(C Vec *pos=vtx.pos())
- {
- 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;}
- Matrix3 matrix; matrix.setDir(plane.normal);
- REPA(vtx)
- {
- Vec vec=(*pos++)-plane.pos;
- (tex++)->set(Dot(vec, matrix.x),
- Dot(vec, matrix.y));
- }
- }
- return T;
- }
- MeshBase& MeshBase::texMap(C Ball &ball, Byte tex_index)
- {
- if(InRange(tex_index, 3))
- if(C Vec *pos=vtx.pos())
- {
- 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;}
- REPA(vtx)
- {
- Vec v=(*pos++)-ball.pos;
- (tex++)->set(Angle ( Vec2(v.x, v.z))/PI2,
- AbsAngleBetween(v, Vec(0, 1, 0))/PI );
- }
- }
- return T;
- }
- MeshBase& MeshBase::texMap(C Tube &tube, Byte tex_index)
- {
- if(InRange(tex_index, 3))
- if(C Vec *pos=vtx.pos())
- {
- 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;}
- Matrix3 matrix; matrix.setDir(tube.up); matrix.z.chs();
- REPA(vtx)
- {
- Vec v=(*pos++)-tube.pos;
- (tex++)->set(-Angle(v, matrix )/PI2,
- Dot(v, matrix.z)/tube.h/2+0.5f);
- }
- }
- return T;
- }
- 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;}
- 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;}
- 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;}
- /******************************************************************************/
- }
- /******************************************************************************/
|