Virtual Reality 2013 OpenGL Introduction and HW1 Guide Speaker:Ming Ouhyoung, TA 汪汪汪 2012 TA: Yu Tu CSIE M2
Feb 25, 2016
Virtual Reality 2013
OpenGL Introductionand HW1 Guide
Speaker:Ming Ouhyoung,TA 汪心威
2012 TA: Yu Tu CSIE M2
This guide is talking about…
1.Part of computer graphics
2.OpenGL introduction
3.Sample codes discussion : line.cpp, robot.c, dance.c
VR Hw #1 Requirements
• Homework # 1 : Articulated Animal (and Human) Animation
• Simulation(real time) of articulated animals (including men)
• 1 ~ 3 minutes of animation (Demo final results at class)
• With short real-time manipulation of a few actions
• C,C++, Java ,with OpenGL,MS SDK...etc are OK
• due date: 2013/04/22
Key frame animation• key frame in animation and filmmaking is a
drawing that defines the starting and ending points of any smooth transition.
• One frame at a time, the most popular and yet oldest animation generation method (Disney animation, Snow White)
• See the demo at http://en.wikipedia.org/wiki/Key_frame
Snow White and the Seven Dwarfs (1937)
Part of computer graphics
Computer Graphics Pipeline
- object observationModel in Graphics
- coordinate system
World coordinate
Model in Graphics
Camera coordinateImage
coordinate
OpenGL Introduction
What is OpenGL• A Graphics rendering API introduced in
1992 by Silicon Graphics Inc• Produces high-quality color images
composed of geometric and image primitives
• Cross-platform
Related APIsApplication program
X Window, Windows, Mac OSX GL
GLUAGL,WGL,GLX
GLUT
Software and/or hardware
OpenGL Utility Toolkit (GLUT)
• Visual Studio 2010/2008, Visual C++ 2010/2008• http://www.xmission.com/~nate/glut.html• Add glut32.dll to
C:\Windows\SysWOW64
• Add glut32.lib toC:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib
• Add glut.h toC:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\GL
(9.0)
(9.0)
(System32)
HelloWorld#include <GL/glut.h>
void GL_display();void GL_reshape(GLsizei w, GLsizei h);void main(void){
glutCreateWindow(“HelloWorld");glutDisplayFunc(GL_display);glutReshapeFunc(GL_reshape);glutMainLoop();
}
HelloWorldvoid GL_display(){
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);glClear(GL_COLOR_BUFFER_BIT);glBegin( GL_LINES );
glColor3f(0.0f, 1.0f, 0.0f);glVertex3f(1.0f, 1.0f, 0.0f);glVertex3f(-1.0f, -1.0f, 0.0f);glColor3f(1.0f, 0.0f, 0.0f);glVertex3f(-1.0, 1.0f, 0.0f);glVertex3f(1.0f, -1.0f, 0.0f);
glEnd();glFlush();
}
Primitives
HelloWorldvoid GL_display(){
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);glClear(GL_COLOR_BUFFER_BIT);glBegin( GL_LINES );
glColor3f(0.0f, 1.0f, 0.0f);glVertex3f(1.0f, 1.0f, 0.0f);glVertex3f(-1.0f, -1.0f, 0.0f);glColor3f(1.0f, 0.0f, 0.0f);glVertex3f(-1.0, 1.0f, 0.0f);glVertex3f(1.0f, -1.0f, 0.0f);
glEnd();glFlush();
}
void GL_reshape(GLsizei w, GLsizei h){
glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(-2.0f, 2.0f, -2.0f, 2.0f, -2.0f, 2.0f);glMatrixMode(GL_MODELVIEW);glLoadIdentity();
}
HelloWorld
Now that you have done your first OpenGL Program,
let’s talk about something advanced.
Matrix in OpenGL• There are two matrix stacks.
• ModelView matrix (GL_MODELVIEW)• Projection matrix (GL_PROJECTION)
• When we call functions of transformation, we should change to the appropriate matrix stack first.
•
glMatrixMode(GL_MODELVIEW);
•
//now we are in modelview matrix stack!
•
//do modelview transformation here…..
•
glMatrixMode(GL_PROJECTION);
•
//now we are in projection matrix stack!
•
//do projection transformation here….
ProjectionModelView
Vertex
Projection Matrix
• Orthographic ProjectionglOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top,
GLdouble near, GLdouble far )gluOrtho2D( GLdouble left, GLdouble right, GLdouble bottom, GLdouble
top)
Projection Matrix
Perspective ProjectiongluPerspective( GLdouble fovy, GLdouble aspect, GLdouble near, GLdouble far );glFrustum( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far );
ModelView Matrix• Modeling Transformation
• Perform rotate, translate, scale and combinations of these transformations to the object.
• Viewing Transformation• To positioning and aiming the camera
Modeling Transformations
glTranslatef(x, y, z)Multiplies current matrix by a matrix that moves an object by x,y,z
glTranslatef( 0, 0, -1)
Modeling Transformations
glRotatef(angle, x, y, z )Multiplies current matrix by a matrix that rotates an object in a counterclockwise direction about the ray from origin to (x,y,z) with angle as the degrees
glRotatef( 45.0, 0, 0, 1)
Modeling Transformations
glScalef (x, y, z)Multiplies current matrix by a matrix that scales an object along axes.
glScalef( 2.0, -0.5, 1)
Viewing Transformations
gluLookAt (eyex, eyey, eyez, atx, aty, atz, upx, upy, upz );
Matrix OrderCode:glMatrixMode(GL_PROJECTION)gluPerspectiveglMatrixMode(GL_MODELVIEW)gluLookAtglRotatefglTranslatefglScalefglBeginglVertex3fglEnd
Matrix Stack: Matrix Multiplication
= Vi
gluLookAt glRotatef
glTranslatef glScalef glVertex3f
gluPerspective
gluPerspective
gluLookAt
glRotatef
glTranslatef
glScalef
glVertex3f
Matrix OrderThe order of transformations is critical.
glTranslatef( 1,0,0 );glRotatef(45.0, 0,0,1 );drawObject();
glRotatef(45.0, 0,0,1 );glTranslatef( 1,0,0 );drawObject();
Interactive Setting and Display
Glut Window functions:glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);glutInitWindowSize(800, 600);glutInitWindowPosition(100, 100);glutCreateWindow(“Name");glutDisplayFunc(display);glutReshapeFunc(reshape);
Interactive setting functions:glutKeyboardFunc(keyboard);glutMouseFunc(mouse);glutMotionFunc(motion);
The most important topic.
Wake up for
Mantain matrix stack• glPushMatrix() : save the current matrix• glPopMatrix() : restore the saved matrix
glPushMatirx()
xglScalef
glPopMatrix()
Heirarchy Modeling
Body
head
Left hand
Right
handLeft leg
Right leg
Finger 1 Finger 2
Heirarchy ModelingMatrix Stack:
Stack
Current Matrix
Heirarchy ModelingMatrix Stack:
Stack
Current Matrix
glPushMatrix();
Push
Heirarchy ModelingMatrix Stack:
Stack
Current Matrix
glTranslatef();
x
Push
Heirarchy ModelingMatrix Stack:
Stack
Current Matrix
DrawBody();Push
Heirarchy ModelingMatrix Stack:
Stack
Current Matrix
glPushMatrix();
Push
Push
Heirarchy ModelingMatrix Stack:
Stack
Current Matrix
glRotatef();
x
Push
Push
Heirarchy ModelingMatrix Stack:
Stack
Current Matrix
glTranslatef();
x
Push
Push
Heirarchy ModelingMatrix Stack:
Stack
Current Matrix
DrawHead();Push
Push
Current Matrix
Heirarchy ModelingMatrix Stack:
Stack
glPopMatrix();
Push
Push
Pop
Current Matrix
Heirarchy ModelingMatrix Stack:
Stack
Current Matrix
glPushMatrix();
Push
Push
Pop
Push
Heirarchy ModelingMatrix Stack:
Stack
Current Matrix
Push
Push
Pop
Push
glRotatef();
x
Heirarchy ModelingMatrix Stack:
Stack
Current Matrix
Push
Push
Pop
Push
DrawHand();
Heirarchy ModelingMatrix Stack:
Stack
Current Matrix
glPushMatrix();
Push
Push
Pop
Push
Push
Heirarchy ModelingMatrix Stack:
Stack
Current Matrix
Push
Push
Pop
Push
Push
glTranslatef();
x
Heirarchy ModelingMatrix Stack:
Stack
Current Matrix
Push
Push
Pop
Push
glPopMatrix();
Push
Pop
Current Matrix
Heirarchy ModelingMatrix Stack:
Stack
Current Matrix
DrawFinger();
Push
Push
Pop
Push
Push
Heirarchy Modeling
Body
head
Left hand
Right
handLeft leg
Right leg
Finger 1 Finger 2
Push
Push Push
Push
Pop
Pop
Push Push Push
Push
Pop
Pop Pop Pop Pop
Pop
Contratulations !
You are well prepared for our homework now!
Time for Sample Codes
Robot.cglPushMatrix();
glTranslatef (-1.0, 0.0, 0.0); glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0); glTranslatef (1.0, 0.0, 0.0); glPushMatrix();
glScalef (2.0, 0.4, 1.0); glutWireCube (1.0);
glPopMatrix();
glPushMatrix(); glTranslatef (1.0, 0.0, 0.0); glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0); glTranslatef (1.0, 0.0, 0.0); glPushMatrix();
glScalef (2.0, 0.4, 1.0); glutWireCube (1.0);
glPopMatrix(); glPopMatrix();
glPopMatrix();
Dance.c • BOOL Open_CD(void)• BOOL Stop_CD(void) • BOOL Close_CD(void)• BOOL Play_CD(int bTrack)• int GetUnit(FILE* input)• void GetMovie(void)• void PutIntoFile(FILE* input,
int item)• void SetNull(FILE* input)• void SetRecord()• void ZoomChange()• void ColorChange(int mode)
• void init(void)• void reshape (int w, int h)• void baseroom(void)• void ManSet()• void WomanSet()• void display(void)• void keyboard (unsigned char
key, int x, int y)• int OnTimer(int value)• int main(int argc, char** argv)
Dance.c • BOOL Open_CD(void)• BOOL Stop_CD(void) • BOOL Close_CD(void)• BOOL Play_CD(int bTrack)
• int GetUnit(FILE* input)• void GetMovie(void)• void PutIntoFile(FILE* input,
int item)• void SetNull(FILE* input)• void SetRecord()
• void ZoomChange()• void ColorChange(int mode)
• void ManSet()• void WomanSet()
• void init(void)• void reshape (int w, int h)• void baseroom(void)• void display(void)• void keyboard (unsigned char
key, int x, int y)• int OnTimer(int value)• int main(int argc, char** argv)
Class Music{…
}; .
Class Script{…
}; .Class Animation{
… };
Class Component{ … };Class Actor{ … };
Compile OpenGL GLUT
Compile Dance Code
• Just use visual studio to open Dance.sln or Dance.vcproj, it will deal with it.
Download
Into
Target Folder
Put
Q&A