Inside3D!
     

"fancy" particles
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Inside3d Forums Forum Index -> Engine Programming
View previous topic :: View next topic  
Author Message
MeTcHsteekle



Joined: 15 May 2008
Posts: 397
Location: its a secret

PostPosted: Mon Feb 16, 2009 12:31 am    Post subject: "fancy" particles Reply with quote

how do u make the original particles and somewhat enhance them like this : http://qer.planetquake.gamespy.com/screens_1299/particles4.jpg

just not as wacked out |:/
_________________
bah
Back to top
View user's profile Send private message AIM Address
reckless



Joined: 24 Jan 2008
Posts: 390
Location: inside tha debugger

PostPosted: Mon Feb 16, 2009 3:41 am    Post subject: Reply with quote

if i remember correctly it could be done by modifying the hardcoded dot sizes

Code:

//this part ->
byte   dottexture[8][8] =
{
   {0,1,1,0,0,0,0,0},
   {1,1,1,1,0,0,0,0},
   {1,1,1,1,0,0,0,0},
   {0,1,1,0,0,0,0,0},
   {0,0,0,0,0,0,0,0},
   {0,0,0,0,0,0,0,0},
   {0,0,0,0,0,0,0,0},
   {0,0,0,0,0,0,0,0},
};
//end
void R_InitParticleTexture (void)
{
   int      x,y;
   byte   data[8][8][4];

   //
   // particle texture
   //
   particletexture = texture_extension_number++;
    GL_Bind(particletexture);
//and here
   for (x=0 ; x<8 ; x++)
   {
      for (y=0 ; y<8 ; y++)
      {
         data[y][x][0] = 255;
         data[y][x][1] = 255;
         data[y][x][2] = 255;
         data[y][x][3] = dottexture[x][y]*255;
      }
   }
//end
   glTexImage2D (GL_TEXTURE_2D, 0, gl_alpha_format, 8, 8, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);

   glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

   particletexture_blood = EasyTgaLoad("textures/particles/blood.tga");
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
   particletexture_dirblood = EasyTgaLoad("textures/particles/blood2.tga");
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
}
Back to top
View user's profile Send private message
metlslime



Joined: 05 Feb 2008
Posts: 177

PostPosted: Mon Feb 16, 2009 8:33 am    Post subject: Reply with quote

looks like the particle texture is unchanged in that screenshot -- it's just that they all have like .5 alpha or something.

so just replace the glColor3f (x, y, z) with a glColor4f (x, y, z, 0.5)
Back to top
View user's profile Send private message
Electro



Joined: 29 Dec 2004
Posts: 241
Location: Brisbane, Australia

PostPosted: Mon Feb 16, 2009 11:14 am    Post subject: Reply with quote

Those are considered fancy, really??
_________________
Unit reporting!
http://www.bendarling.net/
Back to top
View user's profile Send private message Visit poster's website MSN Messenger
MeTcHsteekle



Joined: 15 May 2008
Posts: 397
Location: its a secret

PostPosted: Mon Feb 16, 2009 1:56 pm    Post subject: Reply with quote

Electro wrote:
Those are considered fancy, really??


...eh fancy enough Confused

anyways thanks, ill see what i can break :O
_________________
bah
Back to top
View user's profile Send private message AIM Address
MDave



Joined: 17 Dec 2007
Posts: 75

PostPosted: Mon Feb 16, 2009 3:22 pm    Post subject: Reply with quote

It would be nice to make them fade over the course of its lifetime, like in quake 2. Wink
Back to top
View user's profile Send private message
mh



Joined: 12 Jan 2008
Posts: 909

PostPosted: Mon Feb 16, 2009 5:17 pm    Post subject: Reply with quote

That's straightforward enough, just deduct some multiple of frametime from alpha during each update (each particle should of course have it's own alpha stored in the particle_t struct to enable this).
_________________
DirectQ Engine - New release 1.8.666a, 9th August 2010
MHQuake Blog (General)
Direct3D 8 Quake Engines
Back to top
View user's profile Send private message Visit poster's website
MeTcHsteekle



