Shading and two type of shading flat shading and gauraud shading with coding exampe

AdilKhan128 4,870 views 15 slides Apr 13, 2015
Slide 1
Slide 1 of 15
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15

About This Presentation

what is shading and type of shading flat shading and gauraud shading with coding example


Slide Content

Presented by Adil

how to install openGL package
•open visual studio and click on tools tab

2nd:select library package manager and
click package manager console

3rd:console window will appear at
the bottom of screen and write the
following command
Install-Package freeglut
see next slide

[email protected] Adiil (Mcs)
install-package freeglut

what is shading?
•The appearance of lights and darks found in a
work of art.
•In computer graphics, shading is a method used
to create or enhance the illusion of depth in an
image by varying the amount of darkness in the
image. As you can see, three levels of shading
are used in the example of a rectangular object,
thus making it appear to be three dimensional.
Shading can also be used to make some objects
appear to be in front of or behind
other objects in the image

some real word examples

Type of shading
•Flat shading
–glShadeModel(GL_FLAT)
•Smooth (Gouraud) shading
–glShadeModel(GL_SMOOTH)

Flat Shading
•The simplest shading algorithm, called flat shading,
consists of using an illumination model to determine the
corresponding intensity value for the incident light, then
shade the entire polygon according to this value. Flat
shading is also known as constant shading or constant
intensity shading. Its main advantage is that it is easy it
implement.
• In the case of curved objects, when the surface
changes gradually and the light source and viewer are far
from the surface.
• In general, when there are large numbers of plane
surfaces.
•when problem is not light, some thing else

Gourand Shading
•This shading algorithm was first described by H.
Gouraud in 1971. It is also called bilinear intensity
interpolation. Gouraud shading is easier to understand in
the context of the scan-line algorithm used in hidden
surface removal, For now, assume that each pixel is
examined according to its horizontal (scan-line)
placement
•here edges are visible
•In modern graphics hardware, gourand shading is
probably at least as fast as flat shading,and faster than
phong shading.
•Gouraud is enabled by default

complete coding
#include <Gl/glut.h>
void Draw() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
// Set material properties
GLfloat qaBlack[] = {0.0, 0.0, 0.0, 1.0};
GLfloat qaGreen[] = {0.0, 1.0, 0.0, 1.0};
GLfloat qaRed[] = {1.0, 0.0, 0.0, 1.0};
GLfloat qaBlue[] = {0.0, 0.0, 1.0, 1.0};
GLfloat qaWhite[] = {1.0, 1.0, 1.0, 1.0};
GLfloat qaLowAmbient[] = {0.2, 0.2, 0.2, 1.0};
GLfloat qaFullAmbient[] = {1.0, 1.0, 1.0, 1.0};
for (int iIndex = 0; iIndex < 2; ++iIndex) {
if (iIndex == 0) {
glShadeModel(GL_FLAT);
} else {
glShadeModel(GL_SMOOTH);
}
//Set, ambient, diffuse and specular lighting. Set ambient to 20%.
glMaterialfv(GL_FRONT, GL_AMBIENT, qaGreen);
glMaterialfv(GL_FRONT, GL_DIFFUSE, qaGreen);
glMaterialfv(GL_FRONT, GL_SPECULAR, qaWhite);
glMaterialf(GL_FRONT, GL_SHININESS, 128.0);
glLightfv(GL_LIGHT0, GL_AMBIENT, qaLowAmbient);
// Draw a sphere
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glTranslatef(-0.5 + (float)iIndex, 0.5, -2.0);
glutSolidSphere(.5, 20, 20);
glPopMatrix();
// Turn off diffuse and specular reflection. Set ambient light to full.
glMaterialfv(GL_FRONT, GL_DIFFUSE, qaBlack);
glMaterialfv(GL_FRONT, GL_SPECULAR, qaBlack);
glLightfv(GL_LIGHT0, GL_AMBIENT, qaFullAmbient);

// Draw a triangle with one red, green, and blue vertex.
glBegin(GL_TRIANGLES);
glMaterialfv(GL_FRONT, GL_AMBIENT, qaRed);
glVertex3f(-.5 + (float)iIndex, 0.0, -.2);
glMaterialfv(GL_FRONT, GL_AMBIENT, qaGreen);
glVertex3f(-.933 + (float)iIndex, -.75, -.2);
glMaterialfv(GL_FRONT, GL_AMBIENT, qaBlue);
glVertex3f(-.067 + (float)iIndex, -.75, -.2);
glEnd();
}
glFlush();
}
void Initialize() {
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -3.0, 3.0);
// Lighting set up
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
// Set lighting intensity and color
GLfloat qaAmbientLight[]= {0.2, 0.2, 0.2, 1.0};
GLfloat qaDiffuseLight[]= {0.8, 0.8, 0.8, 1.0};
GLfloat qaSpecularLight[]= {1.0, 1.0, 1.0, 1.0};
glLightfv(GL_LIGHT0, GL_AMBIENT, qaAmbientLight);
glLightfv(GL_LIGHT0, GL_DIFFUSE, qaDiffuseLight);
glLightfv(GL_LIGHT0, GL_SPECULAR, qaSpecularLight);
// Set the light position
GLfloat qaLightPosition[]= {0.0, 1.0, -.5, 1.0};
glLightfv(GL_LIGHT0, GL_POSITION, qaLightPosition);
}
int main(int iArgc, char** cppArgv) {
glutInit(&iArgc, cppArgv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(250, 250);
glutInitWindowPosition(200, 200);
glutCreateWindow("XoaX.net");
Initialize();
glutDisplayFunc(Draw);
glutMainLoop();
return 0;
}

OUT PUT