?? ??(Interaction) - PowerPoint PPT Presentation

1 / 49
About This Presentation
Title:

?? ??(Interaction)

Description:

Title: Lecture #6 Last modified by: Created Date: 2/4/2001 12:31:01 AM Document presentation format: Other titles: Times New Roman Arial ... – PowerPoint PPT presentation

Number of Views:11
Avg rating:3.0/5.0
Slides: 50
Provided by: mclabSill
Category:

less

Transcript and Presenter's Notes

Title: ?? ??(Interaction)


1
Lecture 5
  • ? 3 ?. ??? ?? ??

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
??? ???? ??
  • ??
  • ??
  • glCallList(BOX)

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, ?? ????

19
GLUT? ??
  • ? ?? ??
  • 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
  1. ??? ?? ??? ??
  2. ??? ???? ???
  3. ????? ??,?? ??

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

44
Report 2 ??? ????? ??
  • ?? ?? ??
  • ??? ??? ?? ??
  • ?? ?? ?? ??
  • ?, ??? ?? ?? ?? ??
  • rubberbanding ?? ??
  • ??
  • ??? ?? ?? ?? ?? ?? ?? ?? ??
  • ?? ?? ??
  • ??? ?? ??
  • ? ?? ??? ??
  • ?? ??? ??

45
??? ???? ??
  • ?? ??? ????? ??
  • ?????? ?? ?????? ???? ????? ??
  • ???? ??? ??? ??
  • ??? ??? ??? ??? ??
  • ???? ?? ??? ?????
  • ????? ???
  • ???? ?? ?? ???
  • ??? ??? ?? ??? ??? ??

46
?? ??? (1)
  • ??? ?????? ??? ???
  • ?? ?? ?? 50-75?
  • ? ??? ??? ??? ?? 50-75? ??? ??
  • ???? ?? ??? ??? ??? ???? ?? ??
  • ?? ? ??? ????? ??? ??? ??
  • ??? ???? ? ???? ?? ??? ? ?? ??

?? ????? ?? ??
47
?? ??? (2)
  • ??? ?? ??
  • ?? ?? ??? ???? ??
  • ?? ?? ??? ??? ?? ?? ??? ??

glutSwapBuffers()
48
??, ???, ??? ?? (1)
  • ??
  • GLUT?? ???? ?????? ?????, ???, ??? ?? ??, ??, ???
    ? ??? ??? ???? ??
  • ?? ??? ? ?? ??? ????? ? ?? ??? ???? ?? ???
  • FLTK ?? ??? ??

49
??, ???, ??? ?? (2)
  • ??? ??? ?? ??? ??? ??
  • ?? ??? ? ??? ???? ??
  • ??? ??(rubberbanding)
  • XOR ??? ??? ? ??
  • OpenGL??? ???(layer)? ???? ?? ??
Write a Comment
User Comments (0)
About PowerShow.com