Joined: 15 May 2008
Posts: 397
Location: its a secret

PostPosted: Mon Feb 16, 2009 5:45 pm    Post subject: Reply with quote

metlslime wrote:

so just replace the glColor3f (x, y, z) with a glColor4f (x, y, z, 0.5)


i cant find this part Confused
_________________
bah
Back to top
View user's profile Send private message AIM Address
metlslime



Joined: 05 Feb 2008
Posts: 177

PostPosted: Mon Feb 16, 2009 11:15 pm    Post subject: Reply with quote

oh, i guess the line is actually:

Code:
glColor3ubv ((byte *)&d_8to24table[(int)p->color]);


It takes a pointer to an array of bytes, so it might be easier to replace it with:

Code:

glColor4ub((byte *)&d_8to24table[(int)p->color],
           (byte *)&d_8to24table[(int)p->color] + 1,
           (byte *)&d_8to24table[(int)p->color] + 2,
           128);


replace the 128 with whatever alpha value you want, from 0-255
Back to top
View user's profile Send private message
MeTcHsteekle



Joined: 15 May 2008
Posts: 397
Location: its a secret

PostPosted: Mon Feb 16, 2009 11:41 pm    Post subject: Reply with quote

metlslime wrote:
oh, i guess the line is actually:

Code:
glColor3ubv ((byte *)&d_8to24table[(int)p->color]);


It takes a pointer to an array of bytes, so it might be easier to replace it with:

Code:

glColor4ub((byte *)&d_8to24table[(int)p->color],
           (byte *)&d_8to24table[(int)p->color] + 1,
           (byte *)&d_8to24table[(int)p->color] + 2,
           128);


replace the 128 with whatever alpha value you want, from 0-255


cool it worked Very Happy

but the particles have lost their colouring, and i got 9 warnings
    --------------------Configuration: winquake - Win32 GL Release--------------------
    Compiling...
    r_part.c
    C:\Users\alex\Desktop\quake\src\proquake\r_part.c(676) : warning C4047: 'function' : 'unsigned char ' differs in levels of indirection from 'unsigned char *'
    C:\Users\alex\Desktop\quake\src\proquake\r_part.c(676) : warning C4024: 'glColor4ub' : different types for formal and actual parameter 1
    C:\Users\alex\Desktop\quake\src\proquake\r_part.c(677) : warning C4047: 'function' : 'unsigned char ' differs in levels of indirection from 'unsigned char *'
    C:\Users\alex\Desktop\quake\src\proquake\r_part.c(677) : warning C4024: 'glColor4ub' : different types for formal and actual parameter 2
    C:\Users\alex\Desktop\quake\src\proquake\r_part.c(678) : warning C4047: 'function' : 'unsigned char ' differs in levels of indirection from 'unsigned char *'
    C:\Users\alex\Desktop\quake\src\proquake\r_part.c(678) : warning C4024: 'glColor4ub' : different types for formal and actual parameter 3
    C:\Users\alex\Desktop\quake\src\proquake\r_part.c(679) : warning C4761: integral size mismatch in argument; conversion supplied
    C:\Users\alex\Desktop\quake\src\proquake\r_part.c(679) : warning C4761: integral size mismatch in argument; conversion supplied
    C:\Users\alex\Desktop\quake\src\proquake\r_part.c(679) : warning C4761: integral size mismatch in argument; conversion supplied
    Linking...

    glprotest.exe - 0 error(s), 9 warning(s)


im sorry if im being a bother because im still new to this, i mean, i just figured out how to make the particles square in reckless'es matrix he posted
ill still look into what i can atm Surprised

edit: ouch, i tried adding a "v" to "glColor4ub" and i crashed the engine
_________________
bah
Back to top
View user's profile Send private message AIM Address
mh



Joined: 12 Jan 2008
Posts: 909

PostPosted: Tue Feb 17, 2009 1:13 am    Post subject: Reply with quote

Try this:

Top of R_DrawParticles, declare:
Code:
byte *pcolor;


Instead of the glColor3ub, use:
Code:
pcolor = (byte *) &d_8to24table[(int) p->color];
glColor4ub (pcolor[0], pcolor[1], pcolor[2], 128);


