CG Lab P6

Download as pdf or txt
Download as pdf or txt
You are on page 1of 3

15CSL68 – Computer Graphics Lab Manual

6. Program to draw a simple shaded scene consisting of a tea pot on a table. Define suitably
the position and properties of the light source along with the properties of the properties of
the surfaces of the solid object used in the scene.

#include<GL/glut.h>
void teapot(GLfloat x, GLfloat y, GLfloat z)
{
glPushMatrix (); //save the current state
glTranslatef (x, y, z); //move your item appropriately
glutSolidTeapot (0.1); //render your teapot
glPopMatrix (); //get back your state with the recent changes that you have done
}

void tableTop(GLfloat x, GLfloat y, GLfloat z) // table top which is actually a CUBE


{
glPushMatrix — pushes the current matrix stack. There is a stack of matrices for
glPushMatrix (); each of the matrix modes. In GL_MODELVIEW mode, the stack depth is at least
glTranslatef (x, y, z); 32. In the other modes, GL_COLOR, GL_PROJECTION, and GL_TEXTURE, the
depth is at least 2. The current matrix in any mode is the matrix on the top of the
glScalef (0.6, 0.02, 0.5);
stack for that mode. glPushMatrix pushes the current matrix stack down by one,
glutSolidCube (1); duplicating the current matrix. That is, after a glPushMatrix call, the matrix on top
glPopMatrix (); of the stack is identical to the one below it. glPopMatrix pops the current matrix
stack, replacing the current matrix with the one below it on the stack. Initially, each
}
of the stacks contains one matrix, an identity matrix.

void tableLeg(GLfloat x, GLfloat y, GLfloat z) // table leg which is actually a CUBE


{
glPushMatrix ();
glutSolidCube(size) and glutWireCube(size) render a
glTranslatef (x, y, z);
solid or wireframe cube respectively. The cube is
glScalef (0.02, 0.3, 0.02);
centered at the modeling coordinates’ origin with sides
glutSolidCube (1);
of length size.
glPopMatrix ();
}

void wall(GLfloat x, GLfloat y, GLfloat z) // wall which is actually a CUBE


{
glPushMatrix ();
glTranslatef (x, y, z);
glScalef (1, 1, 0.02);
glutSolidCube (1);
glPopMatrix ();
}

void light() // set the lighting arrangements


{
GLfloat mat_ambient[] = {1, 1, 1, 1}; // ambient colour
GLfloat mat_diffuse[] = {0.5, 0.5, 0.5, 1};
GLfloat mat_specular[] = {1, 1, 1, 1};
GLfloat mat_shininess[] = {50.0f}; // shininess value

BMSIT & M, Bengaluru -560064 | Author: Mr. Shankar R, Asst. Prof, CSE 6
15CSL68 – Computer Graphics Lab Manual

glMaterialfv (GL_FRONT, GL_AMBIENT, mat_ambient); glMaterial — specify material


parameters for the lighting model. fv
glMaterialfv (GL_FRONT, GL_DIFFUSE, mat_diffuse);
means floating point vector
glMaterialfv (GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv (GL_FRONT, GL_SHININESS, mat_shininess); glMaterial takes three arguments.
The first, face, specifies whether
the GL_FRONT materials,
GLfloat light_position[] = {2, 6, 3, 1};
the GL_BACK materials, or
GLfloat light_intensity[] = {0.7, 0.7, 0.7, 1}; both GL_FRONT_AND_BACK materials
will be modified. The second, pname,
glLightfv (GL_LIGHT0, GL_POSITION, light_position); specifies which of several parameters
glLightfv (GL_LIGHT0, GL_DIFFUSE, light_intensity); in one or both sets will be modified.
The third, params, specifies what
}
value or values will be assigned to the
specified parameter.
void display()
{
GLfloat teapotP = -0.07, tabletopP = -0.15, tablelegP = 0.2, wallP = 0.5;
glClear (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

gluLookAt (-2, 2, 5, 0, 0, 0, 0, 1, 0); // camera position & viewing

light (); //Adding light source to your project

teapot (0, teapotP, 0); //Create teapot


glLight sets the values of
tableTop (0, tabletopP, 0); //Create table’s top individual light source
parameters. It takes 3
tableLeg (tablelegP, -0.3, tablelegP); //Create 1st leg parameters – light, pname,
tableLeg (-tablelegP, -0.3, tablelegP); //Create 2nd leg params.
tableLeg (-tablelegP, -0.3, -tablelegP); //Create 3rd leg light names the light and is a
tableLeg (tablelegP, -0.3, -tablelegP); //Create 4th leg symbolic name of the
form GL_LIGHT i, where i ranges
wall (0, 0, -wallP); //Create 1st wall from 0 to the value
glRotatef (90, 1, 0, 0); of GL_MAX_LIGHTS -1.

wall (0, 0, wallP); //Create 2nd wall pname specifies one of ten light
glRotatef (90, 0, 1, 0); source parameters, again by
symbolic name.
wall (0, 0, wallP); //Create 3rd wall params is either a single value or
a pointer to an array that
glFlush (); // show the output to the user contains the new values.
}
void init()
{
glClearColor (0, 0, 0, 1); // black colour background
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glOrtho (-1, 1, -1, 1, -1, 10);
glMatrixMode (GL_MODELVIEW);
}
BMSIT & M, Bengaluru -560064 | Author: Mr. Shankar R, Asst. Prof, CSE 7
15CSL68 – Computer Graphics Lab Manual

int main (int argc, char **argv)


{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(500, 500);
glutInitWindowPosition(0, 0);
glutCreateWindow("Teapot on a table");

init();

glutDisplayFunc(display);

glEnable(GL_LIGHTING); // enable the lighting properties


glEnable(GL_LIGHT0); // enable the light source

glShadeModel(GL_SMOOTH); // for smooth shading (select flat or smooth shading)

glEnable(GL_NORMALIZE); // If enabled and no vertex shader is active, normal vectors


are normalized to unit length after transformation and before
lighting.
glEnable(GL_DEPTH_TEST); // do depth comparisons and update the depth buffer.

glutMainLoop();
}

***********************************************************************************
OUTPUT

BMSIT & M, Bengaluru -560064 | Author: Mr. Shankar R, Asst. Prof, CSE 8

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy