Featured Posts

8. Bump Mapping in GLSL8. Bump Mapping in GLSL Introduction Bump mapping is essential in todays computer games, and computer graphics in general. Would you like to know the best thing about it? It is extremely simple to implement. Bump mapping works...

Read more

Swiftless GLSL Shader DeveloperSwiftless GLSL Shader Developer Swiftless GLSL Shader Developer   Version 0.1a Currently Swiftless GLSL Shader Developer is in it's first public release, and is currently in alpha status, meaning it is not complete and may contain...

Read more

Wordpress Optimization Wordpress Website Optimizations Introduction Wordpress itself is a fairly wonderful tool. Since switching to it, I find it is a lot quicker to make changes to my website and it is also quicker to get...

Read more

36. OpenGL Framebuffers36. OpenGL Framebuffers Introduction Frame buffers are one of those mythical things that we have all heard of, but many beginner OpenGL developers avoid because there is not much information about them, and they can be confusing...

Read more

1. Terrain Class1. Terrain Class Terrain is one of those things that so far, hasn't been perfectly recreated in computer graphics. But it is almost there! Looking over a beautiful landscape can be one of the most amazing feelings in the...

Read more

  • Prev
  • Next

14. OpenGL Fog

Posted on : 25-03-2010 | By : Swiftless | In : OpenGL

Tags: , , ,

3

This tutorial will teach you how to create basic opengl fog. Fog is used in most games, to help simulate both the size and reality of an area. For the fog to work well do this: Enable the opengl depth testing, enable the opengl fog, choose the opengl fog mode, choose the opengl fog color, choose the opengl fog density and set how well we want our opengl fog to look. You can also set the starting and ending distances for the fog, but this is enough for now.

To get started we need some variables for the fog colour and

the density of the fog. I have done it with this:

GLfloat density = 0.3;

GLfloat fogColor[4] = {0.5, 0.5, 0.5, 1.0};

The fog colour is written in four parts, they cover the RGB values

Unfortunately I have been unable to find out what the fourth value

does. Next we have the density which sets how thick our fog is.

If you run the application you can acctually see that a density of 0.3 is acctually

quite thick.

After this we enable our fog and set its parameters.

First off we enable the fog.

glEnable (GL_FOG);

Now we set the fog mode, here i have set it to GL_EXP2, which is quite nice looking.

glFogi (GL_FOG_MODE, GL_EXP2);

Here we set the actual colour of our fog.

glFogfv (GL_FOG_COLOR, fogColor);

Now the density.

glFogf (GL_FOG_DENSITY, density);

And here I have set it up to look the nicest. In large projects, this may slow

down you application.

glHint (GL_FOG_HINT, GL_NICEST);

There are a few other options but I will explain them in the next Fog tutorial.

I will just let you get a grasp at this basic concept before I complicate it

just a little more.

If you have any problems, please email me at swiftless@gmail.com

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

27.

28.

29.

30.

31.

32.

33.

34.

35.

36.

37.

38.

39.

40.

41.

42.

43.

44.

45.

46.

47.

48.

49.

50.

51.

52.

53.

54.

55.

56.

57.

58.

59.

60.

61.

62.

63.

64.

65.

66.

#include <GL/gl.h>

#include <GL/glut.h>

GLfloat angle = 0.0;

GLfloat density = 0.3; //set the density to 0.3 which is
acctually quite thick

GLfloat fogColor[4] = {0.5, 0.5, 0.5, 1.0}; //set the for
color to grey

void cube (void) {

glRotatef(angle, 1.0, 0.0, 0.0);

glRotatef(angle, 0.0, 1.0, 0.0);

glRotatef(angle, 0.0, 0.0, 1.0);

glColor3f(1.0, 0.0, 0.0);

glutSolidCube(2);

}

void init (void) {

glEnable (GL_DEPTH_TEST); //enable the depth testing

glEnable (GL_FOG); //enable the fog

glFogi (GL_FOG_MODE, GL_EXP2); //set the fog mode to GL_EXP2

glFogfv (GL_FOG_COLOR, fogColor); //set the fog color to
our color chosen above

glFogf (GL_FOG_DENSITY, density); //set the density to the
value above

glHint (GL_FOG_HINT, GL_NICEST); // set the fog to look the
nicest, may slow down on older cards

}

void display (void) {

glClearColor (0.0,0.0,0.0,1.0);

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

cube();

glutSwapBuffers();

angle ++;

}

void reshape (int w, int h) {

glViewport (0, 0, (GLsizei)w, (GLsizei)h);

glMatrixMode (GL_PROJECTION);

glLoadIdentity ();

gluPerspective (60, (GLfloat)w / (GLfloat)h, 1.0, 100.0);

glMatrixMode (GL_MODELVIEW);

}

int main (int argc, char **argv) {

glutInit (&argc, argv);

glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH
);

glutInitWindowSize (500, 500);

glutInitWindowPosition (100, 100);

glutCreateWindow (“A basic OpenGL Window);

init ();

glutDisplayFunc (display);

glutIdleFunc (display);

glutReshapeFunc (reshape);

glutMainLoop ();

return 0;

}

VN:F [1.9.3_1094]
Please rate so I know where to improve the site. 1 means needs a lot of improvement, 10 means perfect. If you leave a low rating, please state why. I don't want people just coming to bash the site.
Rating: 7.0/10 (3 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
14. OpenGL Fog, 7.0 out of 10 based on 3 ratings

Related posts:

  1. 15. OpenGL Fog Types
  2. 19. OpenGL Fullscreen Mode
  3. 9. OpenGL Blending
  4. 13. OpenGL Lighting Types
  5. 21. OpenGL Display Lists

Comments (3)

Heya, cool tutorials, keep them up!

btw, I think the fourth value in your fog color is the alpha value, obviously it will only make a change if you have blending enabled. Could be interesting to see if it blends with your glClearColor aye? :)

VA:F [1.9.3_1094]
Rating: 0.0/5 (0 votes cast)
VA:F [1.9.3_1094]
Rating: 0 (from 0 votes)

Hey, nice tutorials. On tutorial 14 “OpenGL Fog” The intro is repeated twice. Just so you know.

VA:F [1.9.3_1094]
Rating: 0.0/5 (0 votes cast)
VA:F [1.9.3_1094]
Rating: 0 (from 0 votes)

Thanks for the heads up Ted, I’ll fix that up.

Cheers,
Swiftless

VN:F [1.9.3_1094]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)

Write a comment

Improve the web with Nofollow Reciprocity.