1 / 30

CS380 LAB IV OpenGL

CS380 LAB IV OpenGL. Jonghyeob Lee Reference1. [OpenGL course slides by Rasmus Stenholt] Reference2. [ http://nehe.gamedev.net/ ]. Goal. Introduce OpenGL programming Help you do CS380 homework by yourself. Notice. Use Noah board for your questions ( http://noah.kaist.ac.kr/course/CS380 ).

edna
Download Presentation

CS380 LAB IV OpenGL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CS380 LAB IV OpenGL Jonghyeob Lee Reference1. [OpenGL course slides by Rasmus Stenholt] Reference2. [http://nehe.gamedev.net/]

  2. Goal Introduce OpenGL programming Help you do CS380 homework by yourself

  3. Notice Use Noah board for your questions (http://noah.kaist.ac.kr/course/CS380)

  4. Outline Lighting and Materials Texture Mapping

  5. Lighting and Materials • Why is this important? • Geometry is only one third of rendering • Lights and materials make up the other two • Unlit objects tend to look dull and artificial • In OpenGL, lights and materials are connected • Light interacts with materials • Materials must be assigned to geometry to benefit from lighting

  6. Lighting Principles • The result of lighting depends on various factors • Material composition of object • Light colour and position • Global lighting parameters • ambient light • two sided lighting • Lighting can be done in both RGBA and indexed color mode

  7. OpenGL Lighting • Lighting is computed per-vertex • The lighting model is called Phong shading • Lighting properties • Diffuse • Specular • Ambient

  8. Lighting • Normals define how a surface reflects light • glNormal3f( x, y, z ) • Normals can be defined per-vertex • Just like colours • The current normal is used to compute lighting contributions • The angles between the normal and light directions are used • Use unit normals for proper lighting • Some transformations affect a normal’s length • glEnable( GL_NORMALIZE ) or glEnable( GL_RESCALE_NORMAL )

  9. Light Properties • The command for setting lighting properties • glLightfv(light, property, value); • light specifies which light • Multiple lights, starting with GL_LIGHT0 glGetIntegerv( GL_MAX_LIGHTS, &n ); • The maximum number of lights is usually 8 • Properties • colors • position and type • attenuation • Light color properties • GL_AMBIENT • GL_DIFFUSE • GL_SPECULAR

  10. Types of Lights • OpenGL supports two types of lights • Local (Point) light sources • Infinite (Directional) light sources • Type of light controlled by w coordinate • Usually w=1 for a point light

  11. Turning on the Lights • First you must tell OpenGL that lighting should be used glEnable( GL_LIGHTING ); • Then each light can be individually turned on/off glEnable( GL_LIGHTn );

  12. Tutorials void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glutSolidTeapot(0.5); glFlush(); } Load a solid teapot

  13. Tutorials void display() { glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); float light_pos[] = {-2, 2, 2, 1}; float light_Ka[] = {0, 0, 0, 1}; float light_Kd[] = {1, 1, 1, 1}; float light_Ks[] = {1, 1, 1, 1}; glLightfv(GL_LIGHT0, GL_POSITION, light_pos); glLightfv(GL_LIGHT0, GL_AMBIENT, light_Ka); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_Kd); glLightfv(GL_LIGHT0, GL_SPECULAR, light_Ks); … } Add a light on previous scene

  14. GL_DIFFUSE Base color GL_SPECULAR Highlight Color GL_AMBIENT Low-light Color GL_EMISSION Glow Color GL_SHININESS Surface Smoothness Material Properties • Define the surface properties of a primitive • glMaterialfv( face, property, value ); • Separate materials for front and back

  15. Tutorials void display() { float material_Ka[] = {0.11, 0.06, 0.11, 1.00}; float material_Kd[] = {0.43, 0.47, 0.54, 1.00}; float material_Ks[] = {0.33, 0.33, 0.52, 1.00}; float material_Ke[] = {0.00, 0.00, 0.00, 0.00}; float material_Se[] = {10}; glMaterialfv(GL_FRONT, GL_AMBIENT, material_Ka); glMaterialfv(GL_FRONT, GL_DIFFUSE, material_Kd); glMaterialfv(GL_FRONT, GL_SPECULAR, material_Ks); glMaterialfv(GL_FRONT, GL_EMISSION, material_Ke); glMaterialfv(GL_FRONT, GL_SHININESS, material_Se); } Add a materials on front

  16. Tutorials Compare three teapots

  17. Texture Mapping • Applying a 1-D, 2-D, or 3-D image to geometric primitives • Texture coordinates are called (s,t,r,q) • Uses of texturing • Simulating materials • Reducing geometric complexity • Reflections • Advanced surface properties

  18. y z x t s Texture Mapping screen geometry image

  19. Applying Textures • The short version • Specify a texture image • Read or generate image • Assign to texture • Enable texturing • Specify texture parameters • Wrapping • How texture edges are handled • Filtering • How texture sampling is handled • Assign texture coordinates to vertices

  20. Generating a Texture Identifier • Generate texture names glGenTextures(n,*texIds ); • A texture name is just an integer • The texture name is assigned to some texture data later on • Example unsigned int texName; glGenTextures(1, &texname)

  21. Binding Textures • Bind textures before using glBindTexture( target, id ); • Binding a texture means assigning a certain texture id to a certain kind of texture • The valid kinds of textures are • GL_TEXTURE_1D • GL_TEXTURE_2D • GL_TEXTURE_3D • Example glBindTexture( GL_TEXTURE_2D, texName);

  22. Texture Application Methods • Filter Modes • Handles the sampling mode of the texture • Minification or magnification • Handles when the texture to screen mapping is not 1:1 • Special mipmap minification filters • Wrap Modes • Handles texture lookups outside the texture’s edges • Clamping • Copies data from the edge of the texture • Repeating • Tiles the texture • Texture Functions • How to mix primitive’s color with texture’s color • Blend • Modulate • Replace

  23. Texture Polygon Texture Polygon Magnification Minification Filter Modes Example: glTexParameteri( target, type, mode );

  24. t s GL_REPEAT wrapping GL_CLAMP wrapping texture Wrapping Mode • Example: glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP ) glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT )

  25. Mapping Texture • Based on parametric texture coordinates • Texture coordinates are assigned to vertices • Just like colours and normals • The n-D to 3-D mapping is the responsibility of the programmer/modeller • glTexCoord*() specified at each vertex t s

  26. Texture Space Object Space 1, 1 (s, t) = (0.2, 0.8) 0, 1 A a c (0.4, 0.2) b B C (0.8, 0.4) 0, 0 1, 0 Texture Mapping

  27. Tutorials int i, j, c; for (i = 0; i < 64; i++) { for (j = 0; j < 64; j++) { c = ((((i&0x8)==0)^((j&0x8))==0))*255; checkImage[i][j][0] = (GLubyte) c; checkImage[i][j][1] = (GLubyte) c; checkImage[i][j][2] = (GLubyte) c; checkImage[i][j][3] = (GLubyte) 255; } } Make checkerboard texture

  28. Tutorials glGenTextures(1, &texName); glBindTexture(GL_TEXTURE_2D, texName); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 64, 64, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); Assign texture

  29. Tutorials glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); glBindTexture(GL_TEXTURE_2D, texName); glBegin(GL_QUADS); glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, -0.5, 0.0); glTexCoord2f(0.0, 1.0); glVertex3f(0.5, -0.5, 0.0); glTexCoord2f(1.0, 1.0); glVertex3f(0.5, 0.5, 0.0); glTexCoord2f(1.0, 0.0); glVertex3f(-0.5, 0.5, 0.0); glEnd(); glFlush(); glDisable(GL_TEXTURE_2D); Texture mapping onto rectangle

  30. Q&A Any questions?

More Related