This lighting model is build on the basis of phong model,Which supports three types of light material interactions namely Specular, ambient, diffuse. The ambient source color represents the interaction of a light source with surface whereas the specular source color is designed to produce the desired color of a specular highlights.
Lighting model is built by summing the contributions for all the light sources at each point we wish to light. For each light source, have to compute the amount of light reflected for each of the nine terms in the illumination array. The contribution can be computed for each color source by adding the ambient, diffuse, specular components.
There are four vector parameters that can set, the position of light source and amount of ambient, diffuse, specular Light associated with the source. Both lighting should be enabled and particular source. When small amount of white light is needed, even when all light sources are turned off or disabled following code can be used.
Glfloat global_ambient[]={0.1,0.1,0.1,0.1};
This source code is to make a simple car that can move from side to side.
OpenGL Program: -
PHP Code:
#include <GL/glut.h> // Header File For The GLUT Library #include <GL/gl.h> // Header File For The OpenGL32 Library #include <GL/glu.h> // Header File For The GLu32 Library //#include <unistd.h> // Header File For sleeping.
/* ASCII code for the escape key. */ #define ESCAPE 27
/* The number of our GLUT window */ int window;
/* rotation angle for the triangle. */ float rtri = 0.0f;
/* rotation angle for the quadrilateral. */ float rquad = 0.0f;
/* A general OpenGL initialization function. Sets all of the initial parameters. */ // We call this right after our OpenGL window is created. void InitGL(int Width, int Height) { // This Will Clear The Background Color To Black glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepth(1.0); // Enables Clearing Of The Depth Buffer glDepthFunc(GL_LESS); // The Type Of Depth Test To Do glEnable(GL_DEPTH_TEST); // Enables Depth Testing glShadeModel(GL_SMOOTH); // Enables Smooth Color Shading
glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Reset The Projection Matrix
/* The function called when our window is resized (which shouldn't happen, because we're fullscreen) */ void ReSizeGLScene(int Width, int Height) { if (Height==0) // Prevent A Divide By Zero If The Window Is Too Small Height=1;
glViewport(0, 0, Width, Height); // Reset The Current Viewport And Perspective Transformation
void drawBall(void) { glColor3f(0.0, 1.0, 0.0); //set ball colour glTranslatef(ballX,ballY,ballZ); //moving it toward the screen a bit on creation //glRotatef(ballX,ballX,ballY,ballZ); glutSolidSphere (0.3, 20, 20); //create ball. glTranslatef(ballX+1.5,ballY,ballZ); //moving it toward the screen a bit on creation glutSolidSphere (0.3, 20, 20); // }
/* The main drawing function. */ void DrawGLScene() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer glLoadIdentity(); // Reset The View
glTranslatef(rtri,0.0f,-6.0f); // Move Left 1.5 Units And Into The Screen 6.0
//glRotatef(rtri,1.0f,0.0f,0.0f); // Rotate The Triangle On The Y axis // draw a triangle (in smooth coloring mode) glBegin(GL_POLYGON); // start drawing a polygon glColor3f(1.0f,0.0f,0.0f); // Set The Color To Red glVertex3f(-1.0f, 1.0f, 0.0f); // Top left glVertex3f(0.4f, 1.0f, 0.0f);
glVertex3f(1.0f, 0.4f, 0.0f);
glColor3f(0.0f,1.0f,0.0f); // Set The Color To Green glVertex3f( 1.0f,0.0f, 0.0f); // Bottom Right glColor3f(0.0f,0.0f,1.0f); // Set The Color To Blue glVertex3f(-1.0f,0.0f, 0.0f);// Bottom Left
//glVertex3f(); glEnd(); // we're done with the polygon (smooth color interpolation) drawBall();
rtri+=0.005f; // Increase The Rotation Variable For The Triangle if(rtri>2) rtri=-2.0f; rquad-=15.0f; // Decrease The Rotation Variable For The Quad
// swap the buffers to display, since double buffering is used. glutSwapBuffers(); }
/* The function called whenever a key is pressed. */ void keyPressed(unsigned char key, int x, int y) { /* sleep to avoid thrashing this procedure */ // usleep(100);
/* If escape is pressed, kill everything. */ if (key == ESCAPE) { /* shut down our window */ glutDestroyWindow(window);
/* exit the program...normal termination. */ exit(0); } }
int main(int argc, char **argv) { glutInit(&argc, argv);