Title: ?? ??(Interaction)
1Lecture 5
2?? ??
- ?? ??
- ?? ??? ?? ?? ??
- ??? ?? ??
- ??? ?? ??
- ?????-?? ????
- ???- ?? ?? ?????
- ??? ???? ??
??? ???? ??
3?? ??(Interaction)
- ?? ??(Interaction)
- ???? ???? ???? ???? ?? ?? ??? ???? ?? ???? ????
??? ???? ???? ??? ?? - OpenGL??? ?? ??
- ???? ??? ?? ?? ??? ?? ???? ??? (GL ?????? ???? ??
??? ??) - GLUT ??????? ??
- ??? ??
- ??? ? ??? ?? ?? ??? ?? ??
- ?? ?? ?? ? ?? ?
4?? ??
- ??? ?? ??
- ???, ???? ?? ?? ??? ????? ??? ?? ??
- ??? ?? ??
- ?????? ???? ??? ??
- ??? ?????? ?? ?????? ?? ???? ??
- ?????? ??? ??? ?? ??? ???? ? ??? ??
- C??? printf ??
- ??? ??? ??? ?? ??? ???, ???, ??? ?? ?? ? ??
- ??? ?????? ??? ?? ??? ??? ? ? ??
5??? ?? ?? (1)
- ?? ??
- ???? ?? ??
- ? ???, ?? ???, ??? ?
- ??? ???? ?? x, y ??? ? ?? ??
- ?? ?? ?? ??
- ??? ???, ?? ???
- ?? ????, ??? ?? ?? ??? ??
6??? ?? ?? (2)
- ????
- ??-?? ??
- ????? ???? ? ? ?? ??????? ??? ??
- 3?? ?? ??
- ???? ?(space ball) 6-???? ??
- ??? ? ??, ??, ?? ?? ??
- ??? ???
7??? ?? ?? (3)
- 3?? ?? ??
- ???-?? ??
- 3?? ?? ??
- ??? ???
8??? ?? ??
- PHIGS, GKS?? API??? ?? ?? ??
- ??? ??
- ?? ??
- ??(pick) ?? ??? ???? ??
- ??(choice) ?? ?????? ??? ??
- ??? ?? ???? ??
- ?(stroke) ?? ??? ??? ??
- OpenGL? ?? 6?? ??? ???? ???
- ??? ??? ?? ??? ?? ??? ??
9???? ???
- ??? ?? ??? ?? ?????? ??? ???? ??? ??
- ???
- ??? ?????? ??? ???? ?
- ?) ??(pick) ?? ??? ??? ?? ??
- ??? ???
- ???
- ???? ????? ??? ?? ?? ??
- ?) ?? ?? ??
- ??? Enter ?
10?? ?? (1)
- ?? ?? ?? ??? ??? ? ??? ???? ?????? ???? ???
- (?) scanf()
- ?? ?? ???? ?? ?? ?? ????
- (?) getc()
??
???
?? ????
??? ????
????
???, ??
11?? ?? (2)
- ??? ??
- ?? ??? ????? ???? ???? ?? ??? ???? ???? ??? ??
???? - GLUT API? ?? ??
- ??? ??
- ??(callback) ??? ???? ??
- ??? ???? ?? ??? ????? ????
12???? ?????? ??
- ??????? ?????? ??
- ??? ??????? ?????? ??
- ????? ?? ???? ?? ??? ???? ???
- ?? ???? ???? ?? ??? ???? ???
- ?????? ??? ??
- ?? ??? ?
- ?? ???? ??? ?
- ?????? ?? ?? 3.11
- ???? ??(Graphics Server)
- ?????, ???, ??? ?? ?? ???? ??????
- ??????? ??? ???? ????? ??? ?? ????? ??
13????? ???
????? ???
??? ??
????
??
????
????? ???
?????
??
14?? ??? ?? ?? (1)
- ?? ??
- ????? ?? ??? ???? ??? ???? ?? ? ?? ??? ??? ????
????, ????? ?? ??? ?? ???? ?? ??? - ??? ???? ?????? ??? ??? ??, ??????? ??? ?? ????
????? ??
??? ??
?????
? ?
??
???
15?? ??? ?? ?? (2)
- ?? ??
- ??? ?? ???? ??? ??? ????? ???? ????
- ????? ???? ??? ???? ???????? ???? ???? ??? ?????
?????? ??
??? ??
??
???
?????
? ?
???
?????
????? ???
? ?????
????? ??
16????? ???
- ??
- ?????? ???? ??? ??
- ??? ?? ????? ??
- ??
- ??? ??? ??
- ????? ???? ???? ??
- ?? ??? ??? ???? ???
17????? ???? ??? ??
?? ID
??? ???? ??
glNewList(BOX, GL_COMPILE) // Display
List? ??. BOX? List? ID
// ??
GL_COMPILE_AND_EXECUTE
glBegin(GL_POLYGON) // Polygon? ??
glColor3f(1.0, 0.0., 0.0) // ??
Red?.. glVertex2f(-1.0, -1.0)
// 4?? ?? ?? glVertex2f(
1.0, -1.0) glVertex2f( 1.0,
1.0) glVertex2f(-1.0, 1.0)
glEnd() //
Polygon ?? ? glEndList()
// List ?? ?
18?? ???
- ???? ???? ?? ?? ?? ????? ???
- glGenLists(number)
- number ?? ??? ??? ID? ???? ? ID? ??
- glNewList() / glEndList
- ??? ??? ID? ???? ?? ???? ??
- glCallLists()
- ?? ????? ???? ??
- ? pp. 99, ?? ????
19GLUT? ??
- ? ?? ??
- glTranslatef(100.0, 100.0, 0.0)
- glutStrokeCharacter(GLUT_STROKE_ROMAN, A)
- ? A ?? ??
- ??? ?? ??
- glRasterPos2i(100,100)
- glutBitmapCharacter(GLUT_BITMAP_8_BY_13, A)
- ?? ? ?? ??? ???? (GLUT ??? ??)
20?? ? ?? (1)
- ??, ??-?? ??, ?? ?? ?? ???? ?? ??? ??? ???
- ????? ???? ???? ?? ??? ??? ???? ?? ? ???? ?? ??
glMatrixMode(GL_PROJECTION) //
View ?? for (I1 I lt 5 I)
glloadidentity()
// Matrix? ??? gluOrtho2D(-2.0I,
2.0I, -2.0I, 2.0I) // ?? ??? ??
glCallList(BOX)
21?? ? ?? (2)
- ?? ? ?? ?? ??
- ????? ??? ??? ?? ??? ??
- ? ????? ???? ???? ?? ??? ??? ???? ?? ? ???? ??
?? - ??? ???? ??
- glPushAttrib(GL_ALL_ATTRIB_BITS)
- glPushMatrix()
-
- glPopAttrib()
- glPopMatrix()
22???-?? ??? ?????
- ???? ??
- ??? ??
- ?? ???
- ?? ?? ??? ?? ?? ?? ?
- ?? ?? glutMotionFunc(callback_func)
- ??? ?????
- ??? ??? ?? ?? ?
- ?? ?? glutPassiveMotionFunc(callback_func)
- ??? ???
- ?? ? ??? ????? ???? ?
- ?? ?? glutMouseFunc(callback_func)
- ??? ?? ??
- ??? ???
23??? ??? ???? ?(square.c)
include ltgl\glut.hgt void myinit(void) void
mouse(int, int, int, int) Void drawSquare(int,
int) int main (int argc, char
argv) glutInit (argc, argv) glutInitDispla
yMode (GLUT_SINGLE GLUT_RGB) glutCreateWindow
(square) myinit() glutReshapeFunc(myReshape)
glutMouseFunc(mouse) glutMotionFunc(draw
Square) glutMainLoop()
??? ??? ?? ????
??? ??? ???? ???? ???? ??
24??? ??? ???? - ???
- / ?? ?? /
- GLsizei wh 500, ww 500 / ?? ??? ?? /
- GLfloat size 3.0 / ???? ??? ???? /
- void myinit(void)
-
- glViewport (0, 0, ww, wh)
- glMatrixMode (GL_PROJECTION)
- glLoadIdentity ()
- gluOrtho2D (0.0, (GLdouble) ww, 0.0, (GLdouble)
wh) - glMatrixMode (GL_MODELVIEW)
- glClearColor (0.0, 0.0, 0.0, 0.0)
- glClear (GL_COLOR_BUFFER_BIT)
- glFlush()
25??? ??? ????- ??? ???
void mouse (int button, int state, int x, int
y) if (button GLUT_LEFT_BUTTON state
GLUT_DOWN) drawSquare(x, y) if
(button GLUT_MIDDLE_BUTTON state
GLUT_DOWN) exit(0)
26??? ??? ????- ??? ???
- void drawSquare( int x, int y)
-
- y wh -y
- glColor3ub( (char)rand()256, (char)rand()256,
(char) rand()256) - glBegin(GL_POLYGON)
- glVertex2f (xsize, ysize)
- glVertex2f (x-size, ysize)
- glVertex2f (x-size, y-size)
- glVertex2f (xsize, y-size)
- glEnd()
- glFlush()
??? ?? ???? (0,0) ??? ?? ???? (0,0)
27??? ??? ???? - ??? ??? (1)
- ??? ??? (Reshape Event)
- ??? ??? ???? ??
- ?? ?? glutReshapeFunc()
- ?? ??
- ??? ?? ??? ?? ?? ????
- ???? ???? ?? ??? ?? ????
- ?? ??? ??? ??? ????? ????
28??? ??? ???? - ??? ??? (2)
- void myReshape (GLsizei w, GLsizei h)
-
- glMatrixMode (GL_PROJECTION)
- glLoadIdentity()
- gluOrtho2D (0.0, (GLdouble)w, 0.0, (GLdouble)h)
- glMatrixMode (GL_MODELVIEW)
- glLoadIdentity()
- glViewport (0, 0, w,h)
- glClearColor ( 0.0, 0.0, 0.0, 0.0)
- glClear(GL_COLOR_BUFFER_BIT)
- glFlush()
- ww w
- wh h
- ??? ?? ??? ??
- ??? ???? ???
- ????? ??,?? ??
29??? ??? ???? - ??? ???
- ??? ???
- ?? ??? ? ??? ??
- ??
void main() glutKeyboardFunc(keyboard)
void keyboard(unsigned char key, int x,
int y) if (key q key
Q) exit(0)
30??? ??? ???? - ????? /??(idle) ???
- ????? ??
- ???? ?? ???????? ? ?
- ?) ???? ? ?? ?? ?
- ????? ????? ??? ?? ?? ??? ??? ????? ? ?? ??
- ?? ?? glutDisplayFunc()
- ? ?? ??? ??? ?? ??? ?
- ?? ???? ?? ? ??
- ??? null ??
- ?? ?? glutIdleFunc(idle_func)
31? ?
- GLUT? ?? ??? ??
- ?? ?? ?? ?? ?
glutCreateMenu(demo_menu)
// ?? ?? ?? ?? glutAddMenuEntry(quit, 1)
// ?? ?? ?? glutAddMenuEntry(In
crease square size, 2) // ?? ??
?? glutAddMenuEntry(Decrease square size, 3)
// ?? ?? ?? glutAttachMenu(GLUT_RIGHT_BUTTON)
// ??? ??? ??? ??? ?? void demo_menu(int
id) // ?? ?? ?? if
(id 1) exit() //
Quit ??? ??? ?? else if (id 2) size 2
size // Increase square size ??? ??? ??
else if (size gt 1) size size / 2 //
Decrease square size ??? ??? ??
glutPostRedisplay() // ????
?? ??? ?? ??.
32?? ??
- sub_menu glutCreateMenu(size_menu)
// ??? ?? ?? ?? - glutAddmenuEntry(Increase square size, 2)
// ?? ?? ?? - glutAddMenuEntry(Decrease square size, 3)
// ?? ?? ?? -
- glutCreateMenu(top_menu)
// ??? ?? ?? ?? - glutAddMenuEntry(quit, 1)
// ?? ?? ?? - glutAddSubMenu(Resize, sub_menu) // ???
?? ?? - glutAttachMenu(GLUT_RIGHT_BUTTON) // ???
??? ?? ??
33??? ??? ????
?? ??
??
?? ?? ?? ?? ??, ?? ??
34??? ??? ???? - ?? ??
void mouse(int btn, int state, int x, int y)
// ??? ?? ?? void display(void)
// Display ?? ?? void idle(void)
// Idle ?? ?? void drawSquare(int
x, int y) // 4?? ?? void
myReshape(GLsizei, GLsizei) // Resizing ??
?? void myinit(void) //
??? ?? void screen_box(intx, int y, int s)
void right_menu(int id)
// ? ??? ?? ?? void middle_menu(int id) void
color_menu(int id) void pixel_menu(int id) void
fill_menu(int id) long time(int t)
// ???? ?? int pick(int x, int
y) // ?? ?? ??
35??? ??? ???? - ??? ??
- main() ?? ? ?? ???? ??
- display() ??? ???? ??? ?, ??? ??
- idle() ?? ??? "? ? ?" ??? ??? ??
- myReshape() 3.5??? ??? Reshape ?? ?? ??
- myinit() ???? ???, ???? ? Time Clock? ???, 128
- ??? ????? ???? ??
- mouse() ?? ??? ?? ??
- pick() ??? X, Y ??? ???? ????? ??? ??
- ??? ?? 0, ?? 1, 2, 3, 4
- ?? ?? ?? ? ??? ??? ??
36??? ??? ???? - myinit()
void myinit(void) / set up a font in
display list / int i baset time(0)
base glGenLists(128) for(i0ilt128i)
glNewList(basei, GL_COMPILE)
glutBitmapCharacter(GLUT_BITMAP_9_BY_15, i)
glEndList()
glListBase(base) glViewport(0,0,ww,wh)
/ Pick 2D clipping window to match size of X
window. This choice avoids having to scale
object coordinates each time window is
resized / glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0.0, (GLdouble) ww , 0.0,
(GLdouble) wh , -1.0, 1.0) / set
clear color to black and clear window /
glClearColor (0.0, 0.0, 0.0, 1.0)
glClear(GL_COLOR_BUFFER_BIT) glFlush()
37??? ??? ???? - display()
void screen_box(int x, int y, int s )
glBegin(GL_QUADS) glVertex2i(x, y)
glVertex2i(xs, y) glVertex2i(xs, ys)
glVertex2i(x, ys) glEnd()
glColor3f(1.0, 0.0, 0.0)
screen_box(ww/10,wh-ww/10, ww/10)
glColor3f(0.0, 1.0, 0.0) screen_box(ww/5,wh-w
w/10,ww/10) glColor3f(0.0, 0.0, 1.0)
screen_box(3ww/10,wh-ww/10,
ww/10) glColor3f(0.0, 0.0, 0.0)
screen_box(ww/10ww/40,
wh-ww/10ww/40, ww/20)
void display(void) glPushAttrib(GL_ALL_ATTRI
B_BITS) glutIdleFunc(NULL) glClearColor
(0.0, 0.0, 0.0, 1.0) glClear(GL_COLOR_BUFFER_
BIT) glColor3f(1.0, 1.0, 1.0)
screen_box(0,wh-ww/10,ww/10)
38??? ??? ???? - display()
glBegin(GL_LINES) glVertex2i(wh/40,wh-
ww/20) glVertex2i(wh/40ww/20,
wh-ww/20) glEnd()
glBegin(GL_TRIANGLES) glVertex2i(ww/5ww/4
0, wh-ww/10ww/40)
glVertex2i(ww/5ww/20,wh-ww/40)
glVertex2i(ww/53ww/40,
wh-ww/10ww/40) glEnd()
glPointSize(3.0) glBegin(GL_POINTS)
glVertex2i(3ww/10ww/20,
wh-ww/20) glEnd() glutIdleFunc(idle)
glFlush() glPopAttrib()
39??? ??? ???? - idle()
void idle(void) char out"000000"
long t, time() int min, sec, hr
glPushAttrib(GL_ALL_ATTRIB_BITS)
ttime(0)-baset hrt/3600 min (t -
3600hr) /60 sec (t - 3600hr - 60min)
hr hr24 out0'0'hr/10
out1'0'hr10 out3'0'min/10
out4'0'min10 out6'0'sec/10
out7'0'sec10
glRasterPos2i(ww-80, wh-15)
glColor3f(0.0,0.0,0.0) glBegin(GL_QUADS)
glVertex2i(ww-80, wh-15)
glVertex2i(ww, wh-15) glVertex2i(ww,
wh) glVertex2i(ww-80, wh) glEnd()
glColor3f(1.0,1.0,1.0) glCallLists(
strlen(out) , GL_BYTE, out) glFlush()
glPopAttrib()
40??? ??? ???? - mouse()
void mouse(int btn, int state, int x, int y)
static int draw_mode 0 static int
count int where static int
xp2,yp2 if(btnGLUT_LEFT_BUTTON
stateGLUT_DOWN)
glPushAttrib(GL_ALL_ATTRIB_BITS)
glutIdleFunc(NULL) where pick(x,y)
glColor3f(r, g, b) if(where ! 0)
count 0 draw_mode where
else if(draw_mode 1 count 0)
count 1 xp0 x yp0
y else if(draw_mode 1 count ! 0)
glBegin(GL_LINES)
glVertex2i(x,wh-y)
glVertex2i(xp0,wh-yp0) glEnd()
draw_mode0 count0
41??? ??? ???? - mouse()
else if(draw_mode3 count0)
count 1 xp0 x
yp0 y else if(draw_mode3
count1) count 2
xp1 x yp1 y
else if(draw_mode2 count0) count
1 xp0 x yp0 y else
if(draw_mode2 count !0)
if(fill) glBegin(GL_POLYGON) else
glBegin(GL_LINE_LOOP)
glVertex2i(x,wh-y)
glVertex2i(x,wh-yp0)
glVertex2i(xp0,wh-yp0)
glVertex2i(xp0,wh-y) glEnd()
draw_mode0 count0
42??? ??? ???? - mouse()
- else if(draw_mode3 count2)
-
- if(fill) glBegin(GL_POLYGON)
- else glBegin(GL_LINE_LOOP)
- glVertex2i(xp0,wh-yp0)
- glVertex2i(xp1,wh-yp1)
- glVertex2i(x,wh-y)
- glEnd()
- draw_mode0
- count0
-
-
else if(draw_mode 4 )
drawSquare(x,y) count
glutIdleFunc(idle) glPopAttrib()
glFlush()
43??? ??? ???? - pick()
- int pick(int x, int y)
-
- y wh - y
- if(y lt wh-ww/10) return 0
- else if(x lt ww/10) return 1
- else if(x lt ww/5) return 2
- else if(x lt 3ww/10) return 3
- else if(x lt 2ww/5) return 4
- else return 0
44Report 2 ??? ????? ??
- ?? ?? ??
- ??? ??? ?? ??
- ?? ?? ?? ??
- ?, ??? ?? ?? ?? ??
- rubberbanding ?? ??
- ??
- ??? ?? ?? ?? ?? ?? ?? ?? ??
- ?? ?? ??
- ??? ?? ??
- ? ?? ??? ??
- ?? ??? ??
45??? ???? ??
- ?? ??? ????? ??
- ?????? ?? ?????? ???? ????? ??
- ???? ??? ??? ??
- ??? ??? ??? ??? ??
- ???? ?? ??? ?????
- ????? ???
- ???? ?? ?? ???
- ??? ??? ?? ??? ??? ??
46?? ??? (1)
- ??? ?????? ??? ???
- ?? ?? ?? 50-75?
- ? ??? ??? ??? ?? 50-75? ??? ??
- ???? ?? ??? ??? ??? ???? ?? ??
- ?? ? ??? ????? ??? ??? ??
- ??? ???? ? ???? ?? ??? ? ?? ??
?? ????? ?? ??
47?? ??? (2)
- ??? ?? ??
- ?? ?? ??? ???? ??
- ?? ?? ??? ??? ?? ?? ??? ??
glutSwapBuffers()
48??, ???, ??? ?? (1)
- ??
- GLUT?? ???? ?????? ?????, ???, ??? ?? ??, ??, ???
? ??? ??? ???? ?? - ?? ??? ? ?? ??? ????? ? ?? ??? ???? ?? ???
- FLTK ?? ??? ??
49??, ???, ??? ?? (2)
- ??? ??? ?? ??? ??? ??
- ?? ??? ? ??? ???? ??
- ??? ??(rubberbanding)
- XOR ??? ??? ? ??
- OpenGL??? ???(layer)? ???? ?? ??