Advertisement Jump to content
Sign in to follow this  

nehe tutorial - triangle strips

This topic is 2846 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I have read this nehe tutorial about triangle strips:

I would like to make something like fountain:
But now I have only something that:

I don't understand why my current fountain is in white colour (it should have many colours) and why it is round - could you help ?

#define MAX_PARTICLES 1000

float slowdown=2.0f; // Slow Down Particles
float xspeed; // Base X Speed (To Allow Keyboard Direction Of Tail)
float yspeed; // Base Y Speed (To Allow Keyboard Direction Of Tail)
float zoom=-40.0f; // Used To Zoom Out

GLuint col; // Current Color Selection
GLuint delay; // Rainbow Effect Delay

typedef struct // Create A Structure For Particle
bool active; // Active (Yes/No)
float life; // Particle Life
float fade; // Fade Speed
float r; // Red Value
float g; // Green Value
float b; // Blue Value
float x; // X Position
float y; // Y Position
float z; // Z Position
float xi; // X Direction
float yi; // Y Direction
float zi; // Z Direction
float xg; // X Gravity
float yg; // Y Gravity
float zg; // Z Gravity
particles; // Particles Structure

particles particle[MAX_PARTICLES]; // Particle Array (Room For Particle Info)

static GLfloat colors[12][3]= // Rainbow Of Colors

//draw scene:
void Render()

glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glClearColor(0.0f,0.0f,0.0f,0.0f); // Black Background
glClearDepth(1.0f); // Depth Buffer Setup
glDisable(GL_DEPTH_TEST); // Disable Depth Testing
glEnable(GL_BLEND); // Enable Blending
glBlendFunc(GL_SRC_ALPHA,GL_ONE); // Type Of Blending To Perform
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); // Really Nice Perspective Calculations
glHint(GL_POINT_SMOOTH_HINT,GL_NICEST); // Really Nice Point Smoothing

GLuint tex = LoadTexture("../images/Particle.bmp"); //loading texture using SDL

glEnable(GL_TEXTURE_2D); // Enable Texture Mapping

for (int loop=0;loop<MAX_PARTICLES;loop++) // Initials All The Textures
particle[loop].active=true; // Make All The Particles Active
particle[loop].life=1.0f; // Give All The Particles Full Life
particle[loop].fade=float(rand()%100)/1000.0f+0.003f; // Random Fade Speed
particle[loop].r=colors[loop*(12/MAX_PARTICLES)][0]; // Select Red Rainbow Color
particle[loop].g=colors[loop*(12/MAX_PARTICLES)][1]; // Select Red Rainbow Color
particle[loop].b=colors[loop*(12/MAX_PARTICLES)][2]; // Select Red Rainbow Color
particle[loop].xi=float((rand()%50)-26.0f)*10.0f; // Random Speed On X Axis
particle[loop].yi=float((rand()%50)-25.0f)*10.0f; // Random Speed On Y Axis
particle[loop].zi=float((rand()%50)-25.0f)*10.0f; // Random Speed On Z Axis
particle[loop].xg=0.0f; // Set Horizontal Pull To Zero
particle[loop].yg=-0.8f; // Set Vertical Pull Downward
particle[loop].zg=0.0f; // Set Pull On Z Axis To Zero

for (int loop=0;loop<MAX_PARTICLES;loop++) // Loop Through All The Particles
if (particle[loop].active) // If The Particle Is Active
float x=particle[loop].x; // Grab Our Particle X Position
float y=particle[loop].y; // Grab Our Particle Y Position
float z=particle[loop].z+zoom; // Particle Z Pos + Zoom

// Draw The Particle Using Our RGB Values, Fade The Particle Based On It's Life

glBegin(GL_TRIANGLE_STRIP); // Build Quad From A Triangle Strip
glTexCoord2d(1,1); glVertex3f(x+0.5f,y+0.5f,z); // Top Right
glTexCoord2d(0,1); glVertex3f(x-0.5f,y+0.5f,z); // Top Left
glTexCoord2d(1,0); glVertex3f(x+0.5f,y-0.5f,z); // Bottom Right
glTexCoord2d(0,0); glVertex3f(x-0.5f,y-0.5f,z); // Bottom Left
glEnd(); // Done Building Triangle Strip

particle[loop].x+=particle[loop].xi/(slowdown*1000);// Move On The X Axis By X Speed
particle[loop].y+=particle[loop].yi/(slowdown*1000);// Move On The Y Axis By Y Speed
particle[loop].z+=particle[loop].zi/(slowdown*1000);// Move On The Z Axis By Z Speed

particle[loop].xi+=particle[loop].xg; // Take Pull On X Axis Into Account
particle[loop].yi+=particle[loop].yg; // Take Pull On Y Axis Into Account
particle[loop].zi+=particle[loop].zg; // Take Pull On Z Axis Into Account
particle[loop].life-=particle[loop].fade; // Reduce Particles Life By 'Fade'

if (particle[loop].life<0.0f) // If Particle Is Burned Out
particle[loop].life=1.0f; // Give It New Life
particle[loop].fade=float(rand()%100)/1000.0f+0.003f; // Random Fade Value
particle[loop].x=0.0f; // Center On X Axis
particle[loop].y=0.0f; // Center On Y Axis
particle[loop].z=0.0f; // Center On Z Axis
particle[loop].xi=xspeed+float((rand()%60)-32.0f); // X Axis Speed And Direction
particle[loop].yi=yspeed+float((rand()%60)-30.0f); // Y Axis Speed And Direction
particle[loop].zi=float((rand()%60)-30.0f); // Z Axis Speed And Direction
particle[loop].r=colors[col][0]; // Select Red From Color Table
particle[loop].g=colors[col][1]; // Select Green From Color Table
particle[loop].b=colors[col][2]; // Select Blue From Color Table


Share this post

Link to post
Share on other sites
Can't see anything obvious wrong with it, does your colours get set properly? If you did:

float r = particle[color="#666600"][loop[color="#666600"]].r;
float g = particle[color="#666600"][loop[color="#666600"]].g;
float b = particle[color="#666600"][loop[color="#666600"]].b;
float a = particle[color="#666600"][loop[color="#666600"]].life;
glColor4f[color="#666600"](r[color="#666600"], g[color="#666600"], b[color="#666600"], a[color="#666600"]);

Do you get expected values? try it without using the texture, do you get expected colors?

Also, you might get more help with a more appropriate title (I don't think this is related to triangle strips - though it could be). You could try using GL_TRIANGLES instead of a strip and see if that helps.

glVertex3f top right
glVertex3f top left
glVertex3f bottom right
glVertex3f top left
glVertex3f bottom left
glVertex3f bottom right

Share this post

Link to post
Share on other sites
I had enabled white light and this was the reason white colour but how I can change height fountain, now it is circular...

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!