Breaks things up a little, and will be slower (but not that anyone would notice Very Happy ), but it's easier to read/debug/etc for when you're starting out.
_________________
DirectQ Engine - New release 1.8.666a, 9th August 2010
MHQuake Blog (General)
Direct3D 8 Quake Engines
Back to top
View user's profile Send private message Visit poster's website
metlslime



Joined: 05 Feb 2008
Posts: 177

PostPosted: Tue Feb 17, 2009 2:02 am    Post subject: Reply with quote

oops... i didn't derefence that pointer... should be:

Code:
glColor4ub(*(byte *)&d_8to24table[(int)p->color],
           *(byte *)&d_8to24table[(int)p->color] + 1,
           *(byte *)&d_8to24table[(int)p->color] + 2,
           128);


but yeah, mh's code is less messy, maybe just use that instead.
Back to top
View user's profile Send private message
MeTcHsteekle



Joined: 15 May 2008
Posts: 397
Location: its a secret

PostPosted: Tue Feb 17, 2009 2:07 am    Post subject: Reply with quote

thanks, didn't realize there is so many different ways to do different tasks...now i understand why engines take so long to update :O

hmm could i make a cvar for the transparency like :
Code:
pcolor = (byte *) &d_8to24table[(int) p->color];
glColor4ub (pcolor[0], pcolor[1], pcolor[2], parttrans.value);


and then :
Code:

cvar_t   parttrans = {"parttrans", "150", true};  //partical transparancy value...save to conf.


does that look right, and would i put it at the top of r_part.c?
should i make it gl_parttrans or r_parttrans...hmm GL or render

eh?

EDIT:
Quote:
C:\Users\alex\Desktop\quake\src\proquake\r_part.c(680) : warning C4761: integral size mismatch in argument; conversion supplied

DAMN YOU WARNING!!!!!!!!!!!!!!!!!!!![aka does not compute]

EDITEDIT: BUT IT WORKS!!!!!!! WAHAHAHAHAHAHAHAHAHAHAHAHAH ...... I DESERVE A SASH http://www.newgrounds.com/portal/viewer.php?id=474371&key=JuIvOhXzFtOzFxbStiMmY2ODYxNmYyQjMwODIrNl9xNWI1NDE7QjkwQlYxOzJWMzJiNDIwZjcrVnFfOTAxbTk5NTcwNzkxNg%3D%3D
_________________
bah
Back to top
View user's profile Send private message AIM Address
mh



Joined: 12 Jan 2008
Posts: 909

PostPosted: Tue Feb 17, 2009 9:58 am    Post subject: Reply with quote

Cvar values are stored as floats, so try (int) parttrans.value as your alpha input.
_________________
DirectQ Engine - New release 1.8.666a, 9th August 2010
MHQuake Blog (General)
Direct3D 8 Quake Engines
Back to top
View user's profile Send private message Visit poster's website
MeTcHsteekle



Joined: 15 May 2008
Posts: 397
Location: its a secret

PostPosted: Tue Feb 17, 2009 1:42 pm    Post subject: Reply with quote

well, i tried that and still got the same warning [??]
perhaps i shouldn't fix something that's not broken [yet,it might break]. my next question would be how to make them effected by the lights in the map but, it sounds like it might be a lot of work for such a little effect.
so anyways, where should i look to make the particles lives longer, so they linger for a few more seconds? im guessing its still in r_part.c

........well i figured out how to make there lives shorter, now to reverse [heh]

.................got it, in r_part.c under R_DrawParticles
Code:
   frametime = cl.time - cl.oldtime;
   time3 = frametime * 10;//15
   time2 = frametime * 2.2; // 15//10;   //i think i messed up the div. equally
   time1 = frametime * 1.1;//5
   grav = frametime * sv_gravity.value * 0.005; //ligers where it lives
   dvel = 4*frametime;

_________________
bah
Back to top
View user's profile Send private message AIM Address
Display posts from previous:   
Post new topic   Reply to topic    Inside3d Forums Forum Index -> Engine Programming All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2004 phpBB Group