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 ;
}
} ;
|