Visvesvaraya Technological University BELGAUM-590014: Walking Robot
Visvesvaraya Technological University BELGAUM-590014: Walking Robot
BELGAUM-590014
CERTIFICATE
This is to certify that the Mini-Project on Computer Graphics and Visualization work entitled
“Walking Robot” has been successfully carried out by NIKET AGRAWAL (1DT19CS095)
and PRUTHIVIKA V (1DT19CS119) a bonafide students of Dayananda Sagar Academy of
Technology and Management in partial fulfilment of the requirements for the award of
degree in Bachelor of Engineering in Computer Science and Engineering of Visvesvaraya
Technological University, Belgaum during academic year 2021-2022. It is certified that
all corrections/suggestions indicated for Internal Assessment have been incorporated in
the report deposited in the departmental library. The mini project report has been approved as it
satisfies the academic requirements in respect of project work for the said degree.
Dr. C. NANDINI
(Vice Principal & HOD, Dept. of CSE)
Examiners: Signature with Date
1:
2:
ABSTRACT
This is an animation to view a walking robot. The robot can be rendered in both a
wireframe view and in shaded view. There are options to manipulate the robot arms,
head and torso.
Requirements for advance animated robot opengl mini projects
While presenting this Graphics Project on “Walikng Robot”, I feel that it is our duty to
acknowledge the help rendered to us by various persons.
Firstly I thank God for showering his blessings on me. I am grateful to my institution
Dayananda Sagar Academy of Technology for providing me a congenial atmosphere to carry out
the project successfully.
I would also like to express my heartfelt gratitude to Dr.C Nandini, Prof. Vice
Principal & HOD, Computer Science and Engineering Department, whose guidance and
support was truly invaluable.
I would also indebted to my Parents and Friends for their continued moral and material
support throughout the course of project and helping me in finalize the presentation.
My heartful thanks to all those have contributed bits, bytes and words to accomplish this
Project.
Thanking you all,
Niket Agrawal (1DT19CS095)
Pruthivika v (1DT19CS119)
TABLE OF CONTENTS
CHAPTER NAME PAGE NO.
1. INTRODUCTION ………………………………………1
1.1 Introduction To OpenGL………………………………………….1
1.2 Computer Graphics ………………………..……………………. 1
1.3 A Brief History of OpenGL………………………………………. 2
1.3.1 What is OpenGL…………………………………………...3
1.3.2 Programming using OpenGL: A first Introduction…………..3
1.4 OpenGL(Open Graphics Library)………………………………….4
3. SYSTEM DESIGN…………………..………………….6
3.1System Architecture.…………………………………………..……...6
4. IMPLEMENTATION…………………….……………7
4.1Implementation of OpenGL Built in functions used………………...7
4. 2Implementation of User Defined functions………………….…….9
5. SNAPSHOTS……..………………………………………………15
5.1Introduction……….………………………………...…………………15
5.2Menu…………..…………………………………….…………….16
5.3Robot start …………………………………………………………17
5.4How do i……………………………………………………………18
5.5Instruction to move arms…………………………………….……...18
5.6Instructiontomovelegs………………………………………………….19
5.7Refraction_after………………………………….……………………19
6. FUCTURE ENHANCEMENT……….…..………...….20
REFERENCES……………………………………………………….….20
A.1:Source code……………………………………………………….21
Online Examination System
CHAPTER 1
INTRODUCTION
1.1 INTRODUCTION TO OPEN-GL
The totality of computer graphics software encompasses the concepts from data
structures, from data base design and management, from the psychology, ergonometric of the
man-machine interface, from programming languages and operating system.
Numerous computer graphics standards can be grouped following categories.
z
• First is the graphics application interface, where ideas are translated into a form that is
understandable by a computer system. Current representative standards are the GKS,
• The Second is concerned with the storage and transmission of data between graphics
manufacturing systems. The current standard in this area is the Initial Graphics Exchange
Specification (IGES).
A computer graphics system is a computer system with all the components of the general
purpose computer system. There are five major elements in system: input devices, processor,
memory, frame buffer, output devices.
In 1992 the OpenGL Architectural Review Board (OpenGL ARB) was established. The OpenGL
ARB is a group of companies that maintain and update the OpenGL standard.
In 2003 the first OpenGL (Exchange Specification) ES specification was released. OpenGL ES is
a subset of OpenGL designed for mobile phones, embedded devices and video game systems.
In 2004 the OpenGL 2.0 specification was released, including the GLSL (OpenGL Shading
Operations
OpenGL provides a powerful but primitive set of rendering commands, and all higher-level
drawing must be done in terms of these commands. Also, OpenGL programs have to use the
underlying mechanisms of the windowing system. A number of libraries exist to allow you to
simplify your programming tasks, including the following:
• The OpenGL Utility Library (GLU) contains several routines that use lower-level OpenGL
commands to perform such tasks as setting up matrices for specific viewing orientations and
projections, performing polygon tessellation, and rendering surfaces. GLU routines use the
prefix glu.
• The OpenGL Utility Toolkit (GLUT) is a window system-independent toolkit, written by
Mark Kilgard, to hide the complexities of differing window system APIs. GLUT is the
subject of the next section, and it’s described in more detail in Mark Kilgard’s book
OpenGL Programming for the X Window System (ISBN 0-201-48359-9). GLUT routines
use the prefix glut. "How to Obtain the Sample Code" in the Preface describes how to
obtain the source code for GLUT, using ftp.
CHAPTER 2
REQUIREMENTS SPECIFICATION
• Software installed preferably 6.0 or later versions with mouse driver installed.
• GLUT libraries, Glut utility toolkit must be available.
CHAPTER 3
SYSTEM DESIGN
Design of any software depends on the architecture of the machine on which that software
runs, for which the designer needs to know the system architecture. Design process involves
design of suitable algorithms, modules, subsystems, interfaces etc.
CHAPTER 4
IMPLEMENTATION
The implementation stage of this model involves the following phases.
2.glutInitDisplayMode():
glutInitDisplayMode sets the initial display mode.
Usage:void glutInitDisplayMode (unsigned int mode);
Mode-Display mode, normally the bitwise OR-ing of GLUT display mode bit masks.
Description:The initial display mode is used when creating top-level windows, sub windows,
and overlays to determine the OpenGL display mode for the to-be-created window or overlay.
3.glutCreateWindow(): glutCreateWindow
creates a top-level window.
Usage:intglutCreateWindow(char *name);
Name - ASCII character string for use as window name.
Description:glutCreateWindow creates a top-level window. The name will be provided to the
window system as the window's name. The intent is that thewindow system will label the
window with the name. Implicitly, the currentwindowis set to thenewly created window. Each
created window has a unique associated OpenGL context.
4.glutDisplayFunc():
glutDisplayFunc sets the display callback for the current window.
5.glutMainLoop():
glutMainLoop enters the GLUT event processing loop.
Usage:void glutMainLoop(void);
Description: glutMainLoop enters the GLUT event processing loop. This routine should be
called at most once in a GLUT program. Once called, this routine will never return. It will call as
necessary any callbacks that have been registered.
6.glMatrixMode( ):
The two most important matrices are the model-view and projection matrix. At any time, the
state includes values for both of these matrices, which are initially set to identity matrices. There
is only a single set of functions that can be applied to any type of matrix. Select the matrix to
which the operations apply by first set in the matrix mode, a variable that is set to one type of
matrix and is also part of the state.
7.glutTimerFunc();
glutTimerFunc registers a timer callback to be triggered in a specified number of milliseconds.
simultaneously. The number of milliseconds is a lower bound on the time before the callback is
generated. GLUT attempts to deliver the timer callback as soon as possible after the expiration of
the callback's time interval. There is no support for canceling a registered callback. Instead,
ignore a callback based on its value parameter when it is triggered.
3.void Heel2Add(void):
This is the start of the body motion function.
This function is used to add heel
3.void RotateAdd():
4.void TurnLeft()
5.void DrawTextXY():
This functions is used to draw the cloud using combinations of circle() function and is moved
using glTranslate() function.
9.fish1(),fish2(),fish3():
This functions is used to draw the fishes using the combination of gl(QUADS) and
gl(TRIANGLES), and gl(POINTS) is used to draw the eyes for the fish.
10.DrawTrees():
This function is used to draw the tree in the water, the trees is drawn using
glBegin(GL_POLYGON);
12.void fonts():
This function contains one dimensional array the content of the array is the various font styles, in
which we have specified the various font styles used to display the Strings on the screen.
13.void menu():
This function is used to display the menu content using bitmap() function.
14.void discription():
This function is used to display the Snell’s law definition using bitmap() function.
This functions specify incident and refraction display respectively in this function we have called
the used defined functions based up on the requirement.
16.void menuset():
This function is used in the Display() function to diplay the content for each frame on the screen
based up on the key pressed in the keyboard using glMatrixMode(GL_PROJECTION); and
glMatrixMode(GL_MODELVIEW); .
17.Display():
In this function we have used the flag and depending on the flag the corresponding frame is
displayed on the screen.
This function has following parameters char which represents the the character on the keyboard
depending up the character we have pressed the corresponding flag bit is enabled and the content
is displayed accordingly x and y are the pixel position.
This is the function from where the execution of the program begins.
In this function we have certain “gl” functions used to initialize the basic glut window with
desired properties. After initialization the display function is called with respect to the window
and finally the last statement of this section is the glutMainLoop(). Which is an event processing
function that enters into an infinite loop.
CHAPTER 5
SNAPSHOTS
• Start Walk
• Stop Walk
• Toggle Wireframe
• Quit
CHAPTER 6
FUTURE ENHANCEMENT
We have implemented the essential features of the ray bending up on incident on surface of water to
our best knowledge. Even still, we would like to enhance the quality and appearance of the snell’s
law in the following ways:
• 3D View
• Enhanced appearance
• Lighting and shading
• Implementation of night mode
REFERENCES
Books:
1. Computer Graphics with OpenGL Version,3rd Edition, Donald Hearn & Pauline Baker
2.Interactive Computer Graphics-A Top Down approach with OpenGL,5 rd Edition,Edward Angel
Websites:
1. http://www.amazon.in/Computer-Graphics-Multimedia-Udit-
Agarwal/dp/935014316X?tag=googinhydr18418-21
2. http://en.wikipedia.org/wiki/Computer_graphics
3. http://stackoverflow.com/questionsquickly
4. http://www.opengl-tutorial.org/intermediate-tutorials/
5. http://www.opengl-tutorial.org/
6. https://open.gl/
7. http://www.cs.uccs.edu/~ssemwal/indexGLTutorial.html
8. http://www.videotutorialsrock.com/
9. http://ogldev.atspace.co.uk/
10. https://www.opengl.org/sdk/docs/tutorials/
11. http://learnopengl.com/
12. http://lazyfoo.net/tutorials/OpenGL/
13. http://en.wikibooks.org/wiki/OpenGL_Programming
heel1 = 0,
heel2 = 0, hip11 = 0, hip12 = 10, hip21 = 0, hip22 = 10, fire = 0,
solid_part = 0, anim = 0, turn = 0, turn1 = 0, lightturn = 0, lightturn1
= 0;
float elevation = 0.0, distance = 0.0, frame = 3.0
#ifdef LIGHT
GLfloat mat_specular[] = {0.0, 0.0, 1.0, 1.0};
GLfloat mat_ambient[] ={0.0, 0.0, 1.0, 1.0};
GLfloat mat_diffuse[] ={0.0, 0.0, 1.0, 1.0};
GLfloat mat_shininess[] ={128.0 * 0.4};
GLfloat mat_specular2[] ={0.508273, 0.508273, 0.508373};
GLfloat mat_ambient2[] ={0.19225, 0.19225, 0.19225};
GLfloat mat_diffuse2[] ={0.50754, 0.50754, 0.50754};
GLfloat mat_shininess2[] ={128.0 * 0.6};
GLfloat mat_specular3[] = {1.0, 1.0, 0.0};
GLfloat mat_ambient3[] ={1.0, 1.0, 0.0};
GLfloat mat_diffuse3[] ={1.0, 1.0, 0.0};
GLfloat mat_shininess3[] ={0.0 * 0.0};
GLfloat mat_specular4[] = {0.633, 0.727811, 0.633};
GLfloat mat_ambient4[] = {0.0215, 0.1745, 0.0215};
GLfloat mat_diffuse4[] = {0.07568, 0.61424, 0.07568};
GLfloat mat_shininess4[] = {128 * 0.6};
GLfloat mat_specular5[] ={0.60, 0.60, 0.50};
GLfloat mat_ambient5[] {0.0, 0.0, 0.0};
GLfloat mat_diffuse5[] ={0.5, 0.5, 0.0};
GLfloat mat_shininess5[] ={128.0 * 0.25};
#endif
void Heel1Add(void)
{
heel1 = (heel1 + 3) % 360;
}
void Heel1Subtract(void)
{
heel1 = (heel1 - 3) % 360;
}
void Heel2Add(void)
{
heel2 = (heel2 + 3) % 360;
}
void Heel2Subtract(void)
{
heel2 = (heel2 - 3) % 360;
}
void Ankle1Add(void)
{
ankle1 = (ankle1 + 3) % 360;
}
void Ankle1Subtract(void)
{
}
void shoulder2Add(void)
{
shoulder2 = (shoulder2 + 5) % 360;
}
void shoulder2Subtract(void)
{
shoulder2 = (shoulder2 - 5) % 360;
}
void shoulder3Add(void)
{
shoulder3 = (shoulder3 + 5) % 360;
}
void shoulder3Subtract(void)
{
shoulder3 = (shoulder3 - 5) % 360;
}
void shoulder4Add(void)
{
shoulder4 = (shoulder4 + 5) % 360;
}
void shoulder4Subtract(void)
{
shoulder4 = (shoulder4 - 5) % 360;
}
void lat1Raise(void)
{
lat1 = (lat1 + 5) % 360;
}
void lat1Lower(void)
{
lat1 = (lat1 - 5) % 360;
}
void lat2Raise(void)
{
lat2 = (lat2 + 5) % 360;
}
void lat2Lower(void)
{
lat2 = (lat2 - 5) % 360;
}
void FireCannon(void)
{
fire = (fire + 20) % 360;
}
void RaiseLeg1Forward(void)
{
hip11 = (hip11 + 3) % 360;
}
void LowerLeg1Backwards(void)
{
hip11 = (hip11 - 3) % 360;
}
void RaiseLeg1Outwards(void)
{
hip12 = (hip12 + 10) % 360;
}
void LowerLeg1Inwards(void)
{
hip12 = (hip12 - 10) % 360;
}
void RaiseLeg2Forward(void)
{
hip21 = (hip21 + 3) % 360;
}
void LowerLeg2Backwards(void)
{
hip21 = (hip21 - 3) % 360;
}
void RaiseLeg2Outwards(void)
{
hip22 = (hip22 + 10) % 360;
}
void LowerLeg2Inwards(void)
{
hip22 = (hip22 - 10) % 360;
}
void TurnRight(void)
{
turn = (turn - 10) % 360;
}
void TurnLeft(void)
{
turn = (turn + 10) % 360;
}
void TurnForwards(void{
turn1 = (turn1 - 10) % 360;}
void TurnBackwards(void)
{
turn1 = (turn1 + 10) % 360;
}
void LightTurnRight(void)
{
lightturn = (lightturn + 10) % 360;
}
void LightTurnLeft(void)
{
void LightForwards(void)
{
lightturn1 = (lightturn1 + 10) % 360;
}
void LightBackwards(void)
{
lightturn1 = (lightturn1 - 10) % 360;
}
void DrawTextXY(double x,double y,double z,double scale,char *s)
{
int i;
glPushMatrix();
glTranslatef(x,y,z);
glScalef(scale,scale,scale);
for (i=0;i<strlen(s);i++)
glutStrokeCharacter(GLUT_STROKE_ROMAN,s[i]);
glPopMatrix();
}
void Box(float width, float height, float depth, char solid)
{
char i, j = 0;
float x = width / 2.0, y = height / 2.0, z = depth / 2.0;
for (i = 0; i < 4; i++) {
glRotatef(90.0, 0.0, 0.0, 1.0);
if (j) {
if (!solid)
glBegin(GL_LINE_LOOP);
else
glBegin(GL_QUADS);
glNormal3f(-1.0, 0.0, 0.0);
glVertex3f(-x, y, z);
glVertex3f(-x, -y, z);
glVertex3f(-x, -y, -z);
glVertex3f(-x, y, -z);
glEnd();
if (solid) {
glBegin(GL_TRIANGLES);
glNormal3f(0.0, 0.0, 1.0);
glVertex3f(0.0, 0.0, z);
glVertex3f(-x, y, z);
glVertex3f(-x, -y, z);
glNormal3f(0.0, 0.0, -1.0);
glVertex3f(0.0, 0.0, -z);
glVertex3f(-x, -y, -z);
glVertex3f(-x, y, -z);
glEnd();
}
j = 0;
} else {
if (!solid)
glBegin(GL_LINE_LOOP);
else
glBegin(GL_QUADS);
glNormal3f(-1.0, 0.0, 0.0);
glVertex3f(-y, x, z);
glVertex3f(-y, -x, z);
glVertex3f(-y, -x, -z);
glVertex3f(-y, x, -z);
glEnd();
if (solid) {
glBegin(GL_TRIANGLES);
glNormal3f(0.0, 0.0, 1.0);
glVertex3f(0.0, 0.0, z);
glVertex3f(-y, x, z);
glVertex3f(-y, -x, z);
glNormal3f(0.0, 0.0, -1.0);
glVertex3f(0.0, 0.0, -z);
glVertex3f(-y, -x, -z);
glVertex3f(-y, x, -z);
glEnd();
}
j = 1;
}
}
}
c = x + y;
for (j = 0; j < 8; j++) {
glTranslatef(-c, 0.0, 0.0);
if (!solid)
glBegin(GL_LINE_LOOP);
else
glBegin(GL_QUADS);
glNormal3f(-1.0, 0.0, 0.0);
glVertex3f(0.0, -y, z);
glVertex3f(0.0, y, z);
glVertex3f(0.0, y, -z);
glVertex3f(0.0, -y, -z);
glEnd();
glTranslatef(c, 0.0, 0.0);
if (solid) {
glBegin(GL_TRIANGLES);
glNormal3f(0.0, 0.0, 1.0);
glVertex3f(0.0, 0.0, z);
glVertex3f(-c, -y, z);
glVertex3f(-c, y, z);
glNormal3f(0.0, 0.0, -1.0);
glVertex3f(0.0, 0.0, -z);
glVertex3f(-c, y, -z);
glVertex3f(-c, -y, -z);
glEnd();
}
glRotatef(45.0, 0.0, 0.0, 1.0);
}
}
#ifdef NORM
void Normalize(float v[3])
{
GLfloat d = sqrt(v[1] * v[1] + v[2] * v[2] + v[3] * v[3]);
if (d == 0.0) {
printf("zero length vector");
return;
}
v[1] /= d;
v[2] /= d;
v[3] /= d;
}
#endif
glNewList(SOLID_MECH_HIP, GL_COMPILE);
#ifdef LIGHT
SetMaterial(mat_specular, mat_ambient, mat_diffuse,
mat_shininess);
#endif
glColor3f(0.0, 1.0, 0.0);//hip lines form green
Octagon(0.7, 0.5, solid);
#ifdef SPHERE
for (i = 0; i < 2; i++) {
if (i)
glScalef(-1.0, 1.0, 1.0);
glTranslatef(1.0, 0.0, 0.0);
#ifdef LIGHT
SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2,
mat_shininess2);
#endif
glColor3f(0.0, 1.0, 0.0);//hip line form green
if (!solid)
gluQuadricDrawStyle(qobj, GLU_LINE);
gluSphere(qobj, 0.2, 16, 16);
glTranslatef(-1.0, 0.0, 0.0);
}
glScalef(-1.0, 1.0, 1.0);
#endif
glEndList();
}
glNewList(SOLID_MECH_UPPER_ARM, GL_COMPILE);
#ifdef LIGHT
SetMaterial(mat_specular, mat_ambient, mat_diffuse,
mat_shininess);
#endif
glColor3f(1.0, 0.0, 0.0);//arm red
Box(1.0, 2.0, 1.0, solid);
glTranslatef(0.0, -0.95, 0.0);
glRotatef(90.0, 1.0, 0.0, 0.0);
#ifdef LIGHT
SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2,
mat_shininess2);
#endif
glColor3f(1.0, 0.0, 0.0);//arm red
if (!solid)
gluQuadricDrawStyle(qobj, GLU_LINE);
gluCylinder(qobj, 0.4, 0.4, 1.5, 16, 10);
#ifdef LIGHT
SetMaterial(mat_specular, mat_ambient, mat_diffuse,
mat_shininess);
#endif
glColor3f(0.0, 1.0, 0.0);// arm joint green
glRotatef(-90.0, 1.0, 0.0, 0.0);
glTranslatef(-0.4, -1.85, 0.0);
glRotatef(90.0, 0.0, 1.0, 0.0);
for (i = 0; i < 2; i++) {
if (!solid)
gluQuadricDrawStyle(qobj, GLU_LINE);
if (i)
gluCylinder(qobj, 0.5, 0.5, 0.8, 16, 10);
else
gluCylinder(qobj, 0.2, 0.2, 0.8, 16, 10);
}
for (i = 0; i < 2; i++) {
if (i)
glScalef(-1.0, 1.0, 1.0);
if (!solid)
gluQuadricDrawStyle(qobj, GLU_LINE);
if (i)
glTranslatef(0.0, 0.0, 0.8);
gluDisk(qobj, 0.2, 0.5, 16, 10);
if (i)
glTranslatef(0.0, 0.0, -0.8);
}
glScalef(-1.0, 1.0, 1.0);
glRotatef(-90.0, 0.0, 1.0, 0.0);
glTranslatef(0.4, 2.9, 0.0);
glEndList();
}
glNewList(SOLID_MECH_VULCAN, GL_COMPILE);
#ifdef LIGHT
SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2,
mat_shininess2);
#endif
glColor3f(0.0, 0.0, 1.0);//gun color
if (!solid) {
gluQuadricDrawStyle(qobj, GLU_LINE);
}
gluCylinder(qobj, 0.5, 0.5, 0.5, 16, 10);
if (!solid) {
gluQuadricDrawStyle(qobj, GLU_LINE);
}
gluCylinder(qobj, 0.15, 0.15, 2.0, 16, 10);
gluCylinder(qobj, 0.06, 0.06, 2.0, 16, 10);
glTranslatef(0.0, 0.0, 2.0);
gluDisk(qobj, 0.1, 0.15, 16, 10);
gluCylinder(qobj, 0.1, 0.1, 0.1, 16, 5);
glTranslatef(0.0, 0.0, 0.1);
gluDisk(qobj, 0.06, 0.1, 16, 5);
glTranslatef(0.0, -0.3, -2.1);
}
glEndList();
}
glNewList(SOLID_MECH_FOREARM, GL_COMPILE);
#ifdef LIGHT
SetMaterial(mat_specular, mat_ambient, mat_diffuse,
mat_shininess);
#endif
glColor3f(0.0, 1.0, 1.0);//fore arm light green
for (i = 0; i < 5; i++) {
glTranslatef(0.0, -0.1, -0.15);
Box(0.6, 0.8, 0.2, solid);
glTranslatef(0.0, 0.1, -0.15);
Box(0.4, 0.6, 0.1, solid);
}
glTranslatef(0.0, 0.0, 2.45);
Box(1.0, 1.0, 2.0, solid);
glTranslatef(0.0, 0.0, -1.0);
glEndList();
}
glNewList(SOLID_MECH_UPPER_LEG, GL_COMPILE);
#ifdef LIGHT
SetMaterial(mat_specular, mat_ambient, mat_diffuse,
mat_shininess);
#endif
glColor3f(1.0, 1.0, 0.0);//color yellow
if (!solid) {
gluQuadricDrawStyle(qobj, GLU_LINE);
}
glTranslatef(0.0, -1.0, 0.0);
Box(0.4, 1.0, 0.7, solid);
glTranslatef(0.0, -0.65, 0.0);
for (i = 0; i < 5; i++) {
Box(1.2, 0.3, 1.2, solid);
glTranslatef(0.0, -0.2, 0.0);
Box(1.0, 0.1, 1.0, solid);
glTranslatef(0.0, -0.2, 0.0);
}
glTranslatef(0.0, -0.15, -0.4);
Box(2.0, 0.5, 2.0, solid);
glTranslatef(0.0, -0.3, -0.2);
glRotatef(90.0, 1.0, 0.0, 0.0);
#ifdef LIGHT
SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2,
mat_shininess2);
#endif
glColor3f(0.5, 0.5, 0.5);//leg joints grey
gluCylinder(qobj, 0.6, 0.6, 3.0, 16, 10);
#ifdef LIGHT
SetMaterial(mat_specular, mat_ambient, mat_diffuse,
mat_shininess);
#endif
glColor3f(0.0, 1.0, 0.0);//above the leg joint n below the fore leg
glRotatef(-90.0, 1.0, 0.0, 0.0);
glTranslatef(0.0, -1.5, 1.0);
Box(1.5, 3.0, 0.5, solid);
glTranslatef(0.0, -1.75, -0.8);
Box(2.0, 0.5, 2.0, solid);
glTranslatef(0.0, -0.9, -0.85);
#ifdef LIGHT
SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2,
mat_shininess2);
#endif
glColor3f(1.0, 0.0, 0.0);//leg joints between fore leg and leg
gluCylinder(qobj, 0.8, 0.8, 1.8, 16, 10);
for (i = 0; i < 2; i++) {
if (i)
glScalef(-1.0, 1.0, 1.0);
if (!solid)
gluQuadricDrawStyle(qobj, GLU_LINE);
if (i)
glTranslatef(0.0, 0.0, 1.8);
gluDisk(qobj, 0.0, 0.8, 16, 10);
if (i)
glTranslatef(0.0, 0.0, -1.8);
}
glScalef(-1.0, 1.0, 1.0);
glEndList();
}
glNewList(SOLID_MECH_FOOT, GL_COMPILE);
#ifdef LIGHT
SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2,
mat_shininess2);
#endif
glColor3f(1.0, 0.0, 0.0);// color foot
glRotatef(90.0, 1.0, 0.0, 0.0);
Octagon(1.5, 0.6, solid);
glRotatef(-90.0, 1.0, 0.0, 0.0);
glEndList();
}
#ifdef LIGHT
SetMaterial(mat_specular, mat_ambient, mat_diffuse,
mat_shininess);
#endif
glColor3f(1.0, 0.0, 0.0);//leg joint
for (k = 0.0; k < 2.0; k++) {
for (l = 0.0; l < 2.0; l++) {
glPushMatrix();
glTranslatef(k, 0.0, l);
#ifdef LIGHT
SetMaterial(mat_specular, mat_ambient, mat_diffuse,
mat_shininess);
#endif
glColor3f(1.0, 0.0, 0.0);//red
Box(1.0, 0.5, 1.0, solid);
glTranslatef(0.0, -0.45, 0.0);
#ifdef LIGHT
SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2,
mat_shininess2);
#endif
glColor3f(1.0, 0.0, 0.0);
#ifdef SPHERE
if (!solid)
glutWireSphere(0.2, 16, 10);
else
glutSolidSphere(0.2, 16, 10);
#endif
if (leg)
glRotatef((GLfloat) heel1, 1.0, 0.0, 0.0);
else
glRotatef((GLfloat) heel2, 1.0, 0.0, 0.0);
/* glTranslatef(0.0, -0.2, 0.0); */
glTranslatef(0.0, -1.7, 0.0);
#ifdef LIGHT
SetMaterial(mat_specular, mat_ambient, mat_diffuse,
mat_shininess);
#endif
glColor3f(1.0, 0.0, 0.0);//color of the below leg( pillers)
Box(0.25, 3.0, 0.25, solid);
glTranslatef(0.0, -1.7, 0.0);
#ifdef LIGHT
SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2,
mat_shininess2);
#endif
glColor3f(0.0, 0.0, 1.0);//joints
#ifdef SPHERE
if (!solid)
glutWireSphere(0.2, 16, 10);
else
glutSolidSphere(0.2, 16, 10);
#endif
if (leg)
glRotatef((GLfloat) - heel1, 1.0, 0.0, 0.0);
else
glRotatef((GLfloat) - heel2, 1.0, 0.0, 0.0);
glTranslatef(0.0, -0.45, 0.0);
#ifdef LIGHT
SetMaterial(mat_specular, mat_ambient, mat_diffuse,
mat_shininess);
#endif
glColor3f(0.0, 1.0, 0.0);// leg n foot joints color
int i, j, k = 0;
glNewList(SOLID_MECH_ROCKET, GL_COMPILE);
#ifdef LIGHT
SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2,
mat_shininess2);
#endif
glColor3f(0.0, 1.0, 0.0);//rocket port color
glScalef(0.4, 0.4, 0.4);
glRotatef(45.0, 0.0, 0.0, 1.0);
glTranslatef(1.0, 0.0, 0.0);
Box(2.0, 0.5, 3.0, solid);
int i, j;
glNewList(SOLID_ENVIRO, GL_COMPILE);
SetMaterial(mat_specular4, mat_ambient4, mat_diffuse4,
mat_shininess4);
glColor3f(1.0, 1.0, 0.0);//out line of the walking path
Box(20.0, 0.5, 30.0, solid);
void Toggle(void)
{
if (solid_part)
solid_part = 0;
else
solid_part = 1;
}
void disable(void)
{
glDisable(GL_LIGHTING);
glDisable(GL_DEPTH_TEST);
glDisable(GL_NORMALIZE);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
}
void lighting(void)
{
GLfloat position[] =
{0.0, 0.0, 2.0, 1.0};
#ifdef MOVE_LIGHT
glRotatef((GLfloat) lightturn1, 1.0, 0.0, 0.0);
glRotatef((GLfloat) lightturn, 0.0, 1.0, 0.0);
glRotatef(0.0, 1.0, 0.0, 0.0);
#endif
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glDepthFunc(GL_LESS);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
void DrawMech(void)
{
int i, j;
#endif
glTranslatef(0.9, 0.0, 0.0);
if (i) {
glRotatef((GLfloat) lat1, 0.0, 0.0, 1.0);
glRotatef((GLfloat) shoulder1, 1.0, 0.0, 0.0);
glRotatef((GLfloat) shoulder3, 0.0, 1.0, 0.0);
} else {
glRotatef((GLfloat) lat2, 0.0, 0.0, 1.0);
glRotatef((GLfloat) shoulder2, 1.0, 0.0, 0.0);
glRotatef((GLfloat) shoulder4, 0.0, 1.0, 0.0);
}
glTranslatef(0.0, -1.4, 0.0);
#ifdef UPPER_ARM
glCallList(SOLID_MECH_UPPER_ARM);
#endif
glTranslatef(0.0, -2.9, 0.0);
if (i)
glRotatef((GLfloat) elbow1, 1.0, 0.0, 0.0);
else
glRotatef((GLfloat) elbow2, 1.0, 0.0, 0.0);
glTranslatef(0.0, -0.9, -0.2);
#ifdef LOWER_ARM
glCallList(SOLID_MECH_FOREARM);
glPushMatrix();
glTranslatef(0.0, 0.0, 2.0);
glRotatef((GLfloat) fire, 0.0, 0.0, 1.0);
glCallList(SOLID_MECH_VULCAN);
glPopMatrix();
#endif
glPopMatrix();
}
glPopMatrix();
glPopMatrix();
void display(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
//glClearColor(1.0, 1.0, 1.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glPushMatrix();
glRotatef((GLfloat) turn, 0.0, 1.0, 0.0);
glRotatef((GLfloat) turn1, 1.0, 0.0, 0.0);
#ifdef LIGHT
if (solid_part) {
glPushMatrix();
lighting();
glPopMatrix();
} else
disable();
#endif
#ifdef DRAW_MECH
glPushMatrix();
glTranslatef(0.0, elevation, 0.0);
DrawMech();
glPopMatrix();
#endif
#ifdef DRAW_ENVIRO
glPushMatrix();
if (distance >= 20.136)
distance = 0.0;
glTranslatef(0.0, -5.0, -distance);
glCallList(SOLID_ENVIRO);
glTranslatef(0.0, 0.0, 10.0);
glCallList(SOLID_ENVIRO);
glPopMatrix();
#endif
glPopMatrix();
glLoadName(TEXTID);
glColor3f(1,1,0);
DrawTextXY(-2.5,0.2,2.0,0.0015,"1ce09cs009");
DrawTextXY(-2.5,0.5,2.0,0.0015,"ARMUGAM(AARU)");
DrawTextXY(2.5,2.2,-2.0,0.0025,"1ce09cs002");
DrawTextXY(2.5,2.7,-2.0,0.0030,"ABDUL");
glFlush();
glutSwapBuffers();
void myinit(void)
{
char i = 1;
qobj = gluNewQuadric();
#ifdef LIGHT
SetMaterial(mat_specular2, mat_ambient2, mat_diffuse2,
mat_shininess2);
#endif
glEnable(GL_DEPTH_TEST);
MechTorso(i);
MechHip(i);
Shoulder(i);
RocketPod(i);
UpperArm(i);
ForeArm(i);
UpperLeg(i);
Foot(i);
VulcanGun(i);
Enviro(i);
}
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, 1.2, -5.5); /* viewing transform */
}
#ifdef ANIMATION
void animation_walk(void)
{
float angle;
static int step;
if (step == 0 || step == 2) {
}
}
if (step == 4)
step = 0;
distance += 0.1678;
glutPostRedisplay();
}
void animation(void)
{
animation_walk();
}
#endif
#ifdef GLUT
#ifdef GLUT_KEY
/* ARGSUSED1 */
void keyboard(unsigned char key, int x, int y)
{
int i = 0;
if (key == 27) exit (0);
switch (key) {
/* start arm control functions */
case 'q':{
shoulder2Subtract();
i++;
i++;
}
break;
case 'a':{
shoulder2Add();
i++;
}
break;
case 'w':{
shoulder1Subtract();
i++;
}
break;
case 's':{
shoulder1Add();
i++;
}
break;
case '2':{
shoulder3Add();
i++;
}
break;
case '1':{
shoulder4Add();
i++;
}
break;
case '4':{
shoulder3Subtract();
i++;
}
break;
case '3':{
shoulder4Subtract();
i++;
}
break;
case 'z':{
lat2Raise();
i++;
}
break;
case 'Z':{
lat2Lower();
i++;
}
break;
case 'x':{
lat1Raise();
i++;
}
break;
case 'X':{
lat1Lower();
i++;
}
break;
case 'A':{
elbow2Add();
i++;
}
break;
case 'Q':{
elbow2Subtract();
i++;
}
break;
case 'S':{
elbow1Add();
i++;
}
break;
case 'W':{
elbow1Subtract();
i++;
}
break;
/* end of arm control functions */
}
break;
case 'H':{
LowerLeg2Inwards();
i++;
}
break;
case 'j':{
RaiseLeg1Forward();
i++;
}
break;
case 'u':{
LowerLeg1Backwards();
i++;
}
break;
case 'U':{
RaiseLeg1Outwards();
i++;
}
break;
case 'J':{
LowerLeg1Inwards();
i++;
}
break;
case 'N':{
Heel2Add();
i++;
}
break;
case 'n':{
Heel2Subtract();
i++;
}
break;
case 'M':{
Heel1Add();
i++;
}
break;
case 'm':{
Heel1Subtract();
i++;
}
break;
case 'k':{
Ankle2Add();
i++;
}
break;
case 'K':{
Ankle2Subtract();
i++;
}
break;
case 'l':{
Ankle1Add();
i++;
}
break;
case 'L':{
Ankle1Subtract();
i++;
}
break;
/* end of leg control functions */
#endif
#ifdef GLUT_SPEC
/* ARGSUSED1 */
void special(int key, int x, int y)
{
int i = 0;
switch (key) {
/* start of view position functions */
case GLUT_KEY_RIGHT:{
TurnRight();
i++;
}
break;
case GLUT_KEY_LEFT:{
TurnLeft();
i++;
}
break;
case GLUT_KEY_DOWN:{
TurnForwards();
i++;
}
break;
case GLUT_KEY_UP:{
TurnBackwards();
i++;
}
break;
/* end of view postions functions */
/* start of miseclleneous functions */
case GLUT_KEY_PAGE_UP:{
FireCannon();
i++;
}
break;
/* end of miscelleneous functions */
}
if (i)
glutPostRedisplay();
}
#endif
#endif
}
}
/* ARGSUSED */
void null_select(int mode)
{
}
void glutMenu(void)
{
int glut_menu[13];
glut_menu[5] = glutCreateMenu(null_select);
glutAddMenuEntry("forward : q,w", 0);
glutAddMenuEntry("backwards : a,s", 0);
glutAddMenuEntry("outwards : z,x", 0);
glutAddMenuEntry("inwards : Z,X", 0);
glut_menu[6] = glutCreateMenu(null_select);
glutAddMenuEntry("upwards : Q,W", 0);
glutAddMenuEntry("downwards : A,S", 0);
glutAddMenuEntry("outwards : 1,2", 0);
glutAddMenuEntry("inwards : 3,4", 0);
glut_menu[1] = glutCreateMenu(null_select);
glutAddMenuEntry(" : Page_up", 0);
glut_menu[8] = glutCreateMenu(null_select);
glutAddMenuEntry("forward : y,u", 0);
glutAddMenuEntry("backwards : h.j", 0);
glut_menu[9] = glutCreateMenu(null_select);
glutAddMenuEntry("forward : n,m", 0);
glutAddMenuEntry("backwards : N,M", 0);
glut_menu[10] = glutCreateMenu(null_select);
glutAddMenuEntry("toes up : K,L", 0);
glutAddMenuEntry("toes down : k,l", 0);
glut_menu[11] = glutCreateMenu(null_select);
glutAddMenuEntry("right : right arrow", 0);
glutAddMenuEntry("left : left arrow", 0);
glutAddMenuEntry("down : up arrow", 0);
glutAddMenuEntry("up : down arrow", 0);
glut_menu[12] = glutCreateMenu(null_select);
glutAddMenuEntry("right : p", 0);
glutAddMenuEntry("left : i", 0);
glutAddMenuEntry("up : 9", 0);
glutAddMenuEntry("down : o", 0);
glut_menu[4] = glutCreateMenu(NULL);
glutAddSubMenu("at the shoulders? ", glut_menu[5]);
glutAddSubMenu("at the elbows?", glut_menu[6]);
glut_menu[7] = glutCreateMenu(NULL);
glutAddSubMenu("at the bottompart? ", glut_menu[8]);
glutAddSubMenu("at the knees?", glut_menu[9]);
glutAddSubMenu("at the ankles? ", glut_menu[10]);
glut_menu[2] = glutCreateMenu(null_select);
glutAddMenuEntry("turn left : d", 0);
glutAddMenuEntry("turn right : g", 0);
glutAddMenuEntry("Rocketpod : v", 0);
glut_menu[3] = glutCreateMenu(null_select);
glutAddMenuEntry("tilt backwards : f", 0);
glutAddMenuEntry("tilt forwards : r", 0);
glut_menu[0] = glutCreateMenu(NULL);
glutAddSubMenu("move the arms.. ", glut_menu[4]);
glutAddSubMenu("fire the vulcan guns?", glut_menu[1]);
glutAddSubMenu("move the legs.. ", glut_menu[7]);
glutAddSubMenu("move the torso?", glut_menu[2]);
glutAddSubMenu("move the upper portion?", glut_menu[3]);
glutAddSubMenu("rotate the scene..", glut_menu[11]);
#ifdef MOVE_LIGHT
glutAddSubMenu("rotate the light source..", glut_menu[12]);
#endif
glutCreateMenu(menu_select);
#ifdef ANIMATION
glutAddMenuEntry("Start Walk", 1);
glutAddMenuEntry("Stop Walk", 2);
#endif
glutAddMenuEntry("Toggle Wireframe", 3);
glutAddSubMenu("How do I ..", glut_menu[0]);
glutAddMenuEntry("Quit", 4);
glutAttachMenu(GLUT_LEFT_BUTTON);
glutAttachMenu(GLUT_RIGHT_BUTTON);
}
1. Description
2. Incident a ray of light
3. See the refraction
4. Quit
Depending on the selection the corresponding output will be displayed.
Make sure that the folder ‘Snells’Law’ is copied to the C:\ drive ONLY
NAME: PRUTHIVIKA V
USN: 1DT19CS119
SEMESTER AND SECTION: 6TH SEM, B SEC
DEPARTMENT: COMPUTER SCIENCE AND ENGINEERING
EMAIL ID: [email protected]