[Plib-cvs] plib/src/ssgAux ssgaParticleSystem.cxx,1.5,1.6 ssgaParticleSystem.h,1.2,1.3
Brought to you by:
sjbaker
From: Steve B. <sj...@us...> - 2002-08-27 22:29:23
|
Update of /cvsroot/plib/plib/src/ssgAux In directory usw-pr-cvs1:/tmp/cvs-serv11522/plib/src/ssgAux Modified Files: ssgaParticleSystem.cxx ssgaParticleSystem.h Log Message: Allow setting of each particle's size individually - and also fix bug to *center* each particle around it's position. Index: ssgaParticleSystem.cxx =================================================================== RCS file: /cvsroot/plib/plib/src/ssgAux/ssgaParticleSystem.cxx,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- ssgaParticleSystem.cxx 4 Aug 2002 23:45:31 -0000 1.5 +++ ssgaParticleSystem.cxx 27 Aug 2002 22:29:20 -0000 1.6 @@ -59,7 +59,9 @@ void ssgaParticleSystem::draw_geometry () { - sgVec3 xx, xxyy, yy ; + sgVec3 nxny, xxny, xxyy, nxyy ; + + float sz = size / 2.0f ; if ( turn_to_face ) { @@ -67,30 +69,41 @@ glGetFloatv ( GL_MODELVIEW_MATRIX, (float *) mat ) ; - sgSetVec3 ( xx, mat[0][0] * size, mat[1][0] * size, mat[2][0] * size ) ; - sgSetVec3 ( yy, mat[0][1] * size, mat[1][1] * size, mat[2][1] * size ) ; - sgAddVec3 ( xxyy, xx, yy ) ; + sgVec3 xx, yy ; + + sgSetVec3 ( xx, mat[0][0] * sz, mat[1][0] * sz, mat[2][0] * sz ) ; + sgSetVec3 ( yy, mat[0][1] * sz, mat[1][1] * sz, mat[2][1] * sz ) ; + + sgSetVec3 ( nxny, -xx[0]+yy[0], -xx[1]+yy[1], -xx[2]+yy[2] ) ; + sgSetVec3 ( nxyy, -xx[0]-yy[0], -xx[1]-yy[1], -xx[2]-yy[2] ) ; + sgSetVec3 ( xxny, xx[0]-yy[0], xx[1]-yy[1], xx[2]-yy[2] ) ; + sgSetVec3 ( xxyy, xx[0]+yy[0], xx[1]+yy[1], xx[2]+yy[2] ) ; } else { - sgSetVec3 ( xx , size, 0, 0 ) ; - sgSetVec3 ( yy , 0 , 0, size ) ; - sgSetVec3 ( xxyy, size, 0, size ) ; + sgSetVec3 ( xxny , sz, 0, -sz ) ; + sgSetVec3 ( nxny , -sz, 0, -sz ) ; + sgSetVec3 ( nxyy , -sz, 0, sz ) ; + sgSetVec3 ( xxyy, sz, 0, sz ) ; } int j = 0 ; for ( int i = 0 ; i < num_particles ; i++, j += 4 ) { - sgCopyVec4 ( getColour ( j + 0 ), particle[i].col ) ; - sgCopyVec4 ( getColour ( j + 1 ), particle[i].col ) ; - sgCopyVec4 ( getColour ( j + 2 ), particle[i].col ) ; - sgCopyVec4 ( getColour ( j + 3 ), particle[i].col ) ; + sgCopyVec4 ( getColour ( j + 0 ), particle[i].col ) ; + sgCopyVec4 ( getColour ( j + 1 ), particle[i].col ) ; + sgCopyVec4 ( getColour ( j + 2 ), particle[i].col ) ; + sgCopyVec4 ( getColour ( j + 3 ), particle[i].col ) ; - sgCopyVec3 ( getVertex ( j + 0 ), particle[i].pos ) ; - sgAddVec3 ( getVertex ( j + 1 ), particle[i].pos, xx ) ; - sgAddVec3 ( getVertex ( j + 2 ), particle[i].pos, xxyy ) ; - sgAddVec3 ( getVertex ( j + 3 ), particle[i].pos, yy ) ; + sgAddScaledVec3 ( getVertex ( j + 0 ), particle[i].pos, + nxny, particle[i].size ) ; + sgAddScaledVec3 ( getVertex ( j + 1 ), particle[i].pos, + xxny, particle[i].size ) ; + sgAddScaledVec3 ( getVertex ( j + 2 ), particle[i].pos, + xxyy, particle[i].size ) ; + sgAddScaledVec3 ( getVertex ( j + 3 ), particle[i].pos, + nxyy, particle[i].size ) ; } glDisable ( GL_CULL_FACE ) ; Index: ssgaParticleSystem.h =================================================================== RCS file: /cvsroot/plib/plib/src/ssgAux/ssgaParticleSystem.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- ssgaParticleSystem.h 19 Jan 2002 20:37:21 -0000 1.2 +++ ssgaParticleSystem.h 27 Aug 2002 22:29:20 -0000 1.3 @@ -8,6 +8,8 @@ sgVec3 vel ; sgVec3 acc ; + float size ; + float time_to_live ; void *userData ; @@ -26,6 +28,7 @@ sgZeroVec3 ( acc ) ; time_to_live = 0 ; userData = NULL ; + size = 1.0f ; } } ; |