libpsys

diff src/psys_gl.c @ 20:0a53b22f7caf

the billboarding was wrong ...
author John Tsiombikas <nuclear@member.fsf.org>
date Tue, 18 Sep 2012 09:38:48 +0300
parents 3871a45a4e4b
children
line diff
     1.1 --- a/src/psys_gl.c	Mon Sep 17 08:21:39 2012 +0300
     1.2 +++ b/src/psys_gl.c	Tue Sep 18 09:38:48 2012 +0300
     1.3 @@ -18,17 +18,6 @@
     1.4  
     1.5  void psys_gl_draw_start(struct psys_emitter *em, void *cls)
     1.6  {
     1.7 -	float xform[16];
     1.8 -
     1.9 -	glMatrixMode(GL_MODELVIEW);
    1.10 -	glPushMatrix();
    1.11 -
    1.12 -	glGetFloatv(GL_MODELVIEW_MATRIX, xform);
    1.13 -	xform[0] = xform[5] = xform[10] = 1.0;
    1.14 -	xform[1] = xform[2] = xform[4] = xform[6] = xform[8] = xform[9] = 0.0;
    1.15 -
    1.16 -	glLoadMatrixf(xform);
    1.17 -
    1.18  	glPushAttrib(GL_ENABLE_BIT);
    1.19  	glDisable(GL_LIGHTING);
    1.20  
    1.21 @@ -41,39 +30,48 @@
    1.22  	}
    1.23  
    1.24  	glDepthMask(0);
    1.25 -
    1.26 -	glBegin(GL_QUADS);
    1.27 -	glColor3f(1, 1, 1);
    1.28  }
    1.29  
    1.30  void psys_gl_draw(struct psys_emitter *em, struct psys_particle *p, void *cls)
    1.31  {
    1.32  	float hsz = p->size / 2.0;
    1.33  
    1.34 +	float xform[16];
    1.35 +
    1.36 +	glMatrixMode(GL_MODELVIEW);
    1.37 +	glPushMatrix();
    1.38 +
    1.39 +	glTranslatef(p->pos.x, p->pos.y, p->pos.z);
    1.40 +
    1.41 +	glGetFloatv(GL_MODELVIEW_MATRIX, xform);
    1.42 +	xform[0] = xform[5] = xform[10] = 1.0;
    1.43 +	xform[1] = xform[2] = xform[4] = xform[6] = xform[8] = xform[9] = 0.0;
    1.44 +	glLoadMatrixf(xform);
    1.45 +
    1.46 +	glBegin(GL_QUADS);
    1.47  	glColor4f(p->color.x, p->color.y, p->color.z, p->alpha);
    1.48  
    1.49  	glTexCoord2f(0, 0);
    1.50 -	glVertex3f(p->pos.x - hsz, p->pos.y - hsz, p->pos.z);
    1.51 +	glVertex2f(-hsz, -hsz);
    1.52  
    1.53  	glTexCoord2f(1, 0);
    1.54 -	glVertex3f(p->pos.x + hsz, p->pos.y - hsz, p->pos.z);
    1.55 +	glVertex2f(hsz, -hsz);
    1.56  
    1.57  	glTexCoord2f(1, 1);
    1.58 -	glVertex3f(p->pos.x + hsz, p->pos.y + hsz, p->pos.z);
    1.59 +	glVertex2f(hsz, hsz);
    1.60  
    1.61  	glTexCoord2f(0, 1);
    1.62 -	glVertex3f(p->pos.x - hsz, p->pos.y + hsz, p->pos.z);
    1.63 +	glVertex2f(-hsz, hsz);
    1.64 +	glEnd();
    1.65 +
    1.66 +	glMatrixMode(GL_MODELVIEW);
    1.67 +	glPopMatrix();
    1.68  }
    1.69  
    1.70  void psys_gl_draw_end(struct psys_emitter *em, void *cls)
    1.71  {
    1.72 -	glEnd();
    1.73 -
    1.74  	glDepthMask(1);
    1.75  	glPopAttrib();
    1.76 -
    1.77 -	glMatrixMode(GL_MODELVIEW);
    1.78 -	glPopMatrix();
    1.79  }
    1.80  
    1.81