:,, OpenGL,, OpenGL, Windows Visual C ++ OpenGL,,,, CAD CG, : ,,,, ;,, ( CIP) /,,. :, ( 21 ) ISBN

Size: px
Start display at page:

Download ":,, OpenGL,, OpenGL, Windows Visual C ++ OpenGL,,,, CAD CG, : 010-62782989 13501256678 13801310933,,,, ;,, ( CIP) /,,. :, 2005. 3 ( 21 ) ISBN 7-302-10"

Transcription

1

2 :,, OpenGL,, OpenGL, Windows Visual C ++ OpenGL,,,, CAD CG, : ,,,, ;,, ( CIP) /,,. :, ( 21 ) ISBN TP CIP ( 2005) : : http: / /www. tup. com. cn : : : : : : : : : 358 : : ISBN / TP 7086 : :

3 : : : ( ) : :

4 P RE F ACE 21, 21,,, 21, 20 ACM IEEE,,,,,,,,,,,,,,,,,,,,, 21,, ,,,,,, 21,

5 , 21 ACM IEEE /CS Computing Curricula 2001( CC2001 ),,,, CC2001,, 2002 ( China Computing Curricula 2002, CCC2002), 21 ACM IEEE /CS CC2001, CCC2002,,,

6 F OREWORD, 20 60, 20 80,,,,,,,,,, CAD / CAM/ CAE, 1994, 10, 9 1, ; 2,, Windows OpenGL ; 3,,, Visual C ++ OpenGL ; 4,, OpenGL ; 5, Windows MFC OpenGL ; 6,,, OpenGL ; 7,,, OpenGL NURBS ; 8, ; 9, CAD / CAM : ( 1 )

7 40,,,, ( 2 ),, ( 3 ) OpenGL,, Windows OpenGL,, OpenGL,, OpenGL, OpenGL OpenGL 1 ; 2 ; 3 ; 4 8 ; 5 ; 6 ; 7 ; 9,!,,

8 CO NTE NT S Windows Windows Windows Windows Windows OpenGL OpenGL OpenGL OpenGL Visual C ++ OpenGL OpenGL 26

9 Visual C Visual C OpenGL OpenGL OpenGL OpenGL OpenGL OpenGL

10 OpenGL OpenGL OpenGL ModelView OpenGL Model OpenGL View OpenGL OpenGL OpenGL Windows MFC ( FitWindow)

11 OpenGL OpenGL OpenGL OpenGL Z Z OpenGL OpenGL OpenGL OpenGL

12 B zier B zier B zier B B B B B B B OpenGL OpenGL NURBS OpenGL NURBS OpenGL NURBS CSG

13 CAD / CAM CAD / CAM

14 ,,,, ( computer graphics, CG), 20 80,,,,,,,, CAD / CAM/ CAE, computer graphics ( ) Ivan E. Sutherland 1963 Sketchpad: CRT, 1958 Calcomp, GerBer Ivan E. Sutherland Sketchpad,, 1-1 Ivan E. Sutherland Sketchpad

15 1-1 Ivan E. Sutherland Sketchpad, 20 60, , ,,, 20 80,, CPU /,,,,,,, ( ),, 30 /,, 20 60,,,, 20 70,,,,,, 1-2 SAMSUNG 6

16 , ( locator) ( stroke) ( valuator) ( choice ) ( pick) ( string), 6,,,,,,,, 1-2 SAMSUNG,,,,,,,,,,,,, , 1.,, Bresenham ;, 2. 3.,

17 Z, Gouraud Phong,, ( ),,, 4.,,,,,,,,,,,,, 5., ,,, Ferguson 1963, B zier 1962 UNISURF, de Casteljau 1959 CAD, Coons 1964,, B, 1972, deboor Cox B B, 1975, Riesenfeld B, Versprille B, , Piegl Tiller B, B ( non-uniform rational B-spline, NURBS) 1991 ( ISO), NURBS CAD NURBS 6.,,,,

18 , 40, 20,,,, Volume Graphics,, , ,,,,, ;, ( computational geometry),,, 1. 3,, 20 80,

19 ,,, 1. ( graphical user interface, GUI),,,,,,, 2. ( CAD / CAM) ( computer aided design, CAD) ( computer aided manufacturing, CAM) CAD /CAM,, CAD / CAM, ( CIMS) 3. ( visualization in scientific computing),,, see the unseen, 4. ( geographical information system, GIS),, 5.,, 6.,, 1-3

20 ( virtual reality, VR) ( virtual environment),,,, 8. ( reverse engineering),,,,,, 1. 1? 1. 2?

21 ,, OpenGL , 1. ( CRT) ( CRT) 2-1, 5,,, ( pixel),, CRT, 3, 3 3, 3 3,,,,,

22 9 2-1 ( CRT) , 8,, 256 ( 8 ), = 16, 16 ( 24 ) , 20 80, ( liquid crystal display, LCD),,,,, ;,,, ( plasma display panel, PDP),

23 2.,,,,,,,,,,, 3.,, , OpenGL,,, AutoCAD 3DS MAX,,, CAD /CAM 1. : ACIS Parasolid CAD / CAM ACIS Parasolid ACIS Parasolid Braid Ian 1973 Baumgart B. G. GEOMED ( ), ( B-rep) 1974 Braid Ian Charles Lang Alan Grayer

24 Shape Data, Romulus, 1988 Parasolid,, ( ), Parasolid,, CAD, CAD UGII SolidWorks Parasolid EDS( Electronic Data Systems) CAD / CAM, 7000, CAD / CAM/CAE, 1989 Braid Ian ACIS, ACIS 3 ( Solid) ACIS 1986 ( Spatial Technology Inc. ), NURBS, NURBS, ACIS STEP,,, ACIS ACIS, C ACIS, Romulus 4 20, Parasolid 2 6 ACIS, 3D ACIS 3D Toolkit 380, 180, ACIS, AutoCAD CAD-KEY Mechanical Desktop Bravo TriSpectives TurboCAD SolidModeler VellumSolid, Spatial Technology ACIS 7. 0 ACIS : ( ACIS 3D Toolkit) ( Optional Husks),, : ; ; ; ; ; ACIS,, ACIS ACIS C DLL, 3D, ACIS 2. CAD / CAM CAD /CAM, AutoCAD 11

25 AutoCAD PC Autodesk, 20 80, 1996 Autodesk MDT, PC,, Unigraphics( UG) UG Unigraphics Solutions,, Parasolid,,, 1997 Unigraphics Solutions Intergraph CAD, Solid Edge Parasolid, UNIX Windows NT CAD /CAE / CAM/ PDM Pro / Engineer Pro / Engineer ( Parametric Technology Corporation, PTC) PTC 1985, CAID /CAD / CAE /CAM/PDM, CAD / CAE / CAM Pro /Engineer,, ; CAD /CAE / CAM, CAD /CAE / CAM I-DEAS I-DEAS SDRC, CAD / CAE / CAM SDRC, CAD, CATIA CATIA 20 70, IBM,, 777 F - 22, 4000 CATIA Cimatron Cimatron 1982 Cimatron, CAD / CAM, Windows, ACIS MasterCAM MasterCAM CNC ( 1984 ) PC CAD /CAM, Parasolid MasterCAM NURBS, CAM Delcam s Power Solution

26 Delcam,, Delcam s Power Solution Windows CAD /CAM, PowerSHAPE PowerMILL CopyCAD ArtCAM PowerINSPECT Delcam PowerMILL CAM ; CopyCAD, 70% 90 %, CAD / CAM : CAD CAXA GS-CAD98 CAD 20 90,, Imageware Geomagic, UG ProE, I-DEAS Imageware Delcam CopyCAD CAD / CAM 3., : Softimage Softimage Alias Research Alias Wavefront Technologies Wavefront Softimage 1986, Maya, Softimage 3D Softimage 1994 Softimage, 1996 Windows NT Softimage 3 D Softimage 3D Softimage 3 D Softimage 3D, NURBS, Autodesk 3 DS MAX,, Softimage Avid, Softimage /XSI, Alias Wavefront SGI, 1998 Maya, Maya Renderman Pixar,, Renderman 13

27 , Autodesk 3DStudio MAX, Windows,, 3 DS MAX 3 DS MAX, 3DS MAX,, After-burn, Metareye, 4. AVS Advanced Visual Systems Inc., VolVis Arie E. Kaufman, X /Motif, ApE TaraVisual Inc.,, Visualizer , 3,,,,,,, , ( American National Standards Institute, ANSI), 1977, ( Associational for Computing Machinery, ACM) ( Special Interest Group on Graphics, SIGGRAPH ) ( 3D core graphics system), ( International Standard Organization, ISO) GKS( graphical kernel system), 3D Core

28 1988 GKS-3D ISO, PHIGS( programmer s hierarchical interactive graphics system) ISO, ISO CGI ( computer graphics interface) CGM( computer graphics metafile),,, SGI OpenGL, DirectX 2. DXF DXF( drawing exchange file, ) Autodesk AutoCAD, ASCII DXF 5 ( section) : ( header) DXF, ; ( tables),, ; ( blocks) ; ( entities) ; ( end of file) DXF DXF AutoCAD, CAD, 3. CGM CGM( computer graphic metafile), CGM,,, 3, 4. IGES IGES( intial graphics exchange specification) CAD / CAM CAD /CAM, 1982 ANSI ( flag) ( star) ( global) ( director entry) ( parameter data) ( terminate), ASCII ASCII 3 IGES,,, 3 IGES 2-3, CAD IGES, IGES, IGES CAD, CAD 15

29 2-3 IGES 5. STEP STEP( standard for the exchange of product model data) IGES (, ),,,, CAD / CAM STEP 2. 2 Windows Microsoft Windows, Windows, Windows, Windows, Windows Windows Windows DOS, DOS, C/ C ++, main,, main ( ),,, C/ C ++, 2-4 DOS Windows,, Windows, WinMain, Windows

30 DOS, WndProc,,, Windows Windows Windows Windows, Microsoft Visual C ++ Visual Basic, Borland C ++ Bulider Delphi, Visual C ++, Visual C ++, Visual C ++, C ++

31 C ++,,,,,,,, Visual C ++ Visual C ++,, 5 : CWinApp CMyApp CMDIFrameWnd CMainFrame CMDIChildWnd CChildFrame CDocument CMyDoc CView CMyView CMyApp : theapp, CWinApp theapp,, CMyApp, theapp CMainFrame CChildFrame :,, CMyDoc, CMyView, -,,, Windows Visual C ++ Windows OnDraw OnDraw CView, CView, CView WM_PAINT OnPaint WM_PAINT, Invalidate, OnDraw,, Windows ( GDI) GDI Windows, ( device context), Windows

32 1. DC Windows, ( device context, DC), GDI,, Windows MFC 4 : Display DC, Printer DC, Memory DC, Information DC,, 2., ( HDC) MFC, Windows ( HDC) ( 1) CDC :, CDC CDC, 170, ( 2 ) CPaintDC : CPaintDC OnPaint( ), OnPaint( ), CPaintDC Win32 API BeginPaint ( ), Win32 API EndPaint( ) ( 3 ) CClientDC : CClientDC, Win32 API GetDC ( ), Win32 API ReleaseDC( ) ( 4) CWindowDC : CWindowDC,,,, CWindowDC Win32 API GetDC ( ), Win32 API ReleaseDC( ) ( 5 ) CMetaFileDC : CMetaFileDC Windows Windows GDI 19

33 3. Windows GDI,,, X, Y 3, 3, Windows Windows Visual C ++ Windows :, ; ;, : v oi d CMyVi e w On Dr a w( CDC* { / / pdc) / /, 1 p DC - >Mo ve To ( 1 00, 1 00 ) ; p DC - >Li ne To ( 2 00, 2 00 ) ; / /, CPe n * pol d Pe n; / / CPe n da s h Pe n ; / /, 1 d a s hpe n. Cr e a t e Pe n ( PS_DASH, 1, RGB( 2 55, 0, 0 ) ) ; / /, pol d Pe n p Ol dpe n = pdc - >Se l e c t Obj e c t ( &d a s hpe n ) ; / / p DC - >Li ne To ( 30 0, 10 0 ) ; / / p DC - >Se l e c t Obj e c t ( p Ol dpe n ) ;

34 / / p DC - >Li ne To ( 4 00, 2 00 ) ; } OpenGL 2-6 OpenGL,, OpenGL Windows OpenGL OpenGL OpenGL( open graphics library, ) SGI GL SGI OpenGL ARB ( OpenGL architecture review board, OpenGL ), OpenGL ARB SGI Microsoft Intel IBM Sun Compaq HP, OpenGL, OpenGL, OpenGL OpenGL, OpenGL, OpenGL OpenGL, Windows 95 /98 Windows NT/2000 Linux Mac OS UNIX OS /2, Microsoft Windows 95 Visual OpenGL, OpenGL OpenGL C C ++ FORTRAN Ada Java OpenGL OpenGL OpenGL,, : OpenGL,, OpenGL NURBS :,,, OpenGL

35 OpenGL 4,, : OpenGL, RGBA, RGBA, A,, R G B :, OpenGL ( emitted light) ( ambient light) ( diffuse light) ( specular light), OpenGL ( texture mapping) :, alpha OpenGL, : OpenGL,,,, : OpenGL ( double buffering),,,, : OpenGL,,, OpenGL,, OpenGL, ( depth cue) ( motion blur) ( fog) OpenGL OpenGL, ( vertex) ( pixel) OpenGL 2-7 OpenGL OpenGL,,

36 OpenGL, ( evaluator),,, ( display list),,,, ( fragment), ( dithering) Visual C ++ OpenGL Visual C + +,, OpenGL, PreCreateWindow OpenGL : c s. s t yl e = WS_CLI PCHI LDREN WS_CLI PSI BLI NGS; OnCreate OpenGL, OpenGL, OpenGL OnCreate, OpenGL RC( rendering context) PIXELFORMATDESCRIPTOR, wglcreatecontext( ) RC :

37 / / PI XELFORMATDESCRI PTOR p f d = { s i z e o f ( PI XELFORMATDESCRI PTOR), / / pf d 1, / / PFD_DRAW_TO_WI NDOW / / Wi n do w PFD_SUPPORT_OPENGL / / Op e n GL PFD_DOUBLEBUFFER, / / PFD_TYPE_RGBA, / / RGBA 2 4, / /2 4 0, 0, 0, 0, 0, 0, / / c ol or b i t s i g no r e d 0, / / no a l p ha b uf f e r 0, / / s h i f t bi t i g no r e d 0, / / 0, 0, 0, 0, / /a c c um b i t s i gn or e d 3 2, / /3 2 z 0, / / 0, / / no a ux i l i a r y b uf f e r PFD_MAI N_PLANE, / / 0, / / 0, 0, 0 / / l a y e r ma s ks i gn or e d } ; CCl i e nt DC d c ( t hi s ) ; i nt p i x e l Fo r ma t = Cho os e Pi x e l Fo r ma t ( dc. m_h DC, &p f d ) ; BOOL s u c c e s s = Se t Pi x e l Fo r ma t ( dc. m_h DC, pi xe l For ma t, &p f d ) ; / / RC m_h RC = wgl Cr e a t e Co nt e x t ( d c. m_hdc) ; OnSize, OpenGL,, glviewport OnEraseBkgnd OnEraseBkgnd, TRUE Windows, OpenGL, ( ) OnDestroy OnDestroy OnCreate RC,

38 wgldeletecontext, RC, wglmakecurrent ( ) RC DC : wgl Ma ke Cu r r e n t ( NULL, NULL) ; wgl De l e t e Co nt e x t ( m_h RC) ; 25 OnDraw OnDraw, : wgl Ma ke Cu r r e n t ( p DC - >m_h DC, m_h RC) ; Dr a wsc e ne ( ) ; / /, Ope ngl wgl Ma ke Cu r r e n t ( p DC - >m_h DC, NULL) ; DrawScene( ),, OpenGL, Z,, OpenGL,,,,, g l Be g i n ( GL_LI NES) ; g l Col or 3 f ( 1. 0, 0. 0, 0. 0 ) ; g l Ve r t e x2 f ( 0, 0 ) ; g l Ve r t e x2 f ( 1, 1 ) ; g l Col or 3 f ( 0. 0, 1. 0, 0. 0 ) ; g l Ve r t e x2 f ( 0. 2, 0 ) ; g l Ve r t e x2 f ( , 1 ) ; g l End ( ) ; / /Ope ngl / / / / 2-8,,, : g l Be g i n ( GL_TRI ANGLES) ; g l Col or 3 f ( 1. 0, 0. 0, 0. 0 ) ; g l Ve r t e x3 f ( , 0. 0, 0. 0 ) ; g l Col or 3 f ( 0. 0, 1. 0, 0. 0 ) ; / / / /

39 g l Ve r t e x3 f ( 0. 0, 1. 0, 0. 0 ) ; g l Col or 3 f ( 0. 0, 0. 0, 1. 0 ) ; / / g l Ve r t e x3 f ( 1. 0, 0. 0, 0. 0 ) ; g l End ( ) ; 2-8 * 2-9 * 2-9,, 3,, OpenGL,, OpenGL,,, OpenGL,,,, OpenGL OpenGL OpenGL 4, :, 1. alpha ( bitplane), ( front buffer) ( back buffer) ( front_ left) ( front _right) ( back _left) ( back_right), *,

40 : ( 1 ) : glclear( GL_COLOR_BUFFER_BIT),, ( 2 ) : glclearcolor( red, green, blue, alpha), ( red, green, blue, alpha), ( 3 ) : glcolormask( ), alpha ( 4 ) : gldrawbuffer( ), ( 5 ) : swapbuffer( ),, 2. Z-buffer,,, OpenGL,,, OpenGL : ( 1 ) : glclear( GL_DEPTH _BUFFER_BIT),, ( 2 ) : glcleardepth( 1. 0) ( 3 ) : gldepthmask ( GL_ TRUE), ; gldepthmask ( GL_FALSE), ( 4 ) : glenable ( GL _ DEPTH _ TEST), ; gldisable( GL_DEPTH_TEST), ( 5) : gldepthfunc( ),, OpenGL ( 6 ) : gldepthrange ( Glclampd znear, Glclampd zfar), znear zfar, 3.,,,,, (, ) ; ; 4.,,,, 27

41 ( ),,, , Visual C ++, OnDraw, 2. 3, OnDraw 2. 4,,, Windows X Y 2. 5 ( X 0, Y 0 ) B, X 0 Y 0 0, B 1, OnDraw ( X, Y) ( ( X - X 0 ) * B, ( Y - Y 0 ) * B) ( X 0, Y 0 ) B,,,, , OpenGL, ( : OpenGL,,,, Z - 1, X Y ) glclearcolor glclear, ,, 1 1, , gldrawbuffer( ) swapbuffer( ),, 2. 8, ,,, : glclear glcleardepth gldepthmask glenable gldepthfunc

42 3. 1,,,,, ( ),,,,,,,,,,,,,,,, : Se t Pi xe l ( x, y, c o l o r ) ;, x y, color, ,

43 ,,,,, 45,,, : y = kx + b ( 3-1), k, b y p 0 ( x 0, y 0 ) p 1 ( x 1, y 1 ), k b k = y/ x = ( y 1 - y 0 ) / ( x 1 - x 0 ) b = y 0 - k x 0, x ( ) 1, ( 3-1) y, SetPixel( x, int( y ), color),,, : ( DDA) Bresenham 1. ( DDA) P 0 ( x 0, y 0 ), P 1 ( x 1, y 1 ) L( P 0, P 1 ), k = y 1 - y 0 x 1 - x 0 x x 0, x, = 1 ( ), y : y = k x + b, ( x, round( y) ) x = 1 y i + 1 = kx i b = kx i + b + k x = y i y i + 1 = y i + k + k x : x 1, y k( ) 3-1 ( digital differential analyzer, DDA),, x y, x y DDA C : v oi d DDALi n e ( i nt x 0, i n t y 0, i n t x 1, i n t y 1, i nt c ol or ) { i nt i ;

44 DDA } f l o a t d x, d y, l e n gt h, x, y ; i f ( f a b s ( x 1 - x 0 ) >= f a bs ( y 1 - y 0 ) ) l e n gt h = f a b s ( x 1 - x 0 ) ; e l s e l e n gt h = f a b s ( y 1 - y 0 ) ; d x = ( x 1 - x 0 ) / l e n gt h; d y = ( y 1 - y 0 ) /l e n gt h ; i = 1 ; x = x 0 ; y = y 0 ; whi l e ( i <= l e n gt h) { Se t Pi xe l ( i nt ( x ), i nt ( y ), c o l o r ) ; x = x + d x ; y = y + d y ; i + + ; } : DDA P 0 ( 0, 0 ) P 1 ( 5, 2 ) 3-2 DDA,,, x dx y dy,,, 2. Bresenha m DDA, 1965, Bresenham, Bresenham, Bresenham :

45 3-2 DDA ( ),,, d i, 3-3, k 0 1, P 0 ( x 0, y 0 ), ( x ), y, ( x i, y i ), x i + 1 y y, 1, d 1 d d i x i x i, y i x i + 1, y i, 1 y i : y = y 1 - y 0 x = x e 1 d 1 = y - y i = ( k( x i + 1) + b) - y i d 2 = ( y i + 1) - y = y i ( k( x i + 1) + b) d 1 - d 2 = 2k( x i + 1) - 2y i + 2b x 0, k = y/ x,, : x( d 1 - d 2 ) = 2 y x i - 2 x y i + c ( 3-2)

46 , c, c = 2 y + x( 2b - 1), e i = x( d 1 - d 2 ), e i, d 1 - d 2 ( x > 0) e i < 0, ( x i + 1, y i ), ; e i > 0, ( x i + 1, y i + 1), ; e i = 0,, ( x i + 1, y i + 1) x y, k + 1, ( 3-2) : ( 3-2), : e i + 1 = 2 y x i x y i c e i e i = 2 y ( x i x i ) - 2 x ( y i y i ), c x i + 1, y i + 1, y i + 1 = x i + 1, : e i + 1 = e i + 2 y - 2 x ( y i y i ) - y i = 1, : e i + 1 = e i + 2 y - 2 x = y i, : e i + 1 = e i + 2 y x,,, ( x 0, y 0 ) e 0, ( 3-2) k = y / x : e 0 = 2 y - x 0 < k < 1 Bresenham : 33 v oi d Br e s e n ha m_li n e ( i nt x 0, i n t y 0, i n t x 1, i nt y 1, i nt c o l o r ) { i nt d x, dy, e, i, x, y ; d x = x 1 - x 0, d y = y 1 - y 0, e = 2 * d y - dx ; x = x 0, y = y 0 ; f or ( i = 0 ; i <= d x ; i + + ) { Se t Pi x e l ( x, y, c ol or ) ; x + + ; i f ( e >= 0 ) { y ++ ; e = e + 2 * dy - 2 * d x ; } e l s e e = e + 2 * dy ; } }

47 : 3-4( a) Bresenham P 0 ( 0, 0) P 1 ( 5, 2), 3-4( b) Bresenham x, y, e 3 k ( 0 < k < 1),, k > 1, y 1, Bresenham x 1, x y, k < 0, x y 1, 1 Li ne : P 0 ( 0, 0 ), P 1 ( 5, 2 ) ( a) x y e ( b) 3-4 Bresenham ( x c, y c ) r 4, : x = 0, y = 0, x = y x = - y ( x, y), 4 7,,, 8 : v oi d Ci r c l e Po i n t s ( i n t x, i nt y, i nt c ol or ) { Se t Pi xe l ( x, y, c ol or ) ; Se t Pi x e l ( y, x, c ol or ) ; Se t Pi xe l ( - x, y, c ol or ) ; Se t Pi xe l ( y, - x, c o l o r ) ; Se t Pi xe l ( x, - y, c ol or ) ; Se t Pi xe l ( - y, x, c o l o r ) ; Se t Pi xe l ( - x, - y, c ol or ) ; Se t Pi xe l ( - y, - x, c o l o r ) ; },, R x 2 + y 2 = R 2, 3 :, ;

48 , ; 1 /8 :, x, x 0 2 R, y 2 : 35 y = R 2 - x 2 ( ),, x, r, : x = rcos y = rsin [ 0, /4],,, 2. ( 0, R) ( R / 2, R/ 2 ) 1 /8, P( x P, y P ),, P 1 ( x P + 1, y P ) P 2 ( x P + 1, y P - 1) 3-5 F ( x, y) = x 2 + y 2 - R 2,, F ( x, y) = 0;, F ( x, y) > 0 ;, F( x, y) < 0 M P 1 P 2, M = ( x P + 1, y P ), F ( M) < 0, M 3-5, P 1, P 1 F ( M) > 0, P 2, P 2 F ( M) = 0, P 1 P 2, P 2, d P = F( M) = F( x P + 1, y P ) = ( x P + 1) 2 + ( y P ) 2 - R 2 d P < 0 P 1, : d P + 1 = F( x P + 2, y P ) = ( x P + 2 ) 2 + ( y P ) 2 - R 2 = d P + 2x P + 3

49 d P 0 P 2, : d P + 1 = F( x P + 2, y P ) = ( x P + 2) 2 + ( y P ) 2 - R 2 = d P + 2( x P - y P ) + 5 ( 0, R), d : d 0 = F( 1, R ) = R, e = d ,, d = R e = 1 - R d < 0 e < e,, e, e < e < 0 : Mi d Po i n t Ci r c l e ( i nt r, i n t c o l o r ) { i nt x, y ; i nt e ; x = 0 ; y = r ; e = 1 - r ; Ci r c l e Poi nt s ( x, y, c o l o r ) ; whi l e ( x <= y ) { i f ( e < 0 ) e + =2 * x + 3 ; e l s e { e += 2 * ( x - y ) +5 ; y - - ; } x + + ; Ci r c l e Poi nt s ( x, y, c o l o r ) ; } } 3.,, ( x - x c ) 2 / a 2 + ( y - y c ) 2 / b 2 = 1,,, ( x c, y c ), x y,,, x 2 / a 2 + y 2 /b 2 = 1 : F ( x, y) = b 2 x 2 + a 2 y 2 - a 2 b 2 = 0 ( 3-3)

50 : F ( x, y) < 0, ( x, y) ; F ( x, y) = 0, ( x, y) ; F ( x, y) > 0, ( x, y),, :, - 1, 3-6, x, ; - 1, y ( 3-3) : dy/ dx = - 2b 2 x /2a 2 y, dy /dx = - 1, : 2b 2 x = 2a 2 y, : 2 b 2 x = 2 a 2 y,,, ( x P, y P ), ( x P + 1, y P ) : d P = F ( x P + 1, y P ) = b 2 ( x P + 1) 2 + a 2 ( y P ) 2 - a 2 b 2, d P < 0,,, : d P + 1 = F( x P + 2, y P ) = b 2 ( x P + 2) 2 + a 2 ( y P ) 2 - a 2 b 2 = ( b 2 ( x P + 1) 2 + a 2 ( y P ) 2 - a 2 b 2 ) + b 2 ( 2x P ) = d P + b 2 ( 2x P ),, d 1 b 2 ( 2x p ) d P > 0,,, : d P + 1 = F ( x P + 2, y P ) = b 2 ( x P + 2) 2 + a 2 ( y P ) 2 - a 2 b 2

51 = ( b 2 ( x P + 1) 2 + a 2 ( y P ) 2 - a 2 b 2 ) + b 2 ( 2 x P ) - 2a 2 y P + 1 = d P + b 2 ( 2x P ) - 2a 2 y P + 1,, d 1 b 2 ( 2x P ) - 2a 2 y P + 1 d P : ( 0, b), ( 1, b ), d P 0 = F( 1, b ) = b 2 + a 2 ( b ) 2 - a 2 b 2 = b 2 + a 2 ( - b ),,, x y v oi d Mi dp oi nt El l i ps e ( i nt x c, i nt y c, i nt a, i n t b, i nt c ol or ) { i nt a a = a * a, bb = b * b ; i nt t wo a a = 2 * a a, t wo bb = 2 * b b ; i nt x = 0, y = b; i nt d ; i nt d x = 0 ; i nt d y = t wo a a * y ; d = i n t ( b b + a a * ( - b ) ) ; Se t Pi xe l ( x c + x, y c + y, c o l o r ) ; Se t Pi xe l ( x c + x, y c - y, c o l o r ) ; Se t Pi xe l ( x c - x, y c + y, c o l o r ) ; Se t Pi xe l ( x c - x, y c - y, c o l o r ) ; Whi l e ( dx < dy ) { x + + ; dx + = t wob b ; i f ( d < 0 ) d += b b + d x ; e l s e { dy - = t woa a ; d += b b + d x - dy ; y - - ; } Se t Pi x e l ( xc + x, y c + y, c o l o r ) ; Se t Pi x e l ( xc + x, y c - y, c o l o r ) ; Se t Pi x e l ( xc - x, y c + y, c o l o r ) ; Se t Pi x e l ( xc - x, y c - y, c o l o r ) ; } d = i n t ( b b * ( x ) * ( x ) + a a * ( y - 1 ) * ( y - 1 ) - a a * b b ) ; whi l e ( y >0 ) { y - - ; dy - = t woa a ;

52 } } i f ( d > 0 ) d += a a - d y ; e l s e { x + + ; dx + = t wob b; d += a a - d y + dx ; } Se t Pi x e l ( xc + x, y c + y, c o l o r ) ; Se t Pi x e l ( xc + x, y c - y, c o l o r ) ; Se t Pi x e l ( xc - x, y c + y, c o l o r ) ; Se t Pi x e l ( xc - x, y c - y, c o l o r ) ; ,,,,,,, :,,,,,,,, : ? :,, y,, y, x,,, y ( x )

53 ,, ;,, 4 : : ; : x ; :,, ; ; :, 1.,, ( active edge), x, ( AET) ( a) 3-7 y = 6, 3-8( b) y = 7, x x i,, x, : y = y i, x = x i ; y = y i + 1, a x + by + c = 0 x i + 1 = 1 a ( - b y i c) = x i - b a

54 41 3-8, x = - b a 3-8 ( AET),,, : 1 x ; 2 x x; 3 y m ax, ( NET),, y mi n, y min, NET : v oi d po l y f i l l ( p ol yg on, c o l o r ) i nt c ol or ; p ol yg on ; { f or (, i ) {

55 } NET [ i ] ; y mi n = i NET [ i ] ; y = ; AET ; f or ( i ) { NET[ i ] AET, x ; AET, ( ) ( x, y ), dr a wpi xe l ( x, y, c o l o r ) ; AET, y ma x = i AET, y ma x > i x x ;, AET ; } } / * p ol yf i l l * /,,, : 3-7, y = 7 P 6, P 6 ;, P 1, 1, 3,, 3-10 :,, P 5, P 6, y i < y i - 1, y i < y i + 1, 2 ( ), P 2 ; y i > y i - 1, y i > y i + 1, 0 ( ), P , ( ), 1, y y y ,, :,,

56 inside inside,, inside, inside, inside,, : 43 v oi d e d ge ma r k _f i l l ( p ol yd e f, c o l o r ) po l y de f ; i nt c ol or ; { p ol yd e f ; i ns i d e = FALSE; f or ( po l y de f y ) f or ( x ) { i f ( x ) i n s i de =! ( i n s i de ) ; i f ( i n s i de! = FALSE) dr a wpi xe l ( x, y, c ol or ) ; e l s e dr a wpi xe l ( x, y, b a c kg r o un d ) ; } },,,, ,,, ;, 3-11,,,, 3-11,

57 , 4 8, , 4,,, ; 8, 8, ( x, y) 4, oldcolor, newcolor 4 : v oi d Fl oo dfi l l 4 ( i n t x, i nt y, i nt o l d c o l o r, i nt n e wc o l o r ) { i f ( Ge t Pi xe l ( x, y ) == o l d c o l o r ) { Se t Pi x e l ( x, y, n e wc o l o r ) ; Fl oo dfi l l 4 ( x, y + 1, ol dc ol or, n e wc o l o r ) ; Fl oo dfi l l 4 ( x, y - 1, ol dc ol or, n e wc o l o r ) ; Fl oo dfi l l 4 ( x - 1, y, ol dc ol or, n e wc o l o r ) ; Fl oo dfi l l 4 ( x + 1, y, ol dc ol or, n e wc o l o r ) ; } } 4 : v oi d Bo un da r y Fi l l 4 ( i nt x, i n t y, i n t bo un da r y c o l o r, i nt n e wc o l o r ) { i nt c ol or = Ge t Pi x e l ( x, y ) ; i f ( c ol or! = n e wc o l o r && c ol or! = b ou nd a r yc ol or ) { Se t Pi x e l ( x, y, n e wc o l o r ) ; Bo un da r y Fi l l 4 ( x, y + 1, bo un da r y c o l o r, ne wc ol or ) ;

58 } } Bo un da r y Fi l l 4 ( x, y - 1, bo un da r y c o l o r, ne wc ol or ) ; Bo un da r y Fi l l 4 ( x - 1, y, bo un da r y c o l o r, ne wc ol or ) ; Bo un da r y Fi l l 4 ( x + 1, y, bo un da r y c o l o r, ne wc ol or ) ; 45 8, 4 8,,,, : ( x, y),,,, 4 : : ( x, y) : ( x, y), y : ( x, y),, xl xr : [ xl, xr] y,, t yp e d e f s t r uc t { i nt x ; i nt y ; } Se e d ; / / v oi d Sc a n Li ne Fi l l 4 ( i nt x, i n t y, COLORREF o l d c o l o r, COLORREF ne wc ol or ) { i nt x l, xr, i ; b oo l s p a n Ne e d Fi l l ; Se e d pt ; s e t s t a c ke mp t y ( ) ; p t. x = x ; pt. y = y ; s t a c k pu s h ( pt ) ; / / whi l e (! i s s t a c k e mpt y ( ) ) {

59 pt = s t a c kp op ( ) ; y = pt. y ; x = p t. x ; wh i l e ( g e t pi xe l ( x, y ) = = o l d c o l o r ) / / { Se t Pi x e l ( x, y, n e wc o l o r ) ; x ++ ; } xr = x - 1 ; x = p t. x - 1 ; wh i l e ( g e t pi xe l ( x, y ) = = o l d c o l o r ) { Se t Pi x e l ( x, y, n e wc o l o r ) ; x - - ; } xl = x + 1 ; / / / / x = x l ; y = y + 1 ; wh i l e ( x < x r ) { s p a n Ne e d Fi l l = FALSE; wh i l e ( g e t pi xe l ( x, y ) = = o l d c o l o r ) { s p a n Ne e d Fi l l = TRUE; x ++ ; } i f ( s p a n Ne e d Fi l l ) { pt. x = x - 1 ; pt. y = y ; s t a c kp us h( p t ) ; s p a n Ne e d Fi l l = FALSE; } wh i l e ( g e t pi xe l ( x, y )! = o l d c o l o r && x < xr ) x + + ; } / /End o f whi l e ( i < x r ) / /, x = xl ; y = y - 2 ; wh i l e ( x < x r )

60 } { s p a n Ne e d Fi l l = FALSE; wh i l e ( g e t pi xe l ( x, y ) = = o l d c o l o r ) { s p a n Ne e d Fi l l = TRUE; x ++ ; } i f ( s p a n Ne e d Fi l l ) { pt. x = x - 1 ; pt. y = y ; s t a c kp us h( p t ) ; s p a n Ne e d Fi l l = FALSE; } wh i l e ( g e t pi xe l ( x, y )! = o l d c o l o r && x < xr ) x + + ; } / /End o f whi l e ( i < x r ) } / / En d of whi l e (! i s s t a c k e mpt y ( ) ) 47, , ;,,, :,,, 1,,,,, M N, M N M N, ( x, y), ( x% M, y% M), % C 1,,,, : i f ( p a t t e r n ( x% M, y% N) ) Se t Pi xe l ( x, y, c ol or ) ; / / c o l o r 3. 4 ASCII 7 128, ASCII

61 , GB , ASCII, : 0 ASCII ; 1,, , 1, 0,, ( ),,, :,,,,, / B zier 3-13 ; ,,, ;,,

62 , 3. 5 Visual C ++ Windows Visual C + + Visual C ++, GDI( ), Windows GDI, Visual C G DI MS-DOS,, MS-DOS, Windows, ( GDI) GDI, GDI :, Windows ;, GDI, Windows, GDI, Windows GDI, Visual C ++, GDI GDI CGdiObject, GDI CGdiObject, GDI : CBitmap,,, CBrush,, CPen,,,, : CFont,,, CPalette,,, : 256 CRgn,,

63 2. G DI, CGdiObject, GDI ( CPen CBrush), ; ( CFont CRgn),, C ++,, CreateFont CreatePolygonRgn CGdiObject, C ++ Windows GDI CGdiObject,, 3. GDI Windows GDI Windows, (, Windows GDI ) MFC SelectStockObject,,, GDI,, Visual C Visual C ++ ( VC ++ ) VC ++ - ( VC ++ -, VC ++ ), Windows ( CDC) GDI,, CDC (,, CClientDC CWindowsDC ) ( ), CDC, OnDraw,, OnDraw,,,,, OnDraw ;,, Invalidate ( InvalidateRect) Windows Invalidate OnDraw, OnDraw,,,, 5 :

64 2. Windows,,,,,,, 51, CDC SelectStockObject, : v i r t u a l CGd i Obj e c t * Se l e c t St oc kobj e c t ( i nt n I n de x ) ;, CGdiObject ( CPen CBrush ), NULL nindex,, BLACK_BRUSH NULL_BRUSH DKGRAY_BRUSH WHITE_BRUSH GRAY_BRUSH BLACK_PEN HOLLOW_BRUSH NULL_PEN LTGRAY_BRUSH WHITE_PEN ( ) ( ), : p DC - >Se l e c t St oc kobj e c t ( WHI TE_PEN) ; p DC - >Se l e c t St oc kobj e c t ( BLACK_BRUSH) ; MFC, CPen GDI, CBrush GDI, : CPen CBrush ;

65 ;, ; ;, CPen CreatePen, : BOOL Cr e a t e Pe n ( i nt n Pe nst y l e, i n t nwi d t h, COLORREF c r Co l o r ) ;, npenstyle, 3-2 nwidth ( ) crcolor 3-2 PS_DASH, PS_INSIDEFRAME PS_DASHDOT PS_NULL PS_DASHDOTDOT PS_SOLID PS_DOT, CDC SelectObject, SelectObject : CPe n * Se l e c t Ob j e c t ( CPe n * p Pe n ) ;, ppen SelectObject, ( 1 ) CBrush CreateSolidBrush, : BOOL Cr e a t e So l i dbr u s h ( COLORREF c r Col or ) ;, crcolor ( 2 ) CBrush CreateHatchBrush, : BOOL Cr e a t e Ha t c hbr u s h ( i nt n I n de x, COLORREF c r Col or ) ;, nindex, 3-3

66 crcolor 3-3 HS_BDIAGONAL HS_FDIAGONAL 53 HS_CROSS HS_HORIZONAL HS_DIAGCROSS HS_VERTICAL ( 3 ) CBrush CreatePatternBrush, : BOOL Cr e a t e Pa t t e r nbr u s h ( CBi t ma p * p Bi t ma p ) ;, pbitmap,, CDC SelectObject, SelectObject : CBr us h * Se l e c t Ob j e c t ( CBr u s h * p Br us h ) ;, pbrush SelectObject, COLORREF, RGB 32, 3, RGB( ) ( ),,, ( ) 0, 0 255, 0, RGB ( 0x00FF0000 ), RGB( ) RGB( ) : COLORREF RGB( BYTE bre d, BYTE b Gr e e n, BYTE b Bl ue ) ;, RGB( 255, 0, 0), RGB( 0, 0, 0), RGB( 255, 0, 255 ), 3. CDC, ( ),

67 , ( x) ;, ( y) CDC, ( 1 ),,,,,,, Windows 8 ( 3-4), ( ) ( ) 3-4 W indows 8 MM_HIENGLISH MM_HIMETRIC MM_LOENGLISH X, Y MM_LOMETRIC 10 1 MM_TWIPS MM_TEXT 1 X, Y MM_ANISOTROPIC MM_ISOTROPIC X Y X Y GDI 6,, 6, MM_TEXT, ( y), 5 ( y),, MM_TEXT, MM_LOENGLISH MM_ANISOTROPIC MM_ISOTROPIC, ( ),,,, x y 4 x

68 , y Windows x x, y y, Windows, x x, y y MM_ISOTROPIC, ( ), GDI, MM_ANISOTROPIC,,, Windows : SetWindowsExt, SetViewPortExt, SetWindowsOrg, SetViewPortOrg ( 2 ), CDC SetMapMode, : 55 v i r t u a l i nt Se t Ma pmod e ( i nt n Ma pmod e ) ; nmapmode 8 SetMapMode,, x y, 7,,, ( 3 ) CDC DPtoLP, : v oi d DPt o LP( LPPOI NT l p Po i n t s, i n t ncou nt = 1 ) ; v oi d DPt o LP( LPRECT l pre c t ) ; v oi d DPt o LP( LPSI ZE l ps i z e ) ; lppoints POINT CPoint, ncount lprect RECT CRect, lpsize SIZE CSize, CDC LPtoDP, :

69 v oi d LPt o DP( LPPOI NT l p Po i n t s, i n t ncou nt = 1 ) ; v oi d LPt o DP( LPRECT l pre c t ) ; v oi d LPt o DP( LPSI ZE l ps i z e ) ; 4. ( 1 ) Windows, R2 _ COPYPEN, Windows,,,, CDC SetROP2, : i nt Se t ROP2 ( i n t ndr a wmod e ) ; ndrawmode, R2_BLACK R2_WHITE R2_NOP R2_NOT R2_COPYPEN R2_NOTCOPYPEN R2_MERGEEPENNOT R2_MASKPENNOT R2_MERGENOTPEN R2_MASKNOTPEN R2_MERGEPEN R2_NOTMERGEPEN R2_MASKPEN R2_NOTMASKPEN R2_XORPEN R2_NOTXOPEN, R2_MERGEPEN R2_MASKPEN, R2_XORPEN 3-5, R2 _NOT,

70 ,, ( 2 ), CDC SetBkColor, : 57 v i r t u a l COLORREF Se t BkCol or ( COLORREF c r Col or ) ; crcolor,, : Se t Bk Co l o r ( h dc, RGB( 0, 2 55, 0 ) ) ; ( 3 ) SetBkColor, SetBkMode : i nt Se t Bk Mo de ( i n t nbkmod e ) ; nbkmode, OPAQUE TRANSPARENT OPAQUE( ), SetBkColor TRANSPARENT( ),, SetBkColor OPAQUE 5., ( 0, 0), ( 1 ) ( ) CDC SetPixel ( ), : COLORREF Se t Pi x e l ( i n t x, i nt y, COLORREF, c r Col or ) ; COLORREF Se t Pi x e l ( POI NT po i n t, COLORREF, c r Col or ) ; x y point, crcolor : SetPixel,,,, 5, :

71 v oi d CDr a wdot Vi e w OnDr a w( CDC* p DC) { p DC - >Se l e c t St oc kobj e c t ( BLACK_BRUSH) ; p DC - >El l i ps e ( CRe c t ( 5, 10, 1 0, 1 5 ) ) ; } / / / / ( 2 ), CDC MoveTo MoveTo : CPo i n t Mo ve To ( i n t x, i nt y ) ; CPo i n t Mo ve To ( POI NT po i n t ) ; x y point ( 3 ) CDC LineTo LineTo( ), : BOOL Li ne To ( i n t x, i nt y ) ; BOOL Li ne To ( POI NT po i n t ) ; x y point, ( x, y) point Polyline : BOOL Po l y l i ne ( LPPOI NT l p Po i n t s, i n t ncou nt ) ; lppoints POINT, ncount ( 5, 5 ) ( 50, 50 ), 3-14, : v oi d CDr a wli n e Vi e w On Dr a w( CDC* { pdc - >Mov e To( 5, 5 ) ; pdc - >Li n e To( 5 0, 50 ) ; } pdc) 3-14 ( 4 ), CDC Arc, : BOOL Ar c ( i nt x1, i nt y1, i n t x2, i n t y2, i nt x3, i nt y3, i n t x4, i n t y4 ) ;

72 BOOL Ar c ( LPCRECT l pre c t, POI NT p t St a r t, POI NT p t End ) ; ( x1, y1) ( x2, y2) lprect, ( x1, y1), ( x2, y2) ( x3, y3 ) ptstart ( x4, y4) ptend, CDC ArcTo, : 59 BOOL Ar c To ( i nt x1, i nt y1, i n t x2, i n t y2, i nt x3, i nt y3, i n t x4, i n t y4 ) ; BOOL Ar c To ( LPCRECT l pre c t, POI NT p t St a r t, POI NT p t End ) ; ArcTo Arc, ArcTo ( 5 ) CDC, Rectangle RoundRect, Rectangle, RoundRect Rectangle : BOOL Re c t a n gl e ( i nt x1, i nt y1, i n t x2, i n t y2 ) ; BOOL Re c t a n gl e ( LPCRECT l pre c t ) ; ( x1, y1 ) ( x2, y2) lprect ( x1, y1 ), ( x2, y2) RoundRect : BOOL Ro un dre c t ( i nt x1, i nt y1, i n t x2, i n t y2, i nt x3, i nt y3 ) ; BOOL Ro un dre c t ( LPCRECT l pre c t, POI NT p oi nt ) ; ( x1, y1 ) ( x2, y2) lprect ( x1, y1 ), ( x2, y2) ( x3, y3) point, x3 y3 ( 6 ) CDC Ellipse( ),, : BOOL El l i ps e ( i nt x1, i nt y1, i n t x2, i n t y2 ) ; BOOL El l i ps e ( LPCRECT l p Re c t ) ; ( x1, y1) ( x2, y2) lprect, ( x1, y1), ( x2, y2),, x2 - x1 y2 - y1 ( 3-15 ),

73 ( 20, 20), ( 120, 120) : v oi d CDr a wel l i p s e Vi e w OnDr a w( CDC* { pdc - >El l i p s e ( 20, 2 0, 12 0, 1 20 ) ; } p DC) ( 7 ) CDC Pie, : 3-15 BOOL Pi e ( i nt x1, i nt y1, i n t x2, i n t y2, i nt x3, i nt y3, i n t x4, i n t y4 ) ; BOOL Pi e ( LPCRECT l pre c t, POI NT p t St a r t, POI NT p t End ) ; Pie,,,, ( 8 ) CDC Polygon, : BOOL Po l y go n ( LPPOI NT l ppoi nt s, i nt n Co un t ) ; lppoints, ncount,, POINT, point[ 6],, : Pol yg on ( po i n t, 5 ) ; ( 9 ) CDC PolyB zier, : BOOL Po l y B z i e r ( c o ns t POI NT* l p Po i n t, i nt n Co un t ) ; lppoint POINT ncount lppoint, 3, 6. CDC : ( 1 ) FillRect,, : v oi d Fi l l Re c t ( LPCRECT l p Re c t, CBr u s h * p Br us h) ;

74 lprect, pbrush ( 2 ) FillRgn, : v oi d Fi l l Rg n ( CRg n * prgn, CBr us h * pbr u s h ) ; 61 prgn, pbrush ( 3 ) FloodFill, : BOOL Fl oo dfi l l ( i nt x, i n t y, COLORREF c r Col or ) ; ( x, y), crcolor FloodFill ( x, y), crcolor ( x, y) crcolor,, ( 4 ) InvertRect, : v oi d I n ve r t Re c t ( LPCRECT l p Re c t ) ; lprect 3. 6 OpenGL OpenGL glbegin( ) glend( ) glbegin( ) Glenum, Mode GL_POINTS GL_LINES GL_POLYGON GL_TRIANGLES GL_QUADS GL_LINE_STRIP GL_LINE_LOOP,

75 Mode GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUAD_STRIP glend( ), OpenGL OpenGL, ( 3-16 ) : g l Be g i n ( GL_POI NTS) ; g l Ve r t e x2 f ( 0. 0, 0. 0 ) ; g l Ve r t e x2 f ( 0. 0, 3. 0 ) ; g l Ve r t e x2 f ( 3. 0, 3. 0 ) ; g l Ve r t e x2 f ( 4. 0, 1. 5 ) ; g l Ve r t e x2 f ( 3. 0, 0. 0 ) ; g l End ( ) ; 3-16, glvertex2f( ),, 5 glbegin( ) glend( ), glvertex3f( ), : g l Be g i n ( GL_POI NTS) ; g l Ve r t e x3 f ( 0. 0 f, 0. 0 f, 0. 3 f ) ; g l Ve r t e x3 f ( 0. 5 f, 0. 5 f, f ) ; g l End ( ) ;, glpointsize ( ) ( ), : g l Poi nt Si z e ( 2. 0 f ) ;, OpenGL 1. :

76 g l Be g i n ( GL_LI NES) ; g l Ve r t e x2 f ( 0. 5 f, 0. 5 f ) ; g l Ve r t e x2 f ( f, 0. 0 f ) ; g l Ve r t e x2 f ( f, 0. 5 f ) ; g l Ve r t e x2 f ( 0. 0 f, f ) ; g l End ( ) ; 63, glbegin ( ) glend ( ) :, ;,,, : g l Li n e Wi d t h ( 2. 0 f ) ;,, ( Stippled Lines),, gllinestipple( ) OpenGL, 1, ,,, x00FF GlLineStipple( ) OpenGL, Glint,, Glushort,,, 2, , OpenGL glenable( ), : g l Ena bl e ( GL_LI NE_STI PPLE) : v oi d dr a wl i ne s ( )

77 { g l Be g i n ( GL_LI NES) ; gl Ve r t e x2 f ( f, 0. 8 f ) ; gl Ve r t e x2 f ( 0. 8 f, 0. 8 f ) ; g l End ( ) ; g l Ena bl e ( GL_LI NE_STI PPLE) ; g l Li n e St i pp l e ( 1, 0 x00 FF) ; g l Be g i n ( GL_LI NES) ; gl Ve r t e x2 f ( f, 0. 4 f ) ; gl Ve r t e x2 f ( 0. 8 f, 0. 4 f ) ; g l End ( ) ; } g l Li n e St i pp l e ( 2, 0 x00 FF) ; g l Be g i n ( GL_LI NES) ; gl Ve r t e x2 f ( f, 0. 0 f ) ; gl Ve r t e x2 f ( 0. 8 f, 0. 0 f ) ; g l End ( ) ; g l Di s a b l e ( GL_LI NE_STI PPLE) ; / / :, gl Di s a bl e 2. glbegin( ) GL_LINE_STRIP, : g l Be g i n ( GL_LI NE_STRI P) ; g l Ve r t e x2 f ( f, 0. 6 f ) ; g l Ve r t e x2 f ( 0. 8 f, 0. 6 f ) ; g l Ve r t e x2 f ( f, 0. 2 f ) ; g l Ve r t e x2 f ( 0. 8 f, 0. 2 f ) ; g l End ( ) ; glbegin( ) glend( ),,,, OpenGL 1., 3-18, :

78 g l Be g i n ( GL_POLYGON) ; g l Ve r t e x2 f ( 0. 0, 0. 0 ) ; g l Ve r t e x2 f ( 0. 0, 3. 0 ) ; g l Ve r t e x2 f ( 3. 0, 3. 0 ) ; g l Ve r t e x2 f ( 4. 0, 1. 5 ) ; g l Ve r t e x2 f ( 3. 0, 0. 0 ) ; g l End ( ) ; ( 3 ),, 2., glpolygonstipple( ) ( ), v oi d gl Po l y go nst i pp l e ( c o ns t Gl ub yt e * ma s k ) ; mask ( ), 1 ; 0 glenable( ), gldisable( ) g l Ena bl e ( GL_POLYGON_STI PPLE) ; g l Di s a b l e ( GL_POLYGON_STI PPLE) ; 3, 3-19,, GLu by t e f l y [ ] = { / / ma s k 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x03, 0 x80, 0 x01, 0 xc0, 0 x06, 0 xc0, 0 x03, 0 x60, 0 x04, 0 x60, 0 x06, 0 x20, 0 x04, 0 x30, 0 x0 C, 0 x20, 0 x04, 0 x18, 0 x18, 0 x20, 0 x04, 0 x0 C, 0 x30, 0 x20, 0 x04, 0 x06, 0 x60, 0 x20, 0 x44, 0 x03, 0 xc0, 0 x22, 0 x44, 0 x01, 0 x80, 0 x22, 0 x44, 0 x01, 0 x80, 0 x22, 0 x44, 0 x01, 0 x80, 0 x22, 0 x44, 0 x01, 0 x80, 0 x22, 0 x44, 0 x01, 0 x80, 0 x22, 0 x44, 0 x01, 0 x80, 0 x22, 0 x66, 0 x01, 0 x80, 0 x66, 0 x33, 0 x01, 0 x80, 0 xcc, 0 x19, 0 x81, 0 x81, 0 x98, 0 x0 C, 0 xc1, 0 x83, 0 x30, 0 x07, 0 xe 1, 0 x87, 0 xe 0, 0 x03, 0 x3 f, 0 xf C, 0 xc0, 0 x03, 0 x31, 0 x8 C, 0 x C0, 0 x03, 0 x33, 0 xcc, 0 xc0, 0 x06, 0 x64, 0 x26, 0 x60, 0 x0 C, 0 xcc, 0 x33, 0 x30, 0 x18, 0 xcc, 0 x33, 0 x18, 0 x10, 0 xc4, 0 x23, 0 x08,

79 0 x10, 0 x63, 0 xc6, 0 x08, 0 x10, 0 x30, 0 x0 C, 0 x08, 0 x10, 0 x18, 0 x18, 0 x08, 0 x10, 0 x00, 0 x00, 0 x08 } ; GLu by t e h a l f t on e [ ] = { / / ma s k 0 xaa, 0 xaa, 0 xaa, 0 xaa, 0 x55, 0 x55, 0 x55, 0 x55, 0 xaa, 0 xaa, 0 xaa, 0 xaa, 0 x55, 0 x55, 0 x55, 0 x55, 0 xaa, 0 xaa, 0 xaa, 0 xaa, 0 x55, 0 x55, 0 x55, 0 x55, 0 xaa, 0 xaa, 0 xaa, 0 xaa, 0 x55, 0 x55, 0 x55, 0 x55, 0 xaa, 0 xaa, 0 xaa, 0 xaa, 0 x55, 0 x55, 0 x55, 0 x55, 0 xaa, 0 xaa, 0 xaa, 0 xaa, 0 x55, 0 x55, 0 x55, 0 x55, 0 xaa, 0 xaa, 0 xaa, 0 xaa, 0 x55, 0 x55, 0 x55, 0 x55, 0 xaa, 0 xaa, 0 xaa, 0 xaa, 0 x55, 0 x55, 0 x55, 0 x55, 0 xaa, 0 xaa, 0 xaa, 0 xaa, 0 x55, 0 x55, 0 x55, 0 x55, 0 xaa, 0 xaa, 0 xaa, 0 xaa, 0 x55, 0 x55, 0 x55, 0 x55, 0 xaa, 0 xaa, 0 xaa, 0 xaa, 0 x55, 0 x55, 0 x55, 0 x55, 0 xaa, 0 xaa, 0 xaa, 0 xaa, 0 x55, 0 x55, 0 x55, 0 x55, 0 xaa, 0 xaa, 0 xaa, 0 xaa, 0 x55, 0 x55, 0 x55, 0 x55, 0 xaa, 0 xaa, 0 xaa, 0 xaa, 0 x55, 0 x55, 0 x55, 0 x55, 0 xaa, 0 xaa, 0 xaa, 0 xaa, 0 x55, 0 x55, 0 x55, 0 x55, 0 xaa, 0 xaa, 0 xaa, 0 xaa, 0 x55, 0 x55, 0 x55, 0 x55 } ; g l Cl e a r ( GL_COLOR_BUFFER_BI T) ; g l Col or 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l Re c t f ( , 25. 0, , ) ; g l Ena bl e ( GL_POLYGON_STI PPLE) ; g l Pol yg on St i p pl e ( f l y) ; g l Re c t f ( , , , ) ; g l Pol yg on St i p pl e ( ha l f t o ne ) ; g l Re c t f ( , , , ) ; g l Di s a b l e ( GL_POLYGON_STI PPLE) ; g l Fl u s h ( ) ; , ,, OpenGL, :,, ( 1 )

80 v oi d gl Po l y go nmod e ( GLe nu m f a c e, GLe n um mod e ) ; face : GL_FRONT_AND_BACK, ; GL_FRONT, ; GL_BACK, mode : GL_POINT, ; GL_LINE, ;

81 GL_FILL, : glpolygonmode( GL_FRONT_AND_BACK, GL_FILL),,, g l Pol yg on Mo de ( GL_FRONT, GL_FI LL) ; g l Pol yg on Mo de ( GL_BACK, GL_LI NE) ; ( 2 ),, glfrontface( ) v oi d gl Fr on t Fa c e ( Gl e nu m mo de ) ; mode : GL_CW( ) GL_CCW(, ) ( 3 ),, OpenGL,,,, glcullface( ), ( cull), glenable ( ) v oi d gl Cu l l Fa c e ( GLe n um mod e ) ;, mode : GL_FRONT, ; GL_BACK, ( ) ; GL_FRONT_AND_BACK, : g l Ena bl e ( GL_CULL_FACE) ; g l Di s a b l e ( GL_CULL_FACE) ; ( 4 ), ;,,

82 ,, : glnormal* ( ) 69 v oi d gl No r ma l 3 {b s i df } ( TYPE nx, TYPE n y, TYPE n z ) ; v oi d gl No r ma l 3 {b s i df } v ( c on s t TYPE* v ) ; nx ny nz x y z, ( 0, 0, 1) v x y z ( ) glnormal* ( ) glenable ( GL_ NORMALIZE),, glnormal* ( ) glnormal* ( ), glvertex* ( ),,,, n0 n1 n2 n3 v0 v1 v2 v3: g l Be g i n ( GL_POLYGON) ; g l Nor ma l 3 f v ( n0 ) ; g l Ve r t e x3 f v ( v0 ) ; g l Nor ma l 3 f v ( n1 ) ; g l Ve r t e x3 f v ( v1 ) ; g l Nor ma l 3 f v ( n2 ) ; g l Ve r t e x3 f v ( v2 ) ; g l Nor ma l 3 f v ( n3 ) ; g l Ve r t e x3 f v ( v3 ) ; g l End ( ) ; OpenGL, ( ), : V( s, t) = [ X( s, t) Y( s, t) Z( s, t) ] V s V t,, :

83 , : F( x, y, z) = 0,, : z = G( x, y) V( s, t) = [ s, t, G( s, t) ] OpenGL,, 3 v1 v2 v3, ( ),,, OpenGL 1. OpenGL 3 : ( ) ( 1 ) ( bitmap fonts),,,, glrasterpos( ) ( )

84 ( 2 ) ( outline fonts) ( ) OpenGL : ( rotate translate scale) ( color material lighting) ( antialiasing) 71 ( texture mapping) ( ) ( 3 ) ( texture mapped text), OpenGL : wgl Us e Fon t Bi t ma ps ( wg l Ge t Cu r r e n t DC( ), 0, 2 56, ) ; g l Li s t Ba s e ( ) ; g l Ra s t e r Pos 3 f ( f, 0. 0 f, 0. 0 f ) ; g l Ca l l Li s t s ( 20, GL_UNSI GNED_BYTE, Dr a w wi t h Li s t Te x t. ) ; wglusefontbitmaps( ) ASCII, glcalllists( ) wglusefontbitmaps 4 : DC ASCII ASCII gllistbase( ) glcalllists glcalllists( ) 3 :, ASCII, ASCII gllistbase ( ) glcalllists( ), wglusefontbitmaps ASCII gllistbase( ) glcalllists glcalllists( )

85 ASCII, glrasterpos3f OpenGL : GLYPHMETRI CSFLOAT a gmf [ 2 56 ] ; wgl Us e Fon t Out l i ne s ( wgl Ge t Cur r e nt DC ( ), 0, 25 5, 10 00, 0. 3 f, 0. 8 f, WGL _ FONT _ LI NES, a g mf ) ; / / wg l Us e Fo nt Ou t l i n e s Ope ngl wgl Us e Fon t Bi t ma ps / /, 4, / / Tr u e Typ e, g l Tr a ns l a t e f ( f, 0. 0 f, 0. 0 f ) ; g l Sc a l e f ( 4. 0 f, 4. 0 f, 4. 0 f ) ; g l Li s t Ba s e ( ) ; g l Ca l l Li s t s ( 26, GL_UNSI GNED_BYTE, Dr a w o ut l i ne l i s t 3 D t e xt. ) ; 2. OpenGL : ( 1 ) wglusefontoutlines wglusefontbitmaps List ( 2 ) glcalllist( ) glcalllists( ), OpenGL ASCII, OpenGL, Microsoft wglusefont* ( ), wingdi. h, OpenGL : #de f i ne LI STBASE wgl Us e Fon t Bi t ma ps ( hdc, 0, 25 5, LSI TBASE) ; : c ha r * p My St r i ng = Ope ngl Te xt I nf o ; g l Li s t Ba s e ( LI STBASE) ; g l Ca l l Li s t s ( s t r l e n ( pmyst r i n g), GL_UNSI GNED_BYTE, p My St r i ng ) ;,,, : 6 7, List, List

86 wglusefont* ( ), call List, List, : ( 1 ),, CallList, List ( 2 ), ( compiled) List DOS : wglusefont* ( ) Microsoft,, DWORD wglusefont* ( ) : 73 GLYPHMETRI CSFLOAT p gmf [ 1 ] ; HDC h DC = wg l Ge t Cu r r e n t DC( ) ; DWORD d wcha r ; i nt Li s t Num; f or ( s i z e _t i = 0 ; i < s t r l e n ( ( c ha r * ) s t r ) ; i + + ) { i f ( I s DBCSLe a d By t e ( s t r [ i ] ) ) { dwch a r = ( DWORD) ( ( s t r [ i ]! = 8 ) s t r [ i + 1 ] ) ; i + + ; } e l s e dwch a r = s t r [ i ] ; Li s t Nu m = gl Ge nli s t s ( 1 ) ; bo ol r e t = f a l s e ; r e t = wgl Us e Fon t Out l i ne s ( HDC, dwch a r, 1, Li s t Nu m, 0. 0, 0. 1, WGL _ FONT _ LI NES, p gmf ) ; gl Ca l l Li s t ( Li s t Nu m) ; gl De l e t e Li s t s ( Li s t Num, 1 ) ; } OpenGL OpenGL : RGB( RGBA) RGBA R G B 3, Alpha ( ) R G B 3

87 0 1, : ( 1, 1, 0), ( 0, 0, 1 ) ( ), RGBA,, RGBA, OpenGL,,, v oi d gl Cl e a r Col or ( r e d, g r e e n, bl ue, a l p ha ) ;, red, green, blue, alpha RGBA, v oi d gl Cl e a r ( ma s k ) ;,, mask mask GL_COLOR_BUFFER_BIT GL_ACCUM_BUFFER_BIT GL_DEPTH_BUFFER_BIT GL_STENCIL_BUFFER_BIT glclearcolor ( ) glcleardepth ( ) glclearindex ( ) glclearstencil ( ) glclearacc( ), mask ( OR), glclear,, : glcolor* ( ), 2-9 { } g l Col or 3 f ( 1. 0, 0. 0, 0. 0 ) ; g l Ve r t e x3 f ( , 0. 0, 0. 0 ) ; g l Col or 3 f ( 0. 0, 1. 0, 0. 0 ) ; g l Ve r t e x3 f ( 0. 0, 1. 0, 0. 0 ) ; g l Col or 3 f ( 0. 0, 0. 0, 1. 0 ) ; g l Ve r t e x3 f ( 1. 0, 0. 0, 0. 0 ) ;,, OpenGL

88 ,, Bresenham, ( 1, 1 ), ( 8, 5) ( 0 < k < 1) Bresenham, 1 ( k > 1) Bresenham ,,, 3. 4, x < y,? 75 Mi dpoi nt Ci r c l e ( i n t r, i nt c ol or ) { } i n t x, y ; i n t e ; x = 0 ; y = r ; e = 1 - r ; c i r c l e po i n t s ( x, y, c ol or ) ; wh i l e ( x < y ) { i f ( e < 0 ) e + = 2 * x + 3 ; } e l s e { e + = 2 * ( x - y ) + 5 ; y - - ; } x + + ; c i r c l e p oi nt s ( x, y, c ol or ) ; 3. 5 DDA Bresenham Windows OpenGL 4, 10,, 3. 6, GDI 3. 7, GDI , 3. 9 GDI CBrush, SetROP2,, OpenGL OpenGL

89 第 4 章 图 形 变 换 图 形 变 换 是 计 算 机 图 形 学 的 重 要 内 容, 在 图 形 的 生 成 处 理 和 显 示 过 程 中 发 挥 着 关 键 性 作 用, 同 时, 变 换 本 身 也 是 描 述 图 形 的 一 个 有 力 工 具 图 形 变 换 可 以 分 为 3 类 : 几 何 变 换 坐 标 变 换 和 显 示 变 换 这 3 种 图 形 变 换 具 有 不 同 的 概 念 和 作 用, 同 时 又 有 密 切 的 联 系 本 章 将 详 细 讲 述 这 3 种 变 换 的 概 念 原 理 和 方 法, 讨 论 它 们 之 间 的 关 系, 最 后 将 介 绍 OpenGL 中 图 形 变 换 的 使 用 方 法 由 于 图 形 裁 剪 算 法 是 图 形 显 示 过 程 中 必 不 可 少 的 一 个 环 节, 因 此, 本 章 也 包 含 了 这 一 部 分 内 容 几 何 变 换 的 概 念 和 作 用 4.1 几 何 变 换 几 何 变 换 提 供 了 构 造 和 修 改 图 形 的 一 种 方 法, 图 形 在 位 置 方 向 尺 寸 和 形 状 方 面 的 改 变 都 可 以 通 过 几 何 变 换 来 实 现 几 何 变 换 的 基 本 方 法 是 把 变 换 矩 阵 作 为 一 个 算 子, 作 用 到 图 形 一 系 列 顶 点 的 位 置 矢 量, 从 而 得 到 这 些 顶 点 在 几 何 变 换 后 的 新 的 顶 点 序 列, 连 接 新 的 顶 点 序 列 即 可 得 到 变 换 后 的 图 形 几 何 变 换 是 在 同 一 坐 标 系 下 进 行 的, 因 此, 这 时 坐 标 系 是 静 止 的, 而 图 形 是 变 动 的 基 本 几 何 变 换 基 本 几 何 变 换 都 是 相 对 于 原 点 和 坐 标 轴 进 行 的 几 何 变 换, 有 平 移 缩 放 和 旋 转 等 在 以 下 的 讲 述 中, 均 假 设 用 P(x,y,z) 表 示 三 维 空 间 上 一 个 未 被 变 换 的 点, 而 该 点 经 过 某 种 变 换 后 得 到 的 新 点 用 P (x,y,z ) 表 示 1. 平 移 变 换 平 移 是 指 将 P 点 沿 直 线 路 径 从 一 个 坐 标 位 置 移 动 到 另 一 个 坐 标 位 置 的 一 个 重 定 位

90 图 形 变 换 过 程 如 果 点 P (x,y,z ) 是 由 点 P(x,y,z) 在 x 轴 y 轴 和 z 轴 分 别 移 动 Δx Δy Δz 距 离 得 到 的, 则 这 两 点 坐 标 间 的 关 系 为 : x =x +Δx y =y +Δy (4 唱 1) z =z +Δz 该 式 的 矢 量 形 式 为 : P =P +T (4 唱 2) 其 中, P P T 分 别 定 义 为 如 下 向 量 : x x Δx P = y, P = y, T = Δy z z Δz 2. 缩 放 变 换 缩 放 变 换 改 变 物 体 的 大 小 设 点 P(x,y,z) 经 缩 放 变 换 后 得 到 点 P ( x,y,z ), 这 两 点 坐 标 之 间 的 关 系 为 : x =s x x y =s y y (4 唱 3) z =s z z 其 中, s x,s y 和 s z 分 别 为 沿 x,y 和 z 轴 方 向 放 大 或 缩 小 的 比 例 它 们 可 以 相 等, 也 可 以 不 等 该 方 程 (4 唱 3) 的 矩 阵 形 式 为 : x s x 0 0 x y = 0 s y 0 y z 0 0 s z z 或 P =S P (4 唱 4) 其 中 s x 0 0 S = 0 s y s z 3. 旋 转 变 换 设 给 定 点 P 的 坐 标 为 : ( x,y,z) =( rcosφ,rsinφ,z) 则 它 绕 z 轴 旋 转 α 角 后, 可 得 点 P (x,y,z ) P P 之 间 的 关 系 为 : 第 4 章 77

91 计 算 机 图 形 学 78 x =rcos(φ+α) =xcosα-ysinα y =rsin(φ+α) =xsinα+ycosα (4 唱 5) z =z 这 个 变 换 的 矩 阵 形 式 为 : x cosα -sinα 0 x y = sinα cosα 0 y z z 或 P =R z(α) P (4 唱 6) 其 中 cosα -sinα 0 R z (α) = sinα cosα 关 于 其 他 两 个 坐 标 轴 的 旋 转 变 换 方 程 可 以 循 环 置 换 式 (4 唱 5) 方 程 中 的 x,y,z 得 到, 即 按 照 x y z x 的 置 换 顺 序 即 可 ( 如 图 4 唱 1) 图 4 唱 1 坐 标 轴 循 环 置 换 循 序 对 于 (4 唱 5) 式, 利 用 上 述 的 置 换 顺 序, 可 以 得 到 绕 x 轴 旋 转 的 方 程 : y =ycosα-zsinα z =ysinα+zcosα (4 唱 7) x =x 这 个 变 换 的 矩 阵 形 式 为 : x y = z 或 其 中 x 0 cosα -sinα y 0 sinα cosα z P =R x (α) P (4 唱 8)

92 1 0 0 R x (α) = 0 cosα -sinα 0 sinα cosα 循 环 置 换 (4 唱 7) 式 中 的 坐 标, 即 可 得 到 绕 y 轴 旋 转 的 方 程 : z =zcosα-xsinα x =zsinα+xcosα y =y 绕 y 轴 旋 转 的 矩 阵 形 式 为 : x cosα 0 sinα x y = y z -sinα 0 cosα z 或 P =R y (α) P (4 唱 10) 在 此 需 要 注 意 的 是 旋 转 角 度 正 负 的 确 定 当 沿 坐 标 轴 的 正 向 往 坐 标 原 点 看 过 去 时, 逆 时 针 方 向 旋 转 的 角 度 为 正 向 旋 转 角 ( 如 图 4 唱 2) 图 4 唱 2 旋 转 角 度 正 负 的 定 义 图 形 变 换 (4 唱 9) 第 4 章 组 合 几 何 变 换 与 齐 次 坐 标 1. 齐 次 坐 标 在 实 际 绘 图 时, 常 常 要 对 图 形 连 续 做 多 次 变 换, 例 如 先 平 移, 再 旋 转 放 大 等 这 样 需 要 对 该 图 形 上 的 点 集 按 变 换 顺 序 依 次 进 行 计 算, 计 算 量 较 大 如 果 只 对 图 形 进 行 旋 转 和 缩 放 两 类 变 换, 如 先 旋 转, 再 缩 放, 则 可 以 首 先 将 两 变 换 合 成 一 个 复 合 变 换, 将 两 次 运 算 转 换 成 一 次 性 的 矩 阵 与 向 量 乘 法 这 样 对 图 形 做 上 述 一 系 列 变 换 时, 只 要 用 点 集 与 这 个 复 合 矩 阵 相 乘 就 可 以 了 但 是 如 果 在 变 换 中 再 加 入 平 移 变 换, 变 换 就 不 容 易 合 并 了 这 主 要 是 因 为 平 移 变 换 和 旋 转 缩 放 变 换 的 表 示 形 式 不 一 样 ; 平 移 变 换 为 矢 量 的 加 法, 而 旋 转 和 缩 放 变 换 为 矩 阵 的 乘 法 为 了 使 各 种 变 换 的 表 示 形 式 一 致, 从 而 使 变 换 合 成 更 容 易, 有 必 要 引 入 齐 次 坐 标 的 概 念 所 谓 齐 次 坐 标 表 示 就 是 用 n +1 维 向 量 表 示 n 维 向 量 例 如, 在 二 维 平 面 中, 点 P(x,y) 的 齐 次 坐 标 表 示 为 (wx,wy,w) 这 里,w 是 任 一 不 为 0 的 比 例 系 数 类 似 地, 三 维 空 间 中 坐 标 点 的 齐 次 坐 标 表 示 为 ( wx,wy,wz,w) 推 而 广 之,n 维 空 间 中 的 一 个 点 ( P 1,P 2,, P n ) 的 齐 次 坐 标 为 (wp 1,wP 2,,wP n,w) 这 里 需 要 注 意 的 是, 用 笛 卡 儿 直 角 坐 标 表 示 n 维 空 间 中 一 个 点 向 量 是 惟 一 的 而 用 齐 次 坐 标 表 示 则 是 不 惟 一 的, 例 如,(10,25,15,5),(6,15,9,3),(4,10,6,2) 均 为 (2,5, 3) 这 一 点 的 齐 次 坐 标 这 种 多 对 一 的 映 射 关 系 往 往 使 运 算 较 为 复 杂, 所 以 通 常 ( x,y,z)

93 计 算 机 图 形 学 80 的 齐 次 坐 标 为 ( x,y,z,1) 此 后 如 不 特 别 说 明, 齐 次 坐 标 指 的 都 是 这 种 意 义 上 的 齐 次 坐 标 齐 次 坐 标 表 示 法 一 方 面 可 以 表 示 无 穷 远 点, 例 如,n +1 维 向 量 中,w =0 的 齐 次 坐 标 实 际 上 表 示 了 一 个 n 维 的 无 穷 远 点 ; 另 一 方 面 用 齐 次 坐 标 表 示, 使 得 所 有 几 何 变 换 都 可 以 用 矩 阵 相 乘 来 表 示, 获 得 了 平 移 旋 转 和 缩 放 变 换 的 一 致 性 表 示, 无 论 哪 种 变 换 形 式, 变 换 矩 阵 均 可 以 用 一 个 统 一 的 4 4 矩 阵 来 表 示 利 用 齐 次 坐 标, 平 移 变 换 的 矩 阵 表 示 形 式 为 : x y = z 1 或 缩 放 变 换 的 矩 阵 表 示 形 式 为 : x y = z 1 或 旋 转 变 换 的 矩 阵 表 示 形 式 为 : 绕 x 轴 旋 转 : x y = z 1 或 绕 y 轴 旋 转 : x y = z 1 或 Δx x Δy y Δz z P =T P (4 唱 11) s x x 0 s y 0 0 y 0 0 s z 0 z P =S P (4 唱 12) x 0 cosα -sinα 0 y 0 sinα cosα 0 z P =R x (α) P (4 唱 13) cosα 0 sinα 0 x y -sinα 0 cosα 0 z

94 图 形 变 换 P =R y (α) P (4 唱 14) 绕 z 轴 旋 转 : x cosα -sinα 0 0 x y sinα cosα 0 0 y = z z 或 P =R z (α) P (4 唱 15) 2. 组 合 变 换 上 述 的 几 何 变 换 是 图 形 变 换 中 最 基 本 的 几 何 变 换 实 际 应 用 中 对 图 形 作 几 何 变 换 时 往 往 是 多 种 基 本 的 几 何 变 换 组 合, 因 此 我 们 把 由 若 干 个 基 本 的 几 何 变 换 组 合 而 成 的 一 个 几 何 变 换 的 过 程 称 为 组 合 变 换 由 于 引 入 了 齐 次 坐 标, 基 本 几 何 变 换 均 可 以 表 示 成 P =T P 的 形 式, 因 此 组 合 变 换 的 结 果 是 每 次 的 变 换 矩 阵 相 乘, 组 合 变 换 同 样 具 有 P =T P 的 形 式 所 不 同 的 是, 此 时 有 : T =T n T 3 T 2 T 1 n >1 即 P =T P =T n T 3 T 2 T 1 P n >1 由 于 矩 阵 的 乘 法 满 足 结 合 律, 因 此, 通 常 在 计 算 时 先 求 出 T, 再 与 P 相 乘 即 P =T P =(T n T 3 T 2 T 1 ) P n >1 以 下 重 点 讲 述 组 合 变 换 矩 阵 T 的 计 算 形 式 (1) 相 对 于 固 定 点 P(x f,y f,z f) 的 缩 放 变 换 1 把 固 定 点 P 和 物 体 一 起 做 平 移 变 换, 使 P 点 被 移 到 坐 标 系 的 原 点 ; 2 把 物 体 相 对 于 坐 标 原 点 进 行 缩 放 变 换 ; 3 再 把 固 定 点 P 和 物 体 一 起 平 移 变 换, 使 点 P 移 回 到 原 来 的 位 置 这 样, 就 可 以 得 到 相 对 于 P 点 缩 放 过 的 物 体 了 整 个 变 换 的 过 程 如 图 4 唱 3 所 示 相 对 于 任 意 点 缩 放 的 变 换 矩 阵 可 以 表 示 为 平 移 缩 放 平 移 矩 阵 的 级 联 : s x 0 0 (1 -s x ) x f 第 4 章 81 T(x f,y f,z f) S(s x,s y,s z) T(-x f,-y f,-z f ) = (2) 绕 任 意 轴 旋 转 0 s y 0 (1 -s y ) y f 0 0 s z (1 -s z ) z f (4 唱 16)

95 计 算 机 图 形 学 82 图 4 唱 3 相 对 于 固 定 点 的 缩 放 变 换 如 果 旋 转 所 绕 的 轴 不 是 坐 标 轴, 而 是 一 条 任 意 轴, 则 变 换 过 程 显 得 较 为 复 杂 首 先, 对 物 体 和 旋 转 轴 一 起 做 平 移 和 旋 转 变 换, 使 得 旋 转 轴 与 一 条 标 准 坐 标 轴 重 合 然 后, 绕 该 标 准 轴 对 物 体 作 所 需 的 旋 转 最 后, 对 物 体 和 旋 转 轴 进 行 逆 变 换, 使 所 绕 的 轴 恢 复 到 原 来 的 位 置 这 个 过 程 需 要 由 7 个 基 本 变 换 的 级 联 才 能 完 成 假 设 P 1 P 2 两 点 所 定 义 的 矢 量 为 任 意 轴, 旋 转 角 度 为 θ( 图 4 唱 4) 这 7 个 基 本 变 换 如 下 : 1 T( -x 1,-y 1,-z 1 ), 使 P 1 点 与 原 点 重 合 ( 图 4 唱 4(b)); 2 R x (α) 使 得 轴 P 1 P 2 落 入 平 面 xoz 平 面 内 ( 图 4 唱 4(c)); 3 R y (β), 使 轴 P 1 P 2 与 z 轴 重 合 ( 图 4 唱 4(d)); 4 R z (θ), 执 行 绕 轴 P 1 P 2 的 θ 角 度 的 旋 转 ( 图 4 唱 4(e)); 5 R y (-β), 作 变 换 3 的 逆 变 换 ; 6 R x (-α), 作 变 换 2 的 逆 变 换 ; 7 T(x 1,y 1,z 1 ), 作 变 换 1 的 逆 变 换 首 先, 求 R x (α) 的 参 数 转 角 α 是 旋 转 轴 u 在 yoz 平 面 的 投 影 u =(0,b,c) 与 z 轴 的 夹 角 ( 图 4 唱 5(a)), 故 有 : cosα= c d, d = +c 2 b2 得 出 R x (α) 为 : b sinα= u u z = b d R x (α) = c d b d - b d c d

96 图 形 变 换 第 4 章 83 图 4 唱 4 绕 任 意 轴 旋 转 的 前 4 个 步 骤 其 次, 求 R y (β) 的 参 数 ( 图 4 唱 5(b)) 经 过 R x (α) 变 换,P 2 已 在 xoz 平 面, 但 P 2 点 与 x 轴 的 距 离 保 持 不 变 因 此,P 1 P 2 于 d,β 是 u 与 u z 的 夹 角, 故 有 : 现 在 的 单 位 矢 量 u 的 z 方 向 分 量 的 值 即 为 u 的 长 度, 等 cosβ= u u z u u z =d 图 4 唱 5 求 转 角 的 函 数 值 根 据 矢 量 积 的 定 义, 有 : u z u u z sin β=u z (-a) 因 为 u = a 2 +d 2 = a 2 +b 2 +c 2 =1, 并 u z =1, 所 以 : sinβ=-a 因 此, 得 到 R y (β) 为 :

97 计 算 机 图 形 学 84 d 0 -a 0 0 R y (β) = a 0 d 绕 任 意 轴 旋 转 θ 的 变 换 R(θ) 为 如 下 的 级 联 变 换 : R(θ) =T(x 1,y 1,z 1 ) R x (-α) R y (-β) R z(θ) R y (β) R x (α) T(-x 1,-y 1,-z 1 ) (4 唱 17) 坐 标 变 换 的 概 念 与 作 用 4.2 坐 标 变 换 坐 标 变 换 是 根 据 图 形 在 一 个 坐 标 系 下 的 坐 标 求 出 该 图 形 在 另 一 个 坐 标 系 下 的 坐 标 当 然, 在 进 行 坐 标 变 换 时 必 须 给 出 两 个 坐 标 系 之 间 的 关 系 坐 标 变 换 应 用 非 常 广 泛, 可 以 将 许 多 复 杂 的 问 题 简 化 熟 练 掌 握 利 用 坐 标 变 换 解 决 问 题 的 方 法 非 常 重 要 坐 标 变 换 是 在 两 个 坐 标 系 之 间 进 行 的, 这 时 图 形 是 静 止 的, 而 坐 标 系 是 变 动 的 基 本 坐 标 变 换 方 法 根 据 线 性 代 数 的 知 识 可 知, 若 ε 1,ε 2,,ε n 是 n 维 线 性 空 间 V 的 一 组 基, α 是 V 中 的 任 一 向 量, 若 : α =x 1 ε 1 +x 2 ε 2 + +x n ε n 记 X =[ x 1,x 2,,x n ] T, 向 量 α 可 以 写 成 : α =[ε 1,ε 2,,ε n ] X 则 称 X 是 向 量 α 在 基 ε 1,ε 2,,ε n 下 的 坐 标 在 三 维 空 间 中 给 定 一 个 点 P 0 和 3 个 线 性 无 关 的 矢 量 瓫 1, 瓫 2, 瓫 3, 则 空 间 中 任 何 一 个 点 P 可 以 表 示 为 : P =P 0 +a 1 瓫 1 +a 2 瓫 2 +a 3 瓫 3 a 1,a 2,a 3 为 实 数 则 点 P 的 坐 标 为 (a 1,a 2,a 3 ) T, 写 成 矩 阵 形 式 为 : P =P 0 +[ 瓫 1, 瓫 2, 瓫 3 ] [a 1,a 2,a 3 ] T (4 唱 18) 知 道 了 坐 标 的 定 义, 下 面 来 推 导 两 个 坐 标 系 之 间 的 关 系 假 设 在 三 维 空 间 中, 已 知 坐 标 系 Ⅰ: 原 点 Q 0, 坐 标 轴 ( 即 基 ) 为 u 1,u 2,u 3 ; 坐 标 系 Ⅱ: 原 点 P 0, 坐 标 轴 ( 即 基 ) 为 瓫 1, 瓫 2, 瓫 3 ; 两 坐 标 系 间 可 以 表 示 成 如 下 的 关 系 式 : u 1 =γ 11 瓫 1 +γ 12 瓫 2 +γ 13 瓫 3

98 写 成 矩 阵 表 示 形 式 : u 2 =γ 21 瓫 1 +γ 22 瓫 2 +γ 23 瓫 3 u 3 =γ 31 瓫 1 +γ 32 瓫 2 +γ 33 瓫 3 [ u 1 u 2 u 3 ] =[ 瓫 1 瓫 2 瓫 3 ] 那 么 由 坐 标 系 瓫 1, 瓫 2, 瓫 3 到 坐 标 系 u 1,u 2,u 3 的 变 换 矩 阵 为 : M = γ 11 γ 21 γ 31 γ 11 γ 21 γ 31 图 形 变 换 (4 唱 19) γ 12 γ 22 γ 32 (4 唱 20) γ 13 γ 23 γ 33 γ 12 γ 22 γ 32 (4 唱 21) γ 13 γ 23 γ 33 如 果 坐 标 系 Ⅰ 的 原 点 Q 0 在 坐 标 系 Ⅱ 的 坐 标 为 :[q 1,q 2,q 3 ] T, 则 根 据 坐 标 的 定 义 (4 唱 18), 可 以 写 成 以 下 的 矩 阵 形 式 : Q 0 =P 0 +[ 瓫 1, 瓫 2, 瓫 3 ] [q 1,q 2,q 3 ] T =P 0 +[ u 1,u 2,u 3 ] M -1 [q 1,q 2,q 3 ] T 对 于 空 间 中 的 任 一 点 D, 如 果 已 知 D 点 在 坐 标 系 Ⅱ 中 的 坐 标 为 [d 1,d 2,d 3 ] T, 则 : D =P 0 +[ 瓫 1, 瓫 2, 瓫 3 ] [d 1,d 2,d 3 ] T =Q 0 -[ 瓫 1, 瓫 2, 瓫 3 ] [q 1,q 2,q 3 ] T +[ 瓫 1, 瓫 2, 瓫 3 ] [d 1,d 2,d 3 ] T =Q 0 +[ 瓫 1, 瓫 2, 瓫 3 ] [[d 1,d 2,d 3 ] T -[ q 1,q 2,q 3 ] T ] =Q 0 +[ u 1,u 2,u 3 ] M -1 ([d 1,d 2,d 3 ] T -[ q 1,q 2,q 3 ] T ) 因 此,D 点 在 坐 标 系 Ⅰ 中 的 坐 标 为 : M -1 ([d 1,d 2,d 3 ] T -[ q 1,q 2,q 3 ] T ) (4 唱 22) 齐 次 坐 标 下 的 坐 标 变 换 方 法 在 三 维 空 间 中 给 定 一 个 点 P 0 和 3 个 线 性 无 关 的 矢 量 瓫 1, 瓫 2, 瓫 3, 则 空 间 中 任 何 一 个 点 P 的 矩 阵 可 以 表 示 为 : P =[ 瓫 1, 瓫 2, 瓫 3,P 0 ] [a 1,a 2,a 3,1] T (4 唱 23) 则 P 的 齐 次 坐 标 为 [a 1,a 2,a 3,1] T 假 设 在 三 维 空 间 中, 已 知 坐 标 系 Ⅰ: 原 点 Q 0, 坐 标 轴 ( 即 基 ) 为 u 1,u 2,u 3 ; 坐 标 系 Ⅱ: 原 点 P 0, 坐 标 轴 ( 即 基 ) 为 瓫 1, 瓫 2, 瓫 3 ; 两 坐 标 系 之 间 可 以 表 示 成 如 下 的 关 系 式 : u 1 =γ 11 瓫 1 +γ 12 瓫 2 +γ 13 瓫 3 u 2 =γ 21 瓫 1 +γ 22 瓫 2 +γ 23 瓫 3 u 3 =γ 31 瓫 1 +γ 32 瓫 2 +γ 33 瓫 3 第 4 章 85

99 计 算 机 图 形 学 矩 阵 表 示 形 式 : Q 0 =γ 41 瓫 1 +γ 42 瓫 2 +γ 43 瓫 3 +P 0 (4 唱 24) 86 [u 1 u 2 u 3 Q 0 ] =[ 瓫 1 瓫 2 瓫 3 P 0 ] γ 11 γ 21 γ 31 γ 41 γ 12 γ 22 γ 32 γ 42 (4 唱 25) γ 13 γ 23 γ 33 γ 齐 次 坐 标 下 的 两 坐 标 系 的 变 换 矩 阵 为 : γ 11 γ 21 γ 31 γ 41 M 齐 = γ 12 γ 22 γ 32 γ 42 γ 13 γ 23 γ 33 γ (4 唱 26) 对 于 空 间 中 的 任 一 点 D, 如 果 已 知 D 点 在 坐 标 系 Ⅱ 中 的 坐 标 为 [d 1,d 2,d 3,1] T, 则 : D =[ 瓫 1, 瓫 2, 瓫 3,P 0 ] [d 1,d 2,d 3,1] T =[ u 1,u 2,u 3,Q 0 ] M -1 齐 [d 1,d 2,d 3,1] T 因 此,D 点 在 坐 标 系 Ⅰ 中 的 齐 次 坐 标 为 : M -1 齐 [d 1,d 2,d 3,1] T (4 唱 27) 比 较 式 (4 唱 22) 和 式 (4 唱 27), 可 以 看 出 用 齐 次 坐 标 表 示, 坐 标 变 换 会 简 单 许 多 4.3 几 何 变 换 与 坐 标 变 换 的 关 系 对 于 简 单 问 题, 用 几 何 变 换 求 解 非 常 方 便 直 观, 而 对 于 复 杂 问 题, 则 使 用 坐 标 变 换 的 方 法 非 常 方 便 在 节 中, 讲 述 了 用 几 何 变 换 的 方 法 求 解 绕 任 意 轴 旋 转 的 问 题 用 几 何 变 换 的 方 法 求 解 时 变 换 矩 阵 非 常 复 杂 但 如 果 采 用 坐 标 变 换 的 方 法 来 实 现, 则 相 对 比 较 简 单 假 设 以 P 1 点 为 坐 标 原 点, 直 线 P 1 P 2 为 z 轴 建 立 一 个 直 角 坐 标 系 ( 如 图 4 唱 6 所 示 ), 那 么 绕 任 意 直 线 的 旋 转, 就 变 成 了 在 新 坐 标 系 下 绕 z 轴 的 旋 转 在 此, 关 键 问 题 是 如 何 建 立 两 个 坐 标 系 之 间 图 4 唱 6 以 P 1 P 2 为 z 轴 建 立 直 角 坐 标 系 的 变 换 矩 阵 假 设 P 1 P 2 坐 标 分 别 为 (x 1,y 1,z 1 ) 和 (x 2,y 2,z 2 ), 则 z 轴 由 P 1 P 2 两 点 矢 量 定 义 : V =P 2 -P 1 =(x 2 -x 1,y 2 -y 1,z 2 -z 1 )

100 图 形 变 换 令 u 为 沿 旋 转 轴 的 单 位 矢 量 : u = V V =(a,b,c) 瓫 3 =u 知 道 了 一 个 坐 标 轴 的 方 向,y 轴 的 方 向 该 如 何 确 定? 我 们 可 以 指 定 任 意 一 个 方 向, 只 要 该 方 向 与 z 轴 垂 直 即 可, 但 是 怎 样 保 证 它 们 之 间 的 垂 直 关 系 呢? 其 实 我 们 可 以 充 分 利 用 已 知 的 z 轴 的 单 位 矢 量 u 构 造 我 们 不 妨 设 : 瓫 2 = u u x u u x 其 中 u x 为 矢 量 u 在 x 轴 方 向 的 投 影 通 过 矢 量 相 乘, 可 以 得 到 : 第 4 章 87 瓫 2 = 0, c d,-b d 其 中 d = b 2 +c 2 知 道 了 两 个 坐 标 轴 的 单 位 矢 量, 两 者 叉 乘 即 可 得 到 第 三 坐 标 轴 的 单 位 矢 量 : 瓫 1 = 瓫 2 瓫 3 = d, - ab d,-ac d 并 且 根 据 公 式 (4 唱 23), 得 到 两 坐 标 系 之 间 的 变 换 矩 阵 为 : M = d 0 a x 1 - ab d - ac d c d - b d b y 1 c z (4 唱 28) 得 到 两 坐 标 系 之 间 的 变 换 矩 阵 后, 求 解 绕 任 意 轴 ( P 1 P 2 两 点 所 定 义 的 矢 量 ) 旋 转 θ 角 度 的 问 题 就 迎 刃 而 解 了 假 设 在 坐 标 系 Ⅰ(u 1,u 2,u 3,P 0 ) 中 有 一 点 P, 已 知 点 的 齐 次 坐 标 为 [ d 1,d 2,d 3,1] T, 则 有 : P =[ u 1 u 2 u 3 P 0 ] [d 1 d 2 d 3 1] T =[ 瓫 1 瓫 2 瓫 3 P 1 ] M -1 [d 1 d 2 d 3 1] T 那 么 得 到 该 点 在 坐 标 系 Ⅱ( 瓫 1, 瓫 2, 瓫 3,P 1 ) 中 的 坐 标 为 : M -1 [d 1 d 2 d 3 1] T 该 点 绕 z 轴 旋 转 θ 后, 则 坐 标 为 : R z (θ) M -1 [d 1 d 2 d 3 1] T 注 意 此 时 的 坐 标 为 坐 标 系 Ⅱ 中 的 坐 标 根 据 式 (4 唱 23), 可 以 写 成 : P =[ 瓫 1 瓫 2 瓫 3 P 1 ] R z (θ) M -1 [d 1 d 2 d 3 1] T

101 计 算 机 图 形 学 88 =[ u 1 u 2 u 3 P 0 ] M R z (θ) M -1 [d 1 d 2 d 3 1] T 那 么 绕 任 意 轴 旋 转 的 变 换 矩 阵 为 : T =M R z(θ) M -1 (4 唱 29) 4.4 显 示 变 换 如 何 将 图 形 显 示 到 窗 口 中 图 形 在 计 算 机 内 是 以 数 量 的 形 式 进 行 加 工 和 处 理 的, 而 坐 标 则 建 立 了 图 形 和 数 量 之 间 的 联 系 三 维 空 间 中 的 物 体 要 在 二 维 的 屏 幕 上 显 示 出 来, 必 须 通 过 投 影 的 方 式 把 三 维 物 体 转 换 成 二 维 的 平 面 图 形 投 影 的 方 式 有 平 行 投 影 和 透 视 投 影 两 种 往 往 在 图 形 显 示 时 只 需 要 显 示 图 形 的 某 一 部 分, 这 时 可 以 在 投 影 面 上 定 义 一 个 窗 口 只 有 在 窗 口 内 的 图 形 才 显 示, 而 窗 口 外 的 部 分 则 不 显 示 在 屏 幕 上 也 可 以 定 义 一 个 矩 形, 称 为 视 区 经 过 窗 口 到 视 区 变 换, 窗 口 内 的 图 形 才 能 变 换 到 视 区 中 显 示 根 据 上 面 所 述, 三 维 图 形 的 显 示 流 程 如 图 4 唱 7 所 示 图 4 唱 7 三 维 图 形 的 显 示 流 程 窗 口 到 视 区 的 变 换 为 了 在 视 区 中 显 示 出 窗 口 内 的 图 形 对 象, 就 需 要 根 据 用 户 所 定 义 的 参 数, 找 到 窗 口 和 视 区 之 间 的 坐 标 对 应 关 系, 如 图 4 唱 8 所 示 图 4 唱 8 窗 口 到 视 区 的 变 换

102 图 形 变 换 假 设 窗 口 的 左 下 角 顶 点 的 坐 标 为 ( WXL,WYB), 右 上 角 顶 点 的 坐 标 为 ( WXR,WYT) 视 区 的 左 下 角 顶 点 坐 标 为 (VXL,VYB), 右 上 角 顶 点 坐 标 为 ( VXR,VYT) 要 将 窗 口 内 的 点 (x w,y w ) 映 射 到 视 区 内 的 点 (x v,y v), 应 该 满 足 如 下 关 系 式 : x v -VXL VXR -VXL = x w -WXL WXR -WXL y v -VYB VYT -VYB = y (4 唱 30) w -WYB WYT -WYB 由 此 可 得 : 其 中 s x VXR -VXL = WXR -WXL,s y x v =VXL +( x w -WXL) s x y v =VYB +( y w -VYB) s y (4 唱 31) VYT -VYB = WYT -WYB 上 述 窗 口 到 视 区 的 变 换, 也 可 以 通 过 一 系 列 变 换 的 组 合 得 到 变 换 过 程 按 照 以 下 步 骤 进 行 : 1 将 窗 口 左 下 角 点 (WXL,WYB) 平 移 到 窗 口 所 在 坐 标 系 的 原 点 ; 2 进 行 缩 放 变 换, 使 窗 口 的 大 小 与 视 区 相 等 ; 3 将 窗 口 内 的 点 映 射 到 视 区 中, 再 进 行 反 平 移, 将 视 区 的 左 下 角 移 回 到 原 来 的 位 置 将 上 述 步 骤 写 成 矩 阵 形 式 为 : 1 0 VXL s x WXL T 窗 视 =T 3 T 2 T 1 = 0 1 VYB 0 s y WYB s x 0 -WXL s x +VXL = 0 s y -WYB s y +VYB (4 唱 32) x v y v 1 = 透 视 投 影 变 换 s x 0 -WXL s x +VXL 0 s y -WYB s y +VYB x w y w 1 (4 唱 33) 根 据 投 影 的 定 义 可 知, 空 间 任 意 一 点 的 透 视 投 影 是 投 影 中 心 与 空 间 点 构 成 的 投 影 线 与 投 影 平 面 的 交 点 假 设 投 影 中 心 在 z v 轴 上 的 z PrP 处, 视 平 面 与 z v 轴 垂 直, 并 且 在 z vp 处, 如 图 4 唱 9 所 示, 可 以 写 出 透 视 投 影 线 上 任 一 点 坐 标 的 参 数 形 式 : 第 4 章 89

103 计 算 机 图 形 学 90 x =x -xu y =y -yu z =z -( z -z PrP)u 0 u 1 (4 唱 34) 图 4 唱 9 空 间 点 P 的 透 视 投 影 当 u =0 时, 即 为 P ( x,y,z) 点, 当 u =1 时, 即 为 投 影 中 心 点 (0,0,z PrP ) 在 视 平 面 上 z =z vp, 把 此 等 式 代 入 z 方 程, 可 以 得 出 : u = z vp z PrP -z (4 唱 35) -z 把 此 值 带 入 x y 方 程, 我 们 可 以 得 到 透 视 投 影 新 旧 坐 标 之 间 的 关 系 : x P =x z PrP -z vp z PrP -z =x z PrP d P -z y P =y z PrP -z vp z PrP -z =y z PrP d P -z (4 唱 36) z P =z vp 其 中, d P =z PrP -z vp 是 视 平 面 到 投 影 中 心 的 距 离 应 用 齐 次 坐 标,(4 唱 36) 式 以 矩 阵 的 形 式 表 示 为 : x h y h z h x y = (4 唱 37) 0 0 -z vp /d P z vp (z PrP /d P ) z h 0 0-1/d P z PrP /d P 1 其 中, h = z PrP -z,x P =x h /h,y P =y h /h d P 为 了 能 得 到 透 视 投 影 变 换 矩 阵 的 简 单 表 示 形 式, 可 以 使 视 平 面 位 于 uv 平 面, 即 z vp = 0; 或 者 使 投 影 中 心 位 于 视 坐 标 系 原 点, 即 z PrP =0 在 此, 以 视 平 面 位 于 uv 平 面 为 例, 得 出 透 视 投 影 的 变 换 矩 阵 在 这 种 情 况 下, 式 (4 唱 36) 可 以 化 简 为 :

104 图 形 变 换 第 x P y P =x =y z PrP z PrP z PrP z PrP -z -z (4 唱 38) 4 章 91 z P =z vp =0 写 成 矩 阵 形 式 : x x z PrP /(z PrP -z) x x y = z y z PrP /(z PrP -z) 0 = y 0 = y z h 1 (z PrP -z)/z PrP 0 0-1/z PrP 1 1 (4 唱 39) 如 果 令 d =z PrP -z vp =z PrP, 则 透 视 投 影 变 换 的 矩 阵 为 : M 透 视 = (4 唱 40) 0 0-1/d 平 行 投 影 变 换 平 行 投 影 可 根 据 投 影 方 向 与 投 影 面 的 夹 角 分 为 两 类 : 正 投 影 和 斜 投 影 当 投 影 方 向 与 投 影 面 垂 直 时, 为 正 投 影, 否 则 为 斜 投 影 正 投 影 的 变 换 方 程 很 简 单 如 果 投 影 平 面 垂 直 于 z v 轴, 且 位 于 z vp 处, 那 么 在 视 坐 标 系 中 任 意 一 点 (x,y,z) 的 投 影, 是 过 该 点 的 投 影 线 与 投 影 平 面 的 交 点 ( 如 图 4 唱 10) 因 此 空 间 点 的 坐 标 与 投 影 坐 标 之 间 的 关 系 为 : x =x, y =y, z =z vp (4 唱 41) 图 4 唱 10 空 间 点 P 的 正 投 影

105 计 算 机 图 形 学 92 假 如 投 影 平 面 位 于 uv 坐 标 平 面 内, 即 z vp =0, 那 么 上 式 的 矩 阵 表 示 形 式 为 : x x y y = (4 唱 42) z z 平 行 投 影 的 变 换 矩 阵 为 : M 平 行 = (4 唱 43) 比 较 式 (4 唱 40) 和 式 (4 唱 43), 可 以 发 现, 当 d 时,M 透 视 就 变 成 了 M 平 行, 这 就 说 明 了 平 行 投 影 是 透 视 投 影 的 投 影 中 心 趋 于 无 穷 时 的 特 例 视 坐 标 系 与 视 变 换 前 面 我 们 得 到 了 在 特 殊 情 况 下 的 透 视 投 影 和 平 行 投 影 的 变 换 矩 阵 但 是 实 际 应 用 中 往 往 需 要 在 一 般 情 况 下 进 行 投 影 变 换, 如 果 直 接 推 导 变 换 公 式, 则 比 较 复 杂, 那 么 我 们 可 以 首 先 根 据 场 景 的 显 示 要 求 建 立 一 个 视 坐 标 系 ( 如 图 4 唱 11), 然 后 构 建 一 个 视 平 面, 也 称 为 投 影 平 面, 使 该 平 面 与 z v 轴 垂 直 显 示 过 程 即 是 把 场 景 中 物 体 从 世 界 坐 标 转 换 成 视 坐 标, 然 后, 把 视 坐 标 再 投 影 到 视 平 面 图 4 唱 11 世 界 坐 标 系 与 视 坐 标 系 图 4 唱 12 法 矢 量 N 的 定 义 1. 视 坐 标 系 为 了 建 立 视 坐 标 系, 首 先 指 定 世 界 坐 标 系 中 的 一 点 作 为 观 察 参 考 点, 这 个 点 就 是 视 坐 标 系 的 原 点 然 后 通 过 指 定 视 平 面 的 法 矢 N 确 定 z v 轴 的 正 向 法 矢 N 的 方 向 通 常 是 由 世 界 坐 标 系 中 的 某 个 点 指 向 世 界 坐 标 系 的 原 点 或 者 指 向 视 坐 标 系 的 原 点 例 如 我 们 可 以 定 义 N 的 方 向 是 从 三 维 物 体 上 的 某 一 观 察 点 P 指 向 视 坐 标 系 的 原 点, 如 图 4 唱 12 所 示 N 的 正 向 即 为 z v 轴 的 正 向

106 图 形 变 换 确 定 了 矢 量 N 后, 再 定 义 正 向 矢 量 V, 称 为 向 上 方 向 矢 量, 该 矢 量 用 来 建 立 y v 轴 的 正 向 由 于 一 般 很 难 选 定 一 个 恰 好 垂 直 于 N 的 V 矢 量, 因 此, 可 以 这 样 来 确 定 V: 开 始 选 择 任 意 一 个 不 平 行 N 的 矢 量 V, 然 后, 使 该 矢 量 V 投 影 到 垂 直 于 法 矢 量 N 的 平 面 上 ( 如 图 4 唱 13), 定 义 投 影 后 的 矢 量 为 矢 量 V 这 样 要 比 输 入 一 个 恰 好 与 N 垂 直 的 矢 量 要 容 易 得 多 最 后 利 用 矢 量 N 和 V, 可 以 计 算 出 既 与 N 又 与 V 垂 直 的 第 三 个 矢 量 U,U 则 对 应 于 x v 轴 的 正 向 矢 量 N V U 的 方 向 就 决 定 了 视 坐 标 系 中 各 坐 标 轴 的 方 向, 而 它 们 的 大 小 则 是 无 关 紧 要 的 为 了 在 视 变 换 中 计 算 简 单, 一 般 都 是 用 UVN 的 单 位 向 量, 因 此 视 坐 标 系 也 称 为 uvn 坐 标 系 ( 如 图 4 唱 14) 第 4 章 93 图 4 唱 13 矢 量 V 的 定 义 图 4 唱 14 uvn 坐 标 系 建 立 了 视 坐 标 系 后, 需 要 建 立 视 平 面 一 般 视 平 面 总 是 垂 直 于 轴 z v, 平 行 于 x v y v 坐 标 平 面, 因 此 可 以 用 与 视 坐 标 原 点 的 距 离 来 定 义 由 于 视 平 面 总 是 与 x v y v 坐 标 面 平 行, 因 此 三 维 物 体 在 视 平 面 上 的 投 影 与 在 输 出 设 备 上 显 示 的 图 形 是 一 致 的 在 建 立 了 视 坐 标 系 和 视 平 面 以 后, 就 可 以 通 过 改 变 视 坐 标 系 的 原 点 或 N 的 方 向 使 用 户 在 不 同 距 离 和 角 度 上 观 察 三 维 物 体 2. 视 变 换 由 世 界 坐 标 系 变 换 到 视 坐 标 系, 称 为 视 变 换 假 设 世 界 坐 标 系 为 O w x w y w z w, 视 坐 标 系 为 O v uvn, 视 坐 标 系 的 原 点 在 世 界 坐 标 系 中 的 坐 标 为 ( x 0,y 0,z 0 ), 视 坐 标 系 的 3 个 坐 标 轴 的 单 位 向 量 分 别 为 (u x,u y,u z),(v x,v y,v z),(n x,n y,n z) 现 在 要 将 世 界 坐 标 系 中 的 图 形 变 换 到 视 坐 标 系 中, 假 设 记 该 变 换 为 T 视 根 据 齐 次 坐 标 下 的 坐 标 变 换 公 式 (4 唱 28), 得 到 : u x v x n x x 0 T 视 u y v y n y y 0 = (4 唱 44) u z v z n z z 为 了 将 三 维 物 体 显 示 到 屏 幕 上, 则 需 要 经 过 几 何 变 换 视 变 换 投 影 变 换 和 窗 口 到 视

107 计 算 机 图 形 学 口 变 换 等 一 系 列 变 换 此 组 合 变 换 的 变 换 矩 阵 可 以 写 成 : T =T 窗 视 T 投 影 T 视 T 几 何 (4 唱 45) 窗 口 到 三 维 空 间 的 变 换 上 面 讲 述 的 是 如 何 把 三 维 物 体 在 二 维 的 窗 口 ( 或 视 口 ) 中 的 显 示 变 换 在 交 互 式 图 形 系 统 中, 往 往 需 要 通 过 鼠 标 来 拾 取 三 维 坐 标 系 中 的 位 置 但 是 鼠 标 仅 仅 返 回 一 个 二 维 的 值, 这 个 值 是 鼠 标 在 屏 幕 中 的 位 置 因 此, 人 们 就 希 望 能 实 现 从 二 维 到 三 维 空 间 的 反 变 换, 来 确 定 这 个 屏 幕 的 二 维 位 置 对 应 的 三 维 空 间 位 置 从 投 影 的 知 识 可 以 知 道, 一 个 二 维 的 点, 可 以 来 源 于 三 维 空 间 中 的 同 一 条 投 影 线 上 的 任 意 位 置 ( 如 图 4 唱 15) 因 此, 在 进 行 逆 变 换 时, 必 须 要 同 时 提 供 一 些 辅 助 信 息, 如 深 度 值 等 图 4 唱 15 投 影 的 性 质 假 设 透 视 投 影 的 参 数 如 图 4 唱 15 所 示, 视 平 面 在 z v =0 处, 窗 口 的 中 心 与 视 点 的 连 线 垂 直 于 视 平 面 如 果 已 知 点 的 深 度 z 值, 那 么 可 以 得 到 二 维 点 与 三 维 空 间 点 之 间 的 关 系 式 : x = zprp y = z PrP z PrP z PrP -z x P -z y P (4 唱 46) 把 上 式 写 成 矩 阵 形 式 : x h (z PrP -z)/z PrP x P x P y h z h = (z PrP -z)/z PrP y P z = y P z PrP /(z PrP -z) z h 1 z PrP /(z PrP -z)

108 图 形 变 换 = z PrP /(z PrP -z) /(z PrP -z) 1 x P y P z 1 (4 唱 47) 第 4 章 裁 剪 的 概 念 与 作 用 4.5 裁 剪 1. 视 景 体 在 相 机 拍 摄 过 程 中, 镜 头 的 类 型 是 决 定 多 少 场 景 被 拍 摄 到 胶 片 上 的 一 个 因 素 广 角 镜 头 拍 摄 的 场 景 要 比 普 通 镜 头 范 围 广 三 维 显 示 中, 在 投 影 平 面 上 指 定 一 个 窗 口 具 有 同 样 的 效 果 如 图 4 唱 16 所 示, 由 于 窗 口 边 界 分 别 与 x v y v 轴 平 行, 因 此 窗 口 可 以 用 视 坐 标 来 定 义 而 且 窗 口 不 一 定 要 以 视 坐 标 原 点 为 中 心, 它 可 以 在 视 平 面 上 的 任 意 位 置 处 定 义 窗 口 后, 就 可 以 根 据 窗 口 的 边 界 建 立 视 景 体 只 有 在 视 景 体 内 的 物 体 经 投 影 落 在 窗 口 的 内 部 才 被 显 示, 否 则 将 被 裁 剪 掉 不 显 示 视 景 体 的 大 小 依 赖 于 窗 口 的 大 小, 而 视 景 体 的 形 状 则 依 赖 于 所 采 图 4 唱 16 在 视 平 面 上 指 定 窗 口 用 的 投 影 方 法 对 于 平 行 投 影 来 说, 视 景 体 是 一 个 四 边 平 行 于 投 影 方 向, 长 度 无 限 的 四 棱 柱, 如 图 4 唱 17 所 示 对 透 视 投 影 来 说, 视 景 体 是 以 投 影 中 心 为 顶 点 的 四 棱 锥, 如 图 4 唱 18 所 示 图 4 唱 17 平 行 投 影 的 视 景 体 图 4 唱 18 透 视 投 影 的 视 景 体 在 实 际 使 用 中, 常 常 沿 着 z v 方 向 定 义 两 个 裁 剪 平 面 前 裁 剪 面 和 后 裁 剪 面 来 限 制 视 景 体 的 范 围, 如 图 4 唱 19 所 示 正 投 影 的 视 景 体 为 一 矩 形 平 行 管 道, 透 视 投 影 的 视 景 体

109 计 算 机 图 形 学 96 为 一 棱 台 当 物 体 从 世 界 坐 标 变 换 到 视 坐 标 以 后, 物 体 在 视 景 体 内 的, 经 过 投 影 将 落 在 窗 口 内 而 被 显 示, 物 体 在 视 景 体 外 的, 则 被 裁 剪 掉 这 样 得 到 的 视 景 体 可 以 使 用 户 在 基 于 深 度 的 显 示 操 作 中, 裁 剪 掉 在 前 裁 剪 面 之 前 以 及 在 后 裁 剪 面 之 后 的 物 体 图 4 唱 19 视 景 体 2. 何 时 裁 剪 在 三 维 图 形 显 示 的 过 程 中, 裁 剪 在 投 影 变 换 之 前 或 者 之 后 进 行 均 可 如 果 先 对 物 体 进 行 投 影, 再 将 它 们 在 投 影 平 面 上 的 投 影 做 关 于 窗 口 的 裁 剪 这 样 所 做 的 裁 剪 是 二 维 裁 剪, 实 现 起 来 要 比 三 维 裁 剪 容 易 但 是 需 要 对 所 有 的 物 体 进 行 投 影 变 换, 而 其 中 部 分 物 体 可 能 是 落 在 视 景 体 的 外 部, 根 本 不 可 见 的 在 三 维 图 形 显 示 过 程 中, 需 要 对 显 示 的 图 形 进 行 消 隐 处 理 要 进 行 消 隐 处 理, 必 须 要 有 图 形 的 深 度 信 息, 所 以 消 隐 必 须 在 投 影 之 前 完 成 而 消 隐 过 程 是 十 分 耗 时 的, 因 此 人 们 总 是 希 望 在 进 行 消 隐 之 前, 能 裁 剪 掉 不 可 见 图 形, 以 提 高 消 隐 的 效 率 因 此, 一 般 来 说, 在 投 影 之 前 进 行 裁 剪 相 对 比 较 合 理 三 维 空 间 的 裁 剪 算 法 主 要 是 确 定 并 保 存 视 景 体 内 的 所 有 表 面, 裁 剪 掉 视 景 体 外 的 部 分 只 不 过 二 维 裁 剪 是 用 窗 口 的 直 线 边 界 裁 剪, 而 三 维 空 间 中 是 用 视 景 体 的 边 界 面 来 裁 剪 物 体, 算 法 的 实 现 是 二 维 裁 剪 算 法 的 推 广 3. 视 景 体 的 规 范 化 三 维 空 间 中 关 于 视 景 体 的 裁 剪 是 图 形 显 示 过 程 中 的 一 个 重 要 步 骤, 裁 剪 的 效 率 将 直 接 影 响 到 图 形 显 示 的 速 度 三 维 裁 剪 中 涉 及 大 量 求 交 计 算 为 了 减 少 计 算 量, 有 必 要 引 入 规 范 化 视 景 体 的 概 念 规 范 化 视 景 体 的 6 个 平 面 方 程 十 分 简 单, 使 得 求 交 计 算 相 对 简 单 例 如 在 视 坐 标 系 中, 平 行 投 影 的 规 范 化 视 景 体 的 6 个 方 程 可 以 定 义 为 :

110 图 形 变 换 x v =-1, x v =1, y v =-1, y v =1, (4 唱 48) z v =0, z v =1 在 节 中 讨 论 的 透 视 投 影 的 视 景 体 是 正 四 棱 台, 而 正 投 影 的 视 景 体 是 长 方 体, 关 于 长 方 体 的 裁 剪 比 关 于 正 四 棱 台 的 裁 剪 要 简 单 得 多 且 为 了 使 透 视 投 影 和 平 行 投 影 共 用 同 一 套 裁 剪 和 投 影 程 序, 可 以 先 把 透 视 投 影 的 视 景 体 变 换 成 平 行 投 影 的 视 景 体 假 设 透 视 投 影 的 参 数 如 图 4 唱 20 所 示, 且 视 景 体 的 中 心 线 与 视 平 面 垂 直 假 设 ( x,y,z) 是 原 视 景 体 中 的 一 点, 变 换 到 新 视 景 体 中 为 (x,y,z ), 两 点 之 间 的 关 系 : 第 4 章 97 x =x z PrP z PrP y =y z PrP z PrP -z vp -z -z vp -z z +x vp -z PrP z PrP -z z +y vp -z PrP z PrP -z z =z (4 唱 49) 变 换 矩 阵 为 : M = x PrP x PrPz vp z PrP -z vp z PrP -z vp y PrP y PrPz vp z PrP -z vp z PrP z PrP z PrP -z vp z PrP -z vp -z vp (4 唱 50) 无 论 是 透 视 投 影 还 是 平 行 投 影, 其 视 景 体 均 可 以 变 成 一 个 矩 形 平 行 管 道 但 是 此 时 的 视 景 体 一 般 来 说 并 不 是 规 范 化 的 视 景 体, 还 需 要 进 行 必 要 的 变 换 假 设 在 视 坐 标 系 中, 视 景 体 的 参 数 确 定 如 图 4 唱 21 所 示, 将 它 规 范 化 的 过 程 按 照 以 下 步 骤 进 行 1 平 移 使 前 裁 剪 面 上 的 窗 口 中 心 移 至 坐 标 原 点, 变 换 矩 阵 为 : xw max +xw min 2 T 1 = ywmax +ywmin (4 唱 51) z front 缩 放 使 视 景 体 的 尺 寸 规 范 化, 其 变 换 矩 阵 为 :

111 计 算 机 图 形 学 98 图 4 唱 20 透 视 投 影 视 景 体 的 变 换 图 4 唱 21 视 景 体 的 参 数 S 2 = 2 xw max -xw min yw max -yw min z back -z front (4 唱 52) 矩 形 平 行 管 道 的 视 景 体 规 范 化 的 变 换 矩 阵 为 : N =S 2 T 1 (4 唱 53)

112 4.5.2 线 段 的 裁 剪 图 形 变 换 1. 二 维 直 线 的 裁 剪 (1) Cohen_Sutherland 算 法 算 法 分 为 两 部 分 : 判 断 线 段 是 否 完 全 在 窗 口 内, 如 果 是, 则 该 线 段 是 完 全 可 见 的, 如 图 4 唱 22 中 线 段 AB, 否 则 判 断 是 否 为 显 然 不 可 见, 即 线 段 的 两 端 点 均 位 于 窗 口 某 一 条 边 的 外 侧, 如 图 4 唱 22 中 CD; 对 于 不 能 判 定 是 完 全 可 见 或 显 然 不 可 见 的 线 段, 则 要 进 行 求 交 计 算, 计 算 出 直 线 段 与 窗 口 边 界 的 一 个 交 点, 这 个 交 点 把 线 段 分 为 两 段, 把 其 中 一 段 是 显 然 不 可 见 的 线 段 抛 弃, 对 余 下 部 分 再 作 第 一 步 判 断, 重 复 上 述 过 程 为 了 实 现 这 个 算 法 首 先 把 窗 口 的 4 条 边 框 线 延 长, 并 将 平 面 分 成 9 个 区 域, 每 个 区 域 用 一 个 4 位 二 进 制 代 码 B t B b B r B l 表 示, 其 中 各 位 编 码 的 含 义 如 下 : 第 4 章 99 B t = 1 y >ymax 0 其 他 B b = 1 y <ymin 0 其 他 B l = 1 x <x min 0 其 他 B r = 1 x >x max 0 其 他 图 4 唱 22 直 线 与 窗 口 的 位 置 关 系 图 4 唱 23 区 域 编 码 根 据 编 码 规 则, 窗 口 及 其 延 长 线 所 构 成 的 9 个 区 域 的 编 码 如 图 4 唱 23 所 示 裁 剪 直 线 段 时, 先 求 出 线 段 端 点 P 1 和 P 2 的 编 码 code(p 1 ) 和 code(p 2 ) 若 线 段 两 端 点 的 编 码 均 为 零, 即 两 端 点 均 在 窗 口 内, 则 线 段 为 完 全 可 见 完 全 不 可 见 的 线 段 也 很 容 易 地 由 线 段 的 两 端 点 编 码 判 定 将 线 段 两 端 点 的 编 码 按 位 进 行 逻 辑 与 运 算, 若 结 果 为 非 零, 则 该 线 段 两 端 点 位 于 窗 口 边 框 的 同 一 侧, 为 完 全 不 可 见 如 图 4 唱 22 中 CD 线 段,code( C) =1001, code(d) =0001, 则 code(c) code(d) =0001, 且 右 边 第 一 位 不 为 零, 说 明 线 段 CD 在 窗 口 的 左 侧 若 一 条 直 线 两 端 点 不 属 于 上 述 两 种 情 况, 如 图 4 唱 22 中 EF GH IJ, 则 判 断 比 较 复 杂, 需 要 进 行 求 交 计 算 求 交 前 需 要 测 试 线 段 与 窗 口 的 哪 些 边 有 交 点 其 实 这 很 简 单,

113 计 算 机 图 形 学 100 只 要 判 断 线 段 编 码 中 各 位 的 值 即 可 如 图 4 唱 22 中 EF,E 点 编 码 中 的 B l =1, 而 F 点 中 B l =0, 则 可 知 EF 与 窗 口 的 左 边 所 在 的 直 线 有 交 点 在 程 序 中, 求 交 测 试 的 顺 序 是 固 定 的, 不 妨 假 设 按 照 左 右 下 上 的 顺 序 进 行 算 出 直 线 与 窗 口 边 框 线 的 交 点, 将 直 线 分 割, 舍 去 交 点 之 外 的 一 段, 再 对 另 一 段 重 复 上 述 处 理, 继 续 判 断 分 割 取 舍, 直 至 找 出 部 分 可 见 线 段 或 完 全 裁 掉 Cohen_Sutherland 算 法 的 关 键 在 于 总 是 要 得 知 位 于 窗 口 外 的 一 个 端 点 这 样 位 于 此 端 点 至 交 点 之 间 的 区 段 必 为 不 可 见, 故 可 以 抛 弃 然 后 此 算 法 继 续 处 理 线 段 被 裁 剪 后 剩 余 部 分 Cohen_Sutherland 算 法 用 编 码 的 方 法 实 现 了 对 完 全 可 见 和 完 全 不 可 见 线 段 的 快 速 判 断, 这 使 得 该 算 法 在 两 类 场 合 中 非 常 有 效 : 一 是 大 窗 口 的 场 合, 其 中 大 部 分 线 段 为 完 全 可 见 ; 另 一 类 是 窗 口 特 别 小 的 场 合, 其 中 大 部 分 线 段 是 完 全 不 可 见 这 种 算 法 可 以 推 广 到 三 维 空 间 的 裁 剪 (2) Liang_Barsky 算 法 Liang_Barsky 算 法 的 基 本 出 发 点 是 直 线 的 参 数 方 程 给 出 任 意 一 条 直 线 段, 两 端 点 分 别 为 (x 1,y 1 ) 和 (x 2,y 2 ), 令 Δx =x 2 -x 1,Δy =y 2 -y 1 则 直 线 的 参 数 方 程 为 : x =x 1 +u Δx 0 u 1 (4 唱 54) y =y 1 +u Δy 如 果 直 线 上 任 意 一 点 位 于 窗 口 内, 则 必 须 满 足 下 列 关 系 式 : 上 述 不 等 式 可 以 表 示 为 : 其 中 p 和 q 定 义 为 : xw min x 1 +u Δx xw max yw min y 1 +u Δy yw max (4 唱 55) u p k q k k =1,2,3,4 (4 唱 56) p 1 =-Δx q 1 =x 1 -xw min p 2 =Δx q 2 =xw max -x 1 p 3 =-Δy q 3 =y 1 -yw min (4 唱 57) p 4 =Δy q 4 =yw max -y 1 任 何 一 条 直 线 如 果 平 行 于 某 一 条 裁 剪 边 界, 则 有 p k =0, 下 标 k 对 应 于 直 线 段 平 行 的 窗 口 边 界 (k =1,2,3,4, 并 且 分 别 表 示 裁 剪 窗 口 的 左 右 下 上 边 界 ) 如 果 对 于 某 一 个 k 值, 满 足 q k <0, 那 么 直 线 完 全 在 窗 口 的 外 面, 可 以 抛 弃 如 果 q k 0, 则 该 直 线 在 它 所 平 行 的 窗 口 边 界 的 内 部, 还 需 要 进 一 步 计 算 才 能 确 定 直 线 是 否 在 窗 口 内 外 或 相 交 当 p k <0 时, 表 示 直 线 是 从 裁 剪 边 界 的 外 部 延 伸 到 内 部, 如 果 p k >0, 则 表 示 直 线 是 从 裁 剪 边 界 的 内 部 延 伸 到 外 部 的 对 于 p k 0, 可 以 利 用 式 (4 唱 58) 计 算 出 直 线 与 边 界 k 的 交 点 的 参 数 u:

114 图 形 变 换 u = q k p k (4 唱 58) 对 于 每 一 条 直 线, 可 以 计 算 出 直 线 位 于 裁 剪 窗 口 内 线 段 的 参 数 值 u 1 u 2 u 1 的 值 是 由 那 些 使 得 直 线 是 从 外 部 延 伸 到 内 部 的 窗 口 边 界 决 定 对 于 这 些 边, 计 算 r k =q k /p k u 1 值 取 r k 以 及 0 构 成 的 集 合 中 的 最 大 值 u 2 的 值 是 由 那 些 使 得 直 线 是 从 内 部 延 伸 到 外 部 的 窗 口 边 界 决 定 的 计 算 出 r k,u 2 取 r k 和 1 构 成 的 集 合 中 的 最 小 值 如 果 u 1 >u 2, 这 条 直 线 完 全 在 窗 口 的 外 面, 可 以 简 单 抛 弃, 否 则 根 据 参 数 u 的 两 个 值, 计 算 出 裁 剪 后 线 段 的 端 点 例 如, 如 图 4 唱 24(a) 所 示 的 直 线 段 AB, 根 据 式 (4 唱 57), 可 知 p 1 p 3 <0, 则 r 1 r 3 分 别 表 示 的 直 线 与 窗 口 左 下 边 界 的 交 点 的 参 数 值 u 1 =max( r 1,r 3,0) =r 1 ;p 2 p 4 >0, 则 r 2 r 4 分 别 表 示 直 线 与 窗 口 右 上 边 界 交 点 的 参 数 值 u 2 =min(r 2,r 4,1) =r 4 从 直 线 方 程 的 几 何 意 义 可 知 u 1 <u 2, 把 参 数 带 入 方 程, 就 分 别 得 到 裁 剪 后 直 线 段 的 端 点 对 于 图 4 唱 24(b) 所 示 直 线, 只 不 过 是 u 1 >u 2, 此 时 直 线 完 全 在 窗 口 外 面, 为 完 全 不 可 见 第 4 章 101 图 4 唱 24 直 线 的 Liang_Barsky 裁 剪 一 般 来 说,Liang_Barsky 算 法 减 少 了 求 交 计 算, 因 此 比 Cohen_Sutherland 算 法 的 效 率 要 高 在 Liang_Barsky 算 法 中, 参 数 u 1 和 u 2 的 每 次 更 新, 只 需 要 进 行 一 次 除 法 运 算, 且 只 有 当 最 后 获 取 裁 剪 结 果 线 段 时, 才 计 算 直 线 与 窗 口 的 交 点 相 反, 在 Cohen_Sutherland 算 法 中 即 使 直 线 完 全 在 窗 口 的 外 面, 也 要 重 复 进 行 求 交 计 算 而 且 每 次 求 交 计 算 需 要 进 行 一 次 乘 法 和 一 次 除 法 运 算 但 是 这 两 种 算 法 都 可 以 扩 展 到 三 维 空 间 的 裁 剪 2. 三 维 直 线 段 的 裁 剪 二 维 空 间 中 区 域 编 码 的 概 念 完 全 可 以 推 广 到 三 维 空 间, 只 不 过 增 加 一 个 前 裁 剪 面, 一 个 后 裁 剪 面, 与 左 右 上 下 裁 剪 面 共 同 构 成 一 个 视 景 体 作 为 裁 剪 空 间 在 二 维 裁 剪 中, 用 4 位 二 进 制 编 码 来 表 示 线 段 的 端 点 的 位 置, 那 么 在 三 维 裁 剪 中, 就 要 用 6 位 编 码

115 计 算 机 图 形 学 B b B f B t B b B r B l 来 表 示 线 段 端 点 所 在 的 位 置 后 4 位 编 码 的 含 义 同 前, 前 2 位 编 码 的 含 义 如 下 : z >z vmax 1 z <z vmin B b = B f = 0 其 他 0 其 他 根 据 编 码 规 则, 可 知 延 长 视 景 体 各 边 界 面, 可 把 空 间 分 为 27 个 区 间, 如 图 4 唱 25 所 示 图 4 唱 25 三 维 空 间 的 区 域 编 码 例 如, 区 域 编 码 为 则 表 示 点 在 视 景 体 的 上 面 后 面, 而 编 码 为 则 表 示 点 在 视 景 体 内 部 如 果 线 段 两 端 点 的 区 域 编 码 均 为 , 则 线 段 完 全 在 视 景 体 内 否 则 将 线 段 两 端 点 的 编 码 进 行 逻 辑 与 操 作, 结 果 为 非 零, 则 表 示 该 线 段 在 视 景 体 某 一 个 边 界 面 的 同 侧 如 果 不 能 简 单 判 定 线 段 是 完 全 在 视 景 体 内 或 完 全 在 视 景 体 外, 则 需 要 进 行 求 交 计 算, 决 定 线 段 的 哪 部 分 要 舍 弃 直 线 段 余 下 的 部 分 与 其 他 边 界 面 进 行 测 试, 直 到 线 段 可 以 被 完 全 抛 弃 或 完 全 在 视 景 体 内 空 间 直 线 可 以 很 方 便 地 用 参 数 方 程 表 示, 把 二 维 Liang_Barsky 算 法 推 广 到 三 维 空 间 如 果 线 段 的 端 点 为 P 1 (x 1,y 1,z 1 ) 和 P 2 (x 2,y 2,z 2 ), 我 们 可 以 写 出 直 线 的 参 数 方 程 为 : x =x 1 +( x 2 -x 1 ) u y =y 1 +( y 2 -y 1 ) u 0 u 1 (4 唱 59) z =z 1 +( z 2 -z 1 ) u 坐 标 (x,y,z) 表 示 实 线 段 之 间 的 任 一 点, 如 果 u =0, 则 即 为 P 1 点, 如 果 u =1, 则 为 P 2 点 为 了 得 到 直 线 与 视 景 体 平 面 的 交 点, 用 式 (4 唱 59) 代 入 平 面 方 程, 得 u 例 如, 我 们 要

116 图 形 变 换 求 zv min 平 面 与 直 线 的 交 点,u = zv min -z, 如 果 计 算 出 的 u 不 在 0 和 1 范 围 内, 则 表 示 线 段 的 z 2 -z 1 交 点 不 在 P 1 P 2 线 段 之 间 ( 如 图 4 唱 26 中 线 段 AB), 如 果 在 0 和 1 范 围 内, 则 可 以 利 用 式 (4 唱 58) 计 算 出 x 和 y 坐 标, 如 果 x y 值 不 在 视 景 体 范 围 内, 那 么 这 个 线 段 与 前 裁 剪 面 的 交 点 则 在 视 景 体 边 界 范 围 之 外 ( 如 图 4 唱 26 中 线 段 CD) 第 4 章 103 图 4 唱 26 平 面 zv min 裁 剪 线 段 多 边 形 裁 剪 前 面 着 重 讨 论 的 是 线 段 的 裁 剪 多 边 形 当 然 可 以 看 作 是 线 段 的 集 合 但 是 当 一 封 闭 的 多 边 形 作 为 线 段 集 合 进 行 裁 剪 时, 原 来 封 闭 的 多 边 形 变 成 一 个 或 多 个 开 的 多 边 形 或 离 散 的 线 段 ( 如 图 4 唱 27) 为 了 实 现 多 边 形 裁 剪, 我 们 需 要 这 样 一 个 算 法 : 能 生 成 一 个 或 多 个 封 闭 的 区 域, 且 裁 剪 完 成 后 的 输 出 应 该 是 裁 剪 之 后 多 边 形 顶 点 的 序 列 图 4 唱 27 用 直 线 裁 剪 算 法 裁 剪 多 边 形 1.Sutherland 唱 Hodgman 算 法 该 算 法 基 于 下 述 基 本 思 想 : 即 可 以 简 单 地 通 过 单 一 边 或 面 的 裁 剪 实 现 对 多 边 形 的 裁 剪 因 此 在 算 法 中, 原 多 边 形 和 每 次 裁 剪 所 生 成 的 多 边 形 将 逐 次 对 裁 剪 窗 口 的 每 一 条 边 进 行 裁 剪 图 4 唱 28 显 示 了 一 个 矩 形 窗 口, 多 边 形 为 顶 点 表 P 1,P 2,,P n, 由 此 可 得 多 边 形

117 计 算 机 图 形 学 104 的 边 P 1 P 2,P 2 P 3,,P n -1 P n,p n P 1 在 图 4 唱 28( a) 中, 这 些 边 将 首 先 被 窗 口 左 边 裁 剪 生 成 的 多 边 形 如 图 4 唱 28(b) 所 示 然 后 逐 次 裁 剪, 中 间 多 边 形 又 被 窗 口 的 上 边 所 裁 剪, 生 成 第 二 个 中 间 多 边 形 继 续 这 一 过 程, 直 至 多 边 形 依 次 被 窗 口 所 有 边 裁 剪 完 为 止 裁 剪 各 步 骤 如 图 4 唱 28(b) ~(e) 每 执 行 一 步, 则 生 成 一 个 新 的 顶 点 序 列, 并 将 生 成 的 顶 点 序 列 作 为 下 一 条 窗 口 边 界 裁 剪 的 输 入 顶 点 序 列 图 4 唱 28 逐 次 多 边 形 裁 剪 窗 口 的 一 条 边 及 其 延 长 线 构 成 的 裁 剪 线, 把 平 面 分 为 包 含 窗 口 区 域 的 可 见 一 侧, 不 包 含 窗 口 区 域 的 不 可 见 一 侧, 这 样 沿 着 多 边 形 依 次 处 理 顶 点 会 遇 到 4 种 情 况 :1 第 一 点 S 在 不 可 见 一 侧, 第 二 点 P 在 可 见 一 侧 ( 如 图 4 唱 29(a)), 则 SP 与 窗 口 边 界 的 交 点 I 与 P 均 被 加 入 到 输 出 顶 点 表 中 ;2S 和 P 都 在 可 见 一 侧 ( 如 图 4 唱 29( b)), 则 P 被 加 入 到 输 出 顶 点 表 中 ;3S 在 可 见 一 侧,P 在 不 可 见 一 侧 ( 如 图 4 唱 29( c)), 则 交 点 I 被 加 入 到 输 出 顶 点 表 中 ;4 如 果 S 和 P 都 在 不 可 见 一 侧 ( 如 图 4 唱 29(d)), 输 出 顶 点 表 中 不 增 加 任 何 顶 点 这 一 算 法 可 以 正 确 地 实 施 对 凸 多 边 形 的 裁 剪, 而 且 可 以 很 容 易 地 推 广 到 三 维 裁 剪 但 是 对 凹 多 边 形 裁 剪 时, 就 有 可 能 产 生 多 余 的 边, 如 图 4 唱 30 所 示 这 是 因 为 裁 剪 后 多 边 形 变 成 独 立 的 两 个 以 上 部 分, 但 是 输 出 顶 点 表 只 有 一 个 为 了 正 确 地 显 示 凹 多 边 形 的 裁 剪, 可 以 采 取 以 下 几 种 措 施 : 把 凹 多 边 形 分 割 成 两 个 或 两 个 以 上 的 凸 多 边 形, 然 后 分 别 处

118 图 形 变 换 第 4 章 105 图 4 唱 29 边 与 裁 剪 平 面 之 间 的 关 系 理 每 一 个 多 边 形 另 一 种 方 法 是 修 改 Sutherland_Hodgeman 算 法, 用 窗 口 边 界 检 查 顶 点 表, 正 确 地 连 接 顶 点 还 有 就 是 可 以 用 更 一 般 的 裁 剪 算 法, 如 Weiler _ Atherton 算 法 Weiler 算 法 等 图 4 唱 30 Sutherland_Hodgeman 算 法 产 生 多 余 的 边 2.Weiler 唱 Atherton 算 法 前 面 讨 论 的 裁 剪 算 法 均 要 求 裁 剪 区 域 为 凸 区 域, 然 而 在 许 多 应 用 环 境 中, 需 要 考 虑 对 凹 区 域 的 裁 剪 由 Weiler 和 Atherton 提 出 的 裁 剪 算 法 可 以 满 足 这 一 要 求 该 算 法 虽 然 略 为 复 杂, 但 功 能 较 强, 它 可 以 用 一 个 有 内 孔 的 凹 多 边 形 去 裁 剪 另 一 个 也 有 内 孔 的 凹 多 边 形 被 裁 剪 的 多 边 形 简 称 为 主 多 边 形, 裁 剪 区 域 称 为 裁 剪 多 边 形 算 法 中, 主 多 边 形 和 裁 剪 多 边 形 均 用 它 们 顶 点 的 环 行 表 定 义 多 边 形 的 外 部 边 界 取 顺 时 针 方 向, 而 其 内 边 界 或 孔 取 逆 时 针 方 向 当 遍 历 顶 点 表 时, 上 述 约 定 保 证 多 边 形 的 内 部 总 是 位 于 前 进 方 向 的 右 侧 主 多 边 形 和 裁 剪 多 边 形 的 边 界 可 能 相 交, 也 可 能 不 相 交 若 它 们 相 交, 交 点 必 定 成 对 出 现, 其 中 一 个 交 点 为 主 多 边 形 边 进 入 裁 剪 多 边 形 内 部 时 的 交 点, 而 另 一 个 交 点 为 其 离 开 时 的 交 点 算 法 从 进 入 交 点 开 始, 沿 主 多 边 形 的 外 部 边 界 按 照 顺 时 针 方 向 向 前 跟 踪, 直 至 找 到 它 与 裁 剪 多 边 形 的 一 个 交 点 为 止 在 交 点 处 开 始 沿 裁 剪 多 边 形 的 外 部 边 界 按 照 顺 时 针 方 向 跟 踪, 直 至 发 现 它 与 主 多 边 形 的 一 个 交 点 后, 再 次 沿 主 多 边 形 的 边 界 跟 踪 继 续 上 述 过 程, 直 至 到 达 算 法 起 始 点 位 置 如 图 4 唱 31 所 示, 假 设 从 S 1 开 始, 沿 主 多 边 形 前 进 至 交 点 I 8, 此 交 点 I 8 为 进 点, 继 续 沿 主 多 边 形 前 进 至 交 点 I 1, 此 交 点 为 出 点, 转 而 沿 裁 剪 多

119 计 算 机 图 形 学 边 形 边 界 跟 踪 继 续 上 述 过 程, 直 至 达 到 算 法 起 始 点 位 置 OpenGL 坐 标 变 换 机 制 OpenGL 中 与 变 换 有 关 的 数 据 结 构 1. 矩 阵 OpenGL 中 的 多 数 变 换 均 对 应 于 相 应 的 变 换 矩 阵, 可 以 说 OpenGL 就 是 实 现 将 物 体 的 各 个 顶 点 通 过 各 种 变 换 矩 阵 的 作 用 映 射 到 屏 幕 上 的 过 程 因 此, 在 图 4 唱 31 Weiler 唱 Atherton 裁 剪 OpenGL 中 提 供 了 一 些 必 不 可 少 的 矩 阵 及 矩 阵 操 作 命 令 其 中 与 变 换 有 关 的 矩 阵 有 ModelView 矩 阵 Projection 矩 阵 Projection 矩 阵 描 述 了 怎 样 从 三 维 空 间 变 换 到 屏 幕 坐 标, 而 ModelView 矩 阵 则 描 述 了 物 体 旋 转 平 移 缩 放 等 变 换 在 调 用 变 换 命 令 之 前, 需 要 声 明 其 后 矩 阵 操 作 的 对 象, 可 以 用 命 令 glmatrixmode (GLenum mode) 定 义 当 mode 为 GL_MODELVIEW 时, 则 表 示 是 对 ModelView 矩 阵 进 行 操 作, 如 果 mode 为 GL_PROJECTION 时, 则 表 示 是 对 PROJECTION 矩 阵 进 行 操 作 而 系 统 默 认 方 式 是 对 ModelView 矩 阵 操 作 2. 矩 阵 堆 栈 在 OpenGL 中, 与 变 换 有 关 的 矩 阵 堆 栈 有 ModelView 矩 阵 堆 栈 Projection 矩 阵 堆 栈 ModelView 矩 阵 保 存 着 视 点 变 换 和 模 型 变 换 矩 阵 的 累 积 乘 积 每 一 次 的 视 点 变 换 或 模 型 变 换 矩 阵 与 当 前 ModelView 矩 阵 乘 积 就 生 成 一 个 新 的 矩 阵 ModelView 矩 阵 堆 栈 至 少 包 含 32 个 4 4 的 矩 阵, 初 始 状 态 时, 最 顶 层 的 矩 阵 为 单 位 阵 在 有 些 OpenGL 的 实 现 中, 可 能 支 持 多 于 32 个 矩 阵 的 堆 栈 用 户 可 以 通 过 查 询 命 令 glgetintegerv(gl_max_modelview_stack_depth) 得 到 该 系 统 所 允 许 的 最 大 的 矩 阵 数 目 Projection 矩 阵 包 含 一 个 描 述 视 景 体 的 投 影 变 换 矩 阵 一 般 情 况 下, 投 影 矩 阵 不 需 要 复 合, 因 此 在 进 行 投 影 变 换 之 前 需 要 调 用 函 数 glloadidentity () 也 正 是 这 个 原 因, Projection 矩 阵 堆 栈 只 需 要 两 层 用 命 令 glgetintegerv( GL_MAX_PROJECTION_STACK_ DEPTH) 可 以 得 到 系 统 所 支 持 的 投 影 矩 阵 堆 栈 的 深 度 矩 阵 堆 栈 用 来 保 存 和 恢 复 矩 阵 的 状 态, 主 要 用 于 具 有 层 次 结 构 的 模 型 的 绘 制 中, 用 以 提 高 绘 图 效 率 OpenGL 中 提 供 了 glpushmatrix() 和 glpopmatrix() 两 条 命 令 来 进 行 矩 阵 堆 栈 的 操 作 矩 阵 堆 栈 的 好 处 在 于, 它 可 以 保 存 指 定 的 矩 阵 状 态, 并 在 需 要 时 进 行 恢 复, 从 而 避 免

120 了 通 过 逆 变 换 进 行 状 态 恢 复 时 带 来 的 大 量 的 矩 阵 运 算, 提 高 了 绘 图 效 率 OpenGL 中 的 ModelView 变 换 机 制 图 形 变 换 Model 变 换 相 当 于 确 定 被 摄 物 体 在 场 景 中 的 摆 放 方 式 通 过 Model 变 换 可 以 改 变 物 体 的 位 置 和 尺 寸, 相 当 于 我 们 前 面 所 讲 的 几 何 变 换 而 View 变 换 则 相 当 于 在 照 相 时, 改 变 相 机 的 位 置 和 拍 摄 方 向, 以 确 定 所 要 拍 摄 的 景 物 或 物 体, 则 相 当 于 前 面 所 讲 的 坐 标 变 换 OpenGL 中 的 Model 变 换 和 View 变 换 的 关 系 就 如 同 几 何 变 换 与 坐 标 变 换 的 关 系 我 们 可 以 通 过 View 变 换 将 相 机 拉 离 物 体 ( 物 体 不 动, 坐 标 系 动 ), 也 可 以 通 过 Model 变 换 将 物 体 拉 离 相 机 ( 坐 标 系 不 动, 而 物 体 动 ) 这 两 个 操 作 是 等 价 的, 因 而 在 OpenGL 中 视 点 变 换 和 模 型 变 换 用 同 一 个 ModelView 矩 阵 表 示 OpenGL 中 的 Model 变 换 使 用 方 法 在 进 行 视 点 变 换 和 模 型 变 换 之 前, 必 须 调 用 glmatrixmode( GL_MODELVIEW), 申 明 以 下 的 变 换 命 令 只 能 改 变 ModelView 矩 阵 操 作 ModelView 矩 阵 进 行 Model 变 换, 可 以 有 下 面 两 种 方 法 1. 直 接 定 义 变 换 矩 阵 void glloadmatrix{fd}(const TYPE 倡 m); 直 接 将 当 前 矩 阵 设 置 为 m 所 指 定 的 矩 阵, 其 中 m 为 指 向 列 顺 序 排 列 的 16 个 值 组 成 4 4 矩 阵 的 指 针 void glmultmatrix{fd}(const TYPE 倡 m); 将 当 前 矩 阵 与 函 数 所 指 定 的 矩 阵 进 行 乘 法 运 算, 并 将 结 果 置 为 当 前 矩 阵 在 OpenGL 中 假 如 当 前 矩 阵 为 C, 用 glmultmatrix() 定 义 的 矩 阵 或 其 他 变 换 矩 阵 为 M, 乘 法 运 算 后, 得 到 矩 阵 为 CM 因 此, 一 般 情 况 下, 需 要 在 此 命 令 前 调 用 命 令 glloadidentity() 把 当 前 矩 阵 设 置 为 单 位 矩 阵, 否 则 可 能 由 于 先 前 进 行 的 变 换 的 影 响 将 产 生 意 想 不 到 的 后 果 2. 用 OpenGL 中 库 函 数 Model 变 换 的 函 数 有 gltranslate 倡 (),glrotate 倡 (),glscale 倡 () 这 3 条 命 令 相 当 于 生 成 平 移 旋 转 或 缩 放 的 矩 阵, 并 以 此 矩 阵 作 为 参 数, 然 后 调 用 glmultimatrix 倡 () 但 是 直 接 用 库 函 数 要 比 用 glmultimatrix 倡 () 执 行 速 度 快 void gltranslate{fd}(type x, TYPE y, TYPE z); 当 前 矩 阵 乘 以 平 移 矩 阵,x,y,z 分 别 是 位 移 矢 量 的 x,y,z 坐 标 值 void glrotate{fd}(type angle, TYPE x, TYPE y, TYPE z); 第 4 章 107

121 计 算 机 图 形 学 当 前 矩 阵 乘 以 旋 转 矩 阵 物 体 绕 坐 标 原 点 到 点 ( x, y, z) 构 成 的 射 线 逆 时 针 旋 转 angle 度 108 void glscale{fd}(type x, TYPE y, TYPE z); 当 前 矩 阵 乘 以 缩 放 矩 阵, 缩 放 因 子 分 别 是 x,y,z OpenGL 中 的 View 变 换 使 用 方 法 View 变 换 是 改 变 视 点 的 位 置 和 方 向,View 变 换 一 般 是 平 移 和 旋 转 变 换 的 组 合 View 变 换 命 令 必 须 在 调 用 模 型 变 换 之 前 调 用, 因 此 模 型 变 换 对 物 体 先 产 生 作 用 视 点 变 换 的 实 现 可 以 有 以 下 几 种 方 法, 当 然 也 可 以 直 接 使 用 视 点 在 原 点, 方 向 是 指 向 z 轴 负 方 向 的 默 认 设 置 1 使 用 模 型 变 换 命 令 gltranslate 倡 () 和 glrotate 倡 () 这 些 变 换 的 结 果, 可 以 想 象 成 移 动 相 机, 或 者 是 相 对 于 固 定 的 相 机 而 移 动 所 有 物 体 所 致 2 利 用 OpenGL 应 用 程 序 库 函 数 glulookat() 来 定 义 视 线 的 方 向 这 个 函 数 封 装 了 一 系 列 旋 转 和 平 移 命 令 3 封 装 旋 转 和 平 移 命 令 生 成 用 户 自 己 的 应 用 程 序 下 面 主 要 介 绍 应 用 程 序 库 函 数 glulookat() 的 使 用 通 常, 程 序 员 围 绕 原 点 或 其 他 一 些 便 利 的 位 置 构 建 一 个 场 景, 然 后 就 希 望 从 一 个 任 意 的 点 观 察 场 景 以 便 能 得 到 一 个 良 好 的 视 觉 效 果 函 数 glulookat() 就 是 出 于 这 样 的 目 的 而 设 计 的 该 函 数 有 三 部 分 参 数, 分 别 定 义 视 点 的 位 置 相 机 对 准 的 参 考 点 和 向 上 的 方 向 矢 量 选 择 一 个 能 得 到 预 想 场 景 的 视 点 参 考 点 一 般 都 是 选 择 在 场 景 的 中 间 位 置 如 果 是 在 原 点 构 建 场 景, 那 么 参 考 点 可 能 就 取 坐 标 原 点 定 义 向 上 的 方 向 矢 量 则 需 要 一 定 的 技 巧 如 果 是 在 原 点 或 原 点 附 近 构 建 的 场 景, 且 y 轴 正 向 为 指 向 向 上 的 方 向, 那 么 通 常 它 就 作 为 向 上 方 向 矢 量 void glulookat(gldouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz) 该 函 数 定 义 了 一 个 视 图 矩 阵 并 将 其 右 乘 当 前 矩 阵, 结 果 返 回 到 当 前 矩 阵 视 点 由 参 数 eyex eyey eyez 确 定, 而 参 数 centerx centery centerz 指 定 被 观 察 点, 参 数 upx upy upz 指 定 向 上 的 方 向 OpenGL 的 投 影 1. 透 视 投 影 透 视 投 影 的 基 本 特 征 是 近 大 远 小, 离 相 机 越 远 的 物 体 在 画 面 上 显 得 越 小 由 于 这

122 图 形 变 换 种 投 影 方 式 类 似 于 人 眼 的 视 觉 机 制, 所 以 通 常 用 于 动 画 场 景 仿 真 等 强 调 真 实 感 的 应 用 场 合 OpenGL 中 用 命 令 void glfrustum ( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far) 来 定 义 透 视 投 影 的 视 景 体 其 6 个 参 数 分 别 指 定 了 视 景 体 的 左 右 上 下 前 和 后 的 位 置, 从 而 决 定 了 视 野 范 围 位 于 视 景 体 内 的 物 体 被 显 示, 而 超 出 视 景 体 的 物 体 就 被 裁 剪 掉 了 其 参 数 如 图 4 唱 32 所 示, 其 中 near 和 far 只 能 取 正 值 第 4 章 109 图 4 唱 32 由 glfrustum() 定 义 的 视 景 体 需 要 指 出 的 是 视 景 体 的 定 义 并 不 要 求 对 称, 另 外 轴 线 也 不 要 求 与 z 轴 平 行 OpenGL 的 实 用 库 中 还 定 义 了 一 个 使 用 起 来 更 加 直 观 的 透 视 投 影 函 数 void gluperspective(gldouble fovy, GLdouble aspect, GLdouble nnear, GLdouble zfar) 它 通 过 指 定 x -z 平 面 内 的 视 角 大 小 及 宽 高 比 aspect =w /h 来 确 定 沿 视 线 方 向 的 棱 锥, 并 通 过 指 定 远 近 剪 切 面 与 视 点 间 的 距 离 来 截 断 棱 锥, 从 而 确 定 视 景 体 的 大 小, 如 图 4 唱 33 所 示 与 glfrustum() 不 同 是,gluPerspective() 只 能 建 立 沿 视 线 方 向 关 于 x y 轴 都 对 称 的 视 景 体, znear zfar 的 值 均 为 正 值, 但 是 这 种 视 景 体 却 是 最 常 用 的 图 4 唱 33 用 gluperspective() 定 义 的 视 景 体

123 计 算 机 图 形 学 正 投 影 OpenGL 中 使 用 命 令 void glortho ( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far) 来 定 义 一 个 正 投 影 的 视 景 体, 各 参 数 的 意 义 如 图 4 唱 34 所 示 图 4 唱 34 glortho() 定 义 的 视 景 体 OpenGL 的 深 度 缓 冲 区 深 度 缓 冲 区 存 储 每 个 像 素 的 深 度 值, 可 以 根 据 像 素 与 观 察 者 的 距 离, 用 最 近 的 像 素 覆 盖 远 的 像 素 通 过 深 度 检 验, 可 以 始 终 将 深 度 值 较 小 的 像 素 点 保 存 在 深 度 缓 存 中, 以 达 到 物 体 消 隐 的 目 的 如 果 要 使 用 深 度 缓 冲 区, 只 需 调 用 参 数 为 GL_DEPTH_TEST 的 函 数 glenable() 将 其 激 活, 同 时 要 注 意, 在 重 画 每 一 帧 之 前, 要 把 深 度 缓 存 每 位 都 置 为 1 并 可 以 用 gldepthfunc() 函 数 为 深 度 测 试 选 择 不 同 的 比 较 函 数 void gldepthfunc(glenum func) 函 数 中 的 func 值 必 须 为 GL_NEVER GL_ALWAYS GL_LESS GL_LEQUAL GL_EQUAL GL_GEQUAL GL_GREATER GL_NOTEQUAL 如 果 z 值 与 深 度 缓 存 中 的 值 满 足 确 定 的 关 系, 则 通 过 深 度 测 试 func 的 默 认 值 为 GL_LESS, 即 如 果 z 值 小 于 深 度 缓 存 中 的 z 值, 则 输 入 的 深 度 值 取 代 深 度 缓 存 中 的 相 应 值 OpenGL 中 的 反 变 换 OpenGL 应 用 程 序 库 函 数 gluunproject() 可 以 实 现 窗 口 坐 标 到 世 界 坐 标 的 转 换 给 定 变 换 后 顶 点 的 三 维 窗 口 坐 标 和 影 响 这 些 坐 标 的 所 有 变 换,gluUnProject() 函 数 就 返 回 顶 点 的 世 界 坐 标 int gluunproject(gldouble winx, GLdouble winy, GLdouble winz, const GLdouble modelmatrix[16],

124 图 形 变 换 const GLdouble projmatrix[16], const Glint viewport[4], GLdouble 倡 objx, GLdouble 倡 objy, GLdouble 倡 objz); 该 函 数 使 用 ModelView 矩 阵 ( modelmatrix ) Projection 矩 阵 ( projmatrix ) 和 视 口 (viewport) 所 定 义 的 变 换, 将 指 定 的 窗 口 坐 标 ( winx, winy, winz) 映 射 到 对 象 坐 标 中 在 参 数 objx,objy,objz 中, 返 回 物 体 的 坐 标 如 果 该 函 数 的 返 回 值 为 GL_TRUE, 则 表 示 成 功, 如 果 其 返 回 值 为 GL_FALSE, 则 表 示 失 败 在 进 行 反 变 换 的 过 程 中, 有 一 些 困 难 一 个 二 维 的 屏 幕 位 置, 可 以 来 源 于 三 维 空 间 中 的 一 条 线 上 的 任 意 位 置 因 此 在 使 用 gluunproject() 函 数 前, 需 要 提 供 窗 口 深 度 坐 标 (winz) 如 果 gldepthrange() 函 数 使 用 默 认 值 winz =0.0 时, 变 换 后 的 点 的 世 界 坐 标 位 于 前 裁 剪 面 上, 当 winz =1.0 时, 则 变 换 后 的 点 的 世 界 坐 标 位 于 后 裁 剪 面 上 利 用 函 数 glreadpixels() 可 以 得 到 窗 口 内 任 一 像 素 的 深 度 值 第 4 章 111 习 题 4.1 试 写 出 三 维 图 形 几 何 变 换 的 一 般 表 达 形 式, 并 说 明 其 中 各 子 矩 阵 的 变 换 功 能 4.2 利 用 基 本 几 何 变 换, 推 导 出 视 变 换 的 变 换 矩 阵 4.3 写 出 空 间 一 点 对 任 意 平 面 的 对 称 点 的 组 合 变 换 矩 阵 4.4 推 导 出 透 视 投 影 和 平 行 投 影 的 变 换 矩 阵 4.5 试 分 析 三 维 图 形 的 显 示 流 程 4.6 试 分 析 对 直 线 段 进 行 三 维 裁 剪 的 基 本 思 想, 给 出 详 细 算 法 4.7 在 文 档 类 中 保 存 一 个 水 滴 型 多 边 形, 以 屏 幕 中 心 为 核 心, 生 成 一 个 水 滴 沿 着 螺 旋 线 甩 出 并 不 断 变 大 的 图 案 试 用 几 何 变 换 和 坐 标 变 换 两 种 方 法 实 现 之 4.8 在 文 档 类 中 保 存 一 个 简 单 几 何 体 的 多 面 体 信 息, 在 视 图 类 中 保 存 各 种 显 示 参 数, 按 照 视 图 中 的 显 示 参 数, 将 多 边 体 用 GDI 以 线 框 的 方 式 绘 制 到 视 图 中 实 现 通 过 菜 单 和 对 话 框 改 变 视 图 的 显 示 控 制 参 数 的 功 能 实 验 从 不 同 角 度 和 远 近 观 察 同 一 物 体, 并 且 同 时 生 成 多 个 观 察 视 图 4.9 以 一 条 斜 线 为 旋 转 轴, 以 旋 转 阵 列 的 方 式 将 题 4 畅 8 中 多 面 体 的 多 个 拷 贝 绘 制 出 来 从 不 同 的 角 度 对 其 进 行 观 察 4.10 用 OpenGL 实 现 题 4.8 和 题 4.9 的 功 能, 多 面 体 按 照 面 的 方 式 绘 制 4.11 将 题 4.10 中 的 多 面 体 的 棱 边 用 圆 柱 的 方 式 绘 制 出 来 通 过 调 用 OpenGL 绘 制 圆 柱 的 函 数 配 合 坐 标 变 换 绘 制 棱 边 4.12 考 察 深 度 缓 存, 随 机 生 成 若 干 点, 以 点 为 顶 点 生 成 圆 锥, 每 个 圆 锥 设 置 不 同 的 颜 色, 从 上 向 下 看 时, 考 察 所 生 成 的 图 案 是 什 么 样 子 研 究 当 从 斜 上 方 向 下 看 时 所 生 成

125 计 算 机 图 形 学 112 的 图 案 4.13 绘 制 一 个 3 行 4 列 的 汽 车 阵 列, 每 个 汽 车 由 一 个 简 单 多 面 体 构 成 的 车 身 和 4 个 圆 柱 体 车 轮 构 成, 每 个 车 轮 侧 面 要 求 绘 制 一 圈 六 棱 柱 形 的 螺 母, 并 且 不 同 车 辆 前 轮 的 转 向 不 同

126 第 5 章 交 互 绘 图 技 术 5.1 窗 口 系 统 事 件 驱 动 模 式 Windows 操 作 系 统 是 一 个 窗 口 式 的 多 任 务 操 作 系 统, 它 的 出 现 使 PC 机 进 入 了 图 形 用 户 界 面 时 代 基 于 窗 口 的 图 形 用 户 界 面 大 大 方 便 了 用 户 对 计 算 机 的 操 作, 提 高 了 用 户 对 计 算 机 的 使 用 效 率 本 节 将 以 Windows 操 作 系 统 为 例, 介 绍 窗 口 面 向 对 象 消 息 传 递 及 事 件 驱 动 等 基 本 概 念, 在 此 基 础 上 讨 论 基 于 消 息 传 递 事 件 驱 动 的 面 向 对 象 编 程 模 式 窗 口 窗 口 是 屏 幕 上 的 一 个 矩 形 区 域, 对 用 户 来 说, 一 个 窗 口 就 是 一 个 单 独 的 可 操 作 单 元 一 个 典 型 的 Windows 窗 口 一 般 由 标 题 栏 菜 单 栏 工 具 栏 地 址 栏 状 态 栏 工 作 区 域 边 框 和 滚 动 条 等 部 件 组 成, 可 对 其 进 行 移 动 改 变 大 小 最 大 化 最 小 化 还 原 关 闭 切 换 排 列 其 图 标 及 复 制 窗 口 内 容 等 操 作 事 件 驱 动 模 式 在 日 常 生 活 中, 人 们 无 时 无 刻 不 处 在 事 件 以 及 对 事 件 的 处 理 中 交 通 路 口 路 灯 的 颜 色 变 化 电 话 铃 响 有 人 喊 自 己 的 名 字 这 些 都 是 事 件 当 这 些 事 件 发 生 时, 人 们 会 采 取 相 应 的 行 动 : 如 果 交 通 灯 是 红 色 的, 就 要 停 下 来 ; 电 话 铃 响 了, 就 要 接 电 话 ; 有 人 喊 自 己 的 名 字, 就 会 停 下 来 看 个 究 竟 这 时 候, 人 就 是 一 个 事 件 处 理 者, 也 可 以 叫 做 一 个 被 事 件 驱 动 的 人 在 Windows 环 境 下 编 写 应 用 程 序, 就 是 采 用 上 面 所 述 的 事 件 驱 动 机 制 传 统 的 MS 唱 DOS 程 序 主 要 采 用 顺 序 的 关 联 的 过 程 驱 动 的 程 序 设 计 方 法 一 个 程 序 是 一 系 列 预 先 定 义 好 的 操 作 序 列 的 组 合, 它 具 有 一 定 的 开 头 中 间 过 程 和 结 束 程 序 直 接 控 制 事 件 和 过 程 的 顺 序 这 样 的 程 序 设 计 方 法 是 面 向 程 序 而 不 是 面 向 用 户 的, 交 互 性 差, 用 户 界 面 不 够 友 好, 因 为 它 强 迫 用 户 按 照 某 种 不 可 更 改 的 模 式 进 行 工 作 它 的 基 本 模 型 如 图 5 唱 1 所 示

127 计 算 机 图 形 学 114 图 5 唱 1 传 统 DOS 环 境 下 编 程 模 式 事 件 驱 动 程 序 设 计 是 一 种 全 新 的 程 序 设 计 方 法, 它 不 是 由 事 件 的 顺 序 来 控 制, 而 是 由 事 件 的 发 生 来 控 制, 而 这 种 事 件 的 发 生 是 随 机 的 不 确 定 的, 并 没 有 预 定 的 顺 序, 这 样 就 允 许 用 户 用 各 种 合 理 的 顺 序 来 安 排 程 序 的 流 程 对 于 需 要 用 户 交 互 的 应 用 程 序 来 说, 事 件 驱 动 的 程 序 设 计 有 着 过 程 驱 动 方 法 无 法 替 代 的 优 点 它 是 一 种 面 向 用 户 的 程 序 设 计 方 法, 它 在 程 序 设 计 过 程 中 除 了 完 成 所 需 功 能 之 外, 更 多 的 考 虑 了 用 户 可 能 的 各 种 输 入, 并 针 对 性 的 设 计 相 应 的 处 理 程 序 它 是 一 种 被 动 式 程 序 设 计 方 法, 程 序 开 始 运 行 时, 处 于 等 待 用 户 输 入 事 件 状 态, 然 后 取 得 事 件 并 作 出 相 应 反 应, 处 理 完 毕 又 返 回 并 处 于 等 待 事 件 状 态 它 的 基 本 模 型 如 图 5 唱 2 所 示 图 5 唱 2 事 件 驱 动 程 序 设 计 模 式 Windows 下 基 于 消 息 的 事 件 驱 动 编 程 Windows 程 序 的 运 行 依 靠 外 部 发 生 的 事 件 来 驱 动, 换 句 话 说, 程 序 要 不 断 等 待 ( 利 用

128 交 互 绘 图 技 术 一 个 while 循 环 ), 等 待 任 何 可 能 的 输 入 ( 如 鼠 标 移 动, 键 盘 按 下 等 ), 然 后 做 判 断, 进 行 相 应 的 处 理 上 述 的 输 入 是 由 操 作 系 统 捕 获 之 后, 以 消 息 的 形 式 ( 一 种 特 定 的 数 据 结 构 ) 进 入 程 序 之 中 如 果 把 应 用 程 序 获 得 的 各 种 消 息 分 类, 可 以 分 为 由 硬 件 装 置 产 生 的 消 息 ( 如 鼠 标 移 动 键 盘 被 按 下 等 ), 放 在 系 统 消 息 队 列 中, 以 及 由 Windows 系 统 或 其 他 Windows 程 序 传 送 过 来 的 消 息, 放 在 程 序 消 息 队 列 中 当 应 用 程 序 获 得 某 个 消 息, 则 某 个 代 码 段 将 会 被 执 行, 这 种 应 用 程 序 模 式 便 被 称 之 为 事 件 驱 动 消 息 响 应 编 程 模 式 可 想 而 知, 每 一 个 Windows 程 序 都 应 该 有 一 个 循 环 代 码 段 : 第 5 章 115 MSG msg; While (GetMessage(&msg,NULL,NULL,NULL)) { TranslateMessage(&msg); DispatchMessage(&msg); } 消 息, 也 就 是 上 面 的 MSG 结 构, 其 实 是 Windows 内 定 的 一 种 数 据 结 构, 其 中 包 含 消 息 的 窗 口 来 源 ( 消 息 发 生 时 拥 有 焦 点 的 窗 口 的 句 柄 ) 消 息 种 类 ( 如 鼠 标 点 击 ) 与 此 消 息 相 关 的 附 加 信 息 ( 如 键 盘 按 下 时, 相 应 的 键 码 ) 消 息 发 生 时 鼠 标 的 位 置 等 域 接 收 和 处 理 消 息 的 主 角 就 是 窗 口, 每 个 窗 口 都 应 该 有 一 个 函 数 专 门 用 来 负 责 处 理 消 息, 我 们 称 这 个 函 数 为 窗 口 函 数 Windows 程 序 员 的 主 要 任 务 就 是 设 计 应 用 程 序 中 每 个 窗 口 的 窗 口 函 数, 以 便 当 某 个 窗 口 上 产 生 事 件 时, 能 够 有 特 定 的 代 码 被 执 行, 以 完 成 应 用 程 序 的 功 能 窗 口 函 数 中 应 该 根 据 传 来 消 息 的 类 型 分 别 进 行 处 理 Windows 中 事 件 驱 动 消 息 响 应 机 制 如 图 5 唱 3 所 示 MFC 中 的 事 件 驱 动 编 程 微 软 基 础 类 库 (Microsoft foundation class,mfc) 是 微 软 为 Windows 程 序 员 提 供 的 一 个 面 向 对 象 的 Windows 编 程 接 口, 它 大 大 简 化 了 Windows 编 程 工 作 使 用 MFC 类 库 的 好 处 是 : 首 先,MFC 提 供 了 一 个 标 准 化 的 结 构, 这 样 开 发 人 员 不 必 从 头 设 计 创 建 和 管 理 一 个 标 准 Windows 应 用 程 序 所 需 的 程 序, 而 是 站 在 巨 人 肩 膀 上, 从 一 个 比 较 高 的 起 点 编 程, 节 省 了 大 量 的 时 间 ; 其 次, 它 提 供 了 大 量 的 代 码, 指 导 用 户 编 程 时 实 现 某 些 技 术 和 功 能 MFC 库 充 分 利 用 了 Microsoft 开 发 人 员 多 年 开 发 Windows 程 序 的 经 验, 并 可 以 将 这 些 经 验 融 入 到 自 己 开 发 的 应 用 程 序 中 去 在 有 关 事 件 驱 动 编 程 方 面,MFC 通 过 一 组 宏 定 义 大 大 简 化 了 Windows 程 序 设 计 的 基 本 结 构, 其 核 心 是 消 息 映 射 机 制 MFC 通 过 定 义 一 个 消 息 与 处 理 函 数 的 对 照 表, 实 现 了 消 息 处 理 的 分 离 编 程 每 当 产

129 计 算 机 图 形 学 116 图 5 唱 3 消 息 响 应 机 制 生 一 个 事 件 ( 经 GetMessage 函 数 转 化 为 消 息 ), 便 可 以 通 过 这 个 对 照 表 找 到 相 应 的 消 息 处 理 函 数, 执 行 这 个 函 数 便 完 成 了 相 应 的 功 能 ; 这 样, 程 序 员 不 再 需 要 编 写 庞 大 的 窗 口 函 数, 不 再 需 要 用 switch 语 句 判 断 消 息 的 类 型 从 而 决 定 执 行 什 么 样 的 代 码 段 ; 相 应 的, 程 序 员 只 需 利 用 VC 集 成 开 发 环 境 提 供 的 工 具 ( 如 类 向 导 ) 指 定 当 鼠 标 在 哪 个 GUI 对 象 ( 如 按 钮 ) 上 单 击 时 执 行 哪 个 函 数 即 可 这 样, 为 每 个 对 象 的 不 同 事 件 指 定 惟 一 的 一 个 消 息 处 理 函 数, 完 成 在 该 对 象 上 发 生 这 种 事 件 时 的 功 能 MFC 中 事 件 驱 动 编 程 模 式 如 图 5 唱 4 所 示 由 图 5 唱 4 可 以 看 出, 利 用 MFC 编 写 事 件 驱 动 的 Windows 程 序, 不 需 要 编 写 杂 乱 冗 长 的 窗 口 函 数, 只 需 为 每 个 对 象 的 每 个 事 件 编 写 一 个 个 独 立 的 消 息 处 理 函 数 即 可, 这 将 大 大 减 少 程 序 出 错 的 可 能 性, 且 可 以 实 现 多 人 协 作 开 发 状 态 与 事 件 结 合 程 序 控 制 模 式 在 计 算 机 图 形 学 领 域, 许 多 软 件 在 运 行 时 需 要 记 住 一 系 列 状 态 值, 每 当 有 事 件 发 生, 系 统 将 根 据 目 前 的 运 行 状 态 ( 变 量 的 值 ) 决 定 如 何 进 行 响 应 Windows 的 画 图 软 件 便 是 一 个 典 型 的 例 子 在 画 图 软 件 的 界 面 中, 有 一 系 列 按 钮 安 排 在 一 个 工 具 板 上, 当 用 户 单 击 其 中 一 个 按 钮

130 交 互 绘 图 技 术 第 5 章 117 图 5 唱 4 MFC 中 事 件 驱 动 编 程 模 式 后, 该 按 钮 将 处 于 一 种 选 中 状 态, 此 后, 用 户 的 各 种 操 作 都 是 针 对 目 前 选 中 的 状 态 来 进 行, 如 画 线 状 态 画 圆 状 态 等, 直 到 用 户 单 击 另 外 一 个 按 钮, 系 统 便 转 入 另 外 一 种 状 态 总 结 来 说, 系 统 在 任 一 时 刻 总 处 于 某 种 特 定 的 操 作 状 态, 用 户 操 作 如 选 择 菜 单 等 可 能 会 引 起 状 态 机 跳 转, 使 系 统 由 一 种 操 作 状 态 转 换 到 另 一 种 操 作 状 态 我 们 称 这 种 软 件 运 行 模 式 为 基 于 状 态 机 模 型 的 运 行 模 式 传 统 的 事 件 处 理 模 式 使 用 分 情 况 跳 转 来 实 现 这 种 状 态 机 模 型, 如 图 5 唱 5 所 示 图 5 唱 5 传 统 的 状 态 机 处 理 模 式 由 图 5 唱 5 可 以 看 出, 每 当 用 户 事 件 产 生, 传 统 的 状 态 机 处 理 模 式 将 判 断 系 统 目 前 处 于 何 种 操 作 状 态, 然 后 根 据 判 断 结 果 进 行 相 应 的 处 理 这 种 处 理 方 式 有 两 个 主 要 缺 点 :

131 计 算 机 图 形 学 不 管 系 统 处 于 何 种 操 作 状 态, 事 件 处 理 模 块 都 要 进 行 判 断, 无 法 利 用 面 向 对 象 的 多 态 特 性, 且 所 有 处 理 分 支 都 集 中 在 一 个 模 块 中, 使 事 件 处 理 模 块 变 得 庞 大, 增 加 了 调 试 难 度 2 这 种 处 理 方 式 不 容 易 实 现 分 工 协 作 所 有 分 支 都 在 一 起 编 写, 失 去 了 面 向 对 象 封 装 性 编 程 的 优 势 基 于 以 上 分 析, 借 助 于 面 向 对 象 提 供 的 多 态 特 性, 下 面 介 绍 一 种 新 型 的 状 态 机 处 理 模 型, 其 原 理 如 图 5 唱 6 所 示 图 5 唱 6 功 能 类 机 制 的 状 态 机 处 理 模 式 在 状 态 机 模 型 中, 系 统 在 每 个 时 刻 都 处 于 一 种 特 定 的 操 作 状 态, 如 画 线 状 态, 在 这 种 特 定 的 操 作 状 态 下, 每 当 用 户 事 件 产 生, 如 用 户 移 动 了 鼠 标, 系 统 只 需 完 成 当 前 状 态 所 规 定 的 任 务 画 线, 而 不 须 考 虑 系 统 的 其 他 功 能 因 此, 需 要 编 制 一 类 特 殊 的 对 象, 每 个 对 象 负 责 系 统 在 不 同 状 态 下 应 完 成 的 工 作, 每 个 对 象 都 能 根 据 自 己 的 任 务 对 接 收 到 的 鼠 标 键 盘 事 件 进 行 正 确 的 解 释 ; 称 这 种 对 象 为 功

132 交 互 绘 图 技 术 能 类 对 象, 它 们 属 于 同 一 种 类 型 - 功 能 类 因 此, 功 能 类 对 象 应 具 有 以 下 共 同 特 点 : 1 每 个 功 能 类 对 象 都 具 有 接 收 键 盘 鼠 标 消 息 的 外 部 接 口, 一 旦 系 统 接 收 到 鼠 标 键 盘 消 息, 便 可 以 通 过 这 个 接 口 分 发 给 某 个 功 能 类 对 象 2 某 个 功 能 类 对 象 A 在 接 管 另 外 一 个 功 能 类 对 象 B 的 工 作 ( 系 统 的 操 作 状 态 发 生 变 换, 如 由 画 线 状 态 进 入 画 圆 状 态 ) 时,A 可 能 需 要 做 一 些 初 始 化 工 作, 为 自 己 完 成 任 务 做 准 备, 因 此, 每 个 功 能 类 对 象 都 应 提 供 一 个 初 始 化 接 口, 系 统 在 安 排 某 个 功 能 类 对 象 成 为 当 前 任 务 的 负 责 者 时 首 先 调 用 这 个 接 口, 让 A 有 机 会 做 自 己 的 初 始 化 工 作, 将 这 个 接 口 定 义 为 Initialize 3 某 个 功 能 类 对 象 B 被 另 外 一 个 功 能 类 对 象 A 接 管 工 作 时,B 可 能 需 要 做 一 些 收 尾 工 作, 如 让 出 某 些 资 源, 因 此, 每 个 功 能 类 对 象 都 应 提 供 一 个 做 扫 尾 工 作 的 外 部 接 口, 当 系 统 将 某 个 功 能 类 对 象 挂 起 ( 另 一 个 功 能 类 对 象 接 管 ) 时, 调 用 B 的 这 个 接 口, 让 B 有 机 会 做 自 己 的 扫 尾 工 作 将 这 个 接 口 定 义 为 Suspend 4 当 某 个 功 能 类 对 象 C 被 彻 底 删 除 时,C 可 能 也 要 进 行 一 些 必 要 的 工 作, 系 统 在 删 除 C 之 前, 应 告 诉 其 将 被 删 除 的 消 息, 因 此, 每 个 功 能 类 对 象 应 提 供 外 部 接 口, 来 接 收 自 己 将 被 删 除 的 消 息, 将 这 个 接 口 定 义 为 Kill 5 某 个 功 能 类 对 象 D 在 运 行 过 程 的 中 间, 若 用 户 将 当 前 窗 口 进 行 缩 放 操 作, 则 将 导 致 窗 口 内 容 重 画 D 在 运 行 过 程 中 向 屏 幕 绘 制 的 一 些 临 时 场 景 将 会 消 失, 而 系 统 又 不 知 道 D 画 了 一 些 什 么 内 容, 导 致 窗 口 重 画 之 后 的 场 景 与 实 际 状 态 发 生 偏 差 如 D 在 创 建 折 线 的 过 程 中, 假 设 已 经 创 建 了 折 线 上 的 3 个 线 段, 鼠 标 再 次 单 击 将 会 创 建 第 四 个 线 段 ; 若 此 时 窗 口 发 生 刷 新 操 作, 那 么 系 统 只 能 重 画 窗 口 的 背 景, 而 无 法 替 D 完 成 那 3 个 线 段 的 绘 制 ( 因 为 3 个 线 段 的 绘 制 都 是 由 D 在 自 己 活 着 时 画 出 的 ), 若 D 自 己 不 进 行 这 项 操 作, 窗 口 内 的 3 个 线 段 将 消 失, 但 实 际 上 它 们 应 该 是 存 在 的 因 此, 每 个 功 能 类 对 象 在 任 何 时 刻 都 应 保 证 能 将 屏 幕 上 显 示 的 场 景 恢 复 到 重 画 之 前 的 状 态, 这 样, 需 要 每 个 功 能 类 对 象 提 供 一 个 外 部 接 口, 负 责 重 画 自 己 在 工 作 过 程 中 产 生 的 一 些 临 时 场 景, 当 窗 口 发 生 刷 新 操 作 时, 系 统 通 过 调 用 这 个 接 口 让 功 能 类 对 象 自 己 完 成 临 时 场 景 的 恢 复 将 这 个 接 口 定 义 为 Draw 6 当 某 个 功 能 类 对 象 E 被 另 外 一 个 功 能 类 对 象 F 接 管 (E 被 挂 起 ) 后, 某 个 时 刻 可 能 需 要 让 E 重 新 接 管 回 原 来 的 工 作, 这 时 E 可 能 需 要 进 行 一 些 与 首 次 接 管 别 人 工 作 时 不 同 的 初 始 化 操 作, 因 此, 每 个 功 能 类 对 象 应 提 供 外 部 接 口 以 完 成 被 重 新 唤 醒 时 需 要 进 行 的 操 作, 系 统 在 重 新 唤 醒 某 个 功 能 类 对 象 之 前 将 调 用 此 接 口 让 其 有 机 会 进 行 这 个 初 始 化 工 作 将 这 个 接 口 定 义 为 WakeUp 7 为 了 利 用 面 向 对 象 提 供 的 多 态 特 性, 使 得 系 统 在 检 测 到 鼠 标 键 盘 事 件 时, 不 需 判 别 当 前 正 在 执 行 任 务 的 对 象 G 负 责 什 么 样 的 任 务, 也 不 需 处 理 当 前 任 务 的 临 时 现 场 ( 变 量 值 ), 而 只 是 简 单 地 将 接 收 到 的 消 息 直 接 交 给 G, 这 就 需 要 让 每 个 功 能 类 对 象 具 有 共 同 第 5 章 119

133 计 算 机 图 形 学 120 的 祖 先 ( 假 设 为 BaseFunction), 且 1 至 6 所 述 接 口 必 须 设 计 为 虚 接 口 (Virtual Function) 综 上 所 述, 这 种 机 制 可 以 实 现 模 块 分 解 ( 使 消 息 处 理 模 块 不 致 过 于 庞 大 ) 和 分 工 协 作 ( 不 同 功 能 单 独 编 写, 封 装 在 不 同 的 功 能 子 类 中, 只 要 它 们 提 供 规 定 的 接 口 ) 的 目 的, 其 基 本 实 现 思 想 如 下 : 1 要 完 成 某 个 具 体 的 功 能, 只 须 从 BaseFunction 派 生 一 个 新 类, 然 后 重 载 其 中 某 些 接 口, 以 对 鼠 标 键 盘 消 息 以 及 初 始 化 挂 起 杀 死 唤 醒 等 操 作 作 出 适 合 于 本 功 能 的 合 理 解 释, 以 便 正 确 地 完 成 自 己 负 责 的 任 务 2 每 个 从 BaseFunction 派 生 的 功 能 类 只 须 负 责 自 己 的 工 作, 而 无 须 关 心 系 统 的 其 他 功 能, 这 样 使 得 每 个 具 体 的 功 能 类 任 务 单 一, 简 化 了 事 件 解 释, 从 而 达 到 了 模 块 分 解 的 目 的 3 每 个 不 同 的 功 能 类 可 以 由 不 同 人 员 单 独 开 发, 无 须 关 心 其 他 人 员 与 自 己 是 否 需 要 进 行 协 商, 只 要 每 个 功 能 类 都 能 合 理 地 做 好 自 己 的 每 一 步 工 作, 系 统 集 成 便 轻 而 易 举, 这 样 就 达 到 了 分 工 协 作 的 目 标 那 么, 当 系 统 检 测 到 鼠 标 键 盘 事 件 后, 应 将 这 些 事 件 分 发 给 哪 个 功 能 类 对 象 呢? 另 外, 若 用 户 指 示 系 统 从 一 种 操 作 状 态 转 换 到 另 外 一 种 操 作 状 态 时, 系 统 应 如 何 完 成 功 能 类 对 象 之 间 的 接 管 与 挂 起 操 作 呢? 这 可 以 通 过 一 个 功 能 类 对 象 队 列 来 解 决 其 基 本 思 路 如 下 : 1 文 档 类 ( MFC 体 系 ) 中 设 置 一 个 功 能 类 对 象 的 队 列, 如 图 5.6 中 Document 部 分 这 个 队 列 的 最 大 长 度 为 2, 即 任 何 时 刻 不 会 有 超 过 2 个 的 功 能 类 对 象 处 于 存 活 状 态 队 列 顶 端 的 对 象 称 为 当 前 功 能 类 对 象, 即 当 前 正 在 运 转 的 功 能 类 对 象 ; 处 于 队 列 底 端 的 对 象 称 为 被 挂 起 的 功 能 类 对 象, 它 是 在 当 前 功 能 类 对 象 之 前 运 转 过 的 功 能 类 对 象 2 若 由 于 用 户 的 菜 单 操 作 使 得 系 统 需 要 发 生 状 态 转 换, 从 一 种 操 作 状 态 A 转 换 到 另 一 种 操 作 状 态 B( 显 然, 此 时 A 类 对 象 处 于 队 列 的 顶 端, 为 当 前 正 在 运 转 的 功 能 类 对 象 ), 则 需 要 创 建 一 个 新 的 功 能 类 对 象 b( B 类 对 象 ), 然 后 将 b 作 为 参 数 调 用 文 档 类 的 一 个 外 部 接 口 SetCurrentFunction, 完 成 状 态 转 换 操 作 3 SetCurrentFunction 做 如 下 工 作 : 首 先 调 用 队 列 中 被 挂 起 对 象 的 外 部 接 口 Kill, 以 便 在 删 除 它 之 前 让 其 有 机 会 做 收 尾 工 作, 然 后 将 其 删 除 ; 接 着 调 用 队 列 中 当 前 功 能 类 对 象 的 外 部 接 口 Suspend, 以 便 在 挂 起 它 之 前 让 其 有 机 会 做 收 尾 工 作, 然 后 将 其 在 队 列 中 下 推, 成 为 被 挂 起 对 象 ; 最 后, 调 用 b 的 外 部 接 口 Initialize, 以 便 让 b 在 成 为 当 前 功 能 类 对 象 之 前 做 初 始 化 工 作, 接 着 将 b 压 进 队 列, 成 为 当 前 功 能 类 对 象 4 每 当 视 图 ( MFC 体 系 ) 收 到 鼠 标 键 盘 消 息, 便 将 此 消 息 分 发 给 文 档 类 中 维 护 的 当 前 功 能 类 对 象 这 样, 鼠 标 键 盘 消 息 总 是 按 照 系 统 当 前 正 进 行 的 操 作 状 态 进 行 解 释, 从 而 能 够 正 确 无 误 地 完 成 任 务 由 此, 利 用 面 向 对 象 的 多 态 特 性, 功 能 类 机 制 很 好 地 实 现 了 基 于 状 态 机 模 型 的 软 件 运

134 行 模 式 实 践 证 明, 这 是 一 种 较 好 的 状 态 与 事 件 结 合 的 程 序 控 制 模 式 5.2 交 互 式 的 显 示 控 制 技 术 交 互 绘 图 技 术 在 计 算 机 图 形 学 领 域, 显 示 控 制 是 软 件 编 制 需 要 考 虑 的 一 个 重 要 方 面 灵 活 的 显 示 控 制 方 式 是 衡 量 一 个 计 算 机 图 形 学 软 件 的 非 常 重 要 的 指 标, 交 互 式 的 显 示 控 制, 如 对 显 示 场 景 的 旋 转 平 移 缩 放 等, 能 够 给 用 户 提 供 高 效 率 的 操 作 方 式, 并 能 够 提 高 计 算 机 图 形 学 软 件 的 可 视 化 程 度, 让 用 户 在 视 觉 上 对 所 处 理 的 场 景 进 行 较 全 面 的 了 解 场 景 充 满 窗 口 (FitWindow) 的 控 制 方 法 所 谓 FitWindow 是 指 将 当 前 显 示 的 场 景 进 行 一 定 程 度 的 缩 放 和 平 移, 使 之 显 示 在 窗 口 中 央 且 尽 量 充 满 整 个 窗 口 FitWindow 是 一 次 性 操 作, 不 必 用 功 能 类 来 实 现, 不 需 要 接 收 鼠 标 键 盘 消 息, 一 般 将 之 安 排 在 一 次 菜 单 动 作 中, 用 于 将 场 景 以 最 佳 尺 寸 和 位 置 显 示 出 来 当 用 户 对 场 景 进 行 旋 转 或 平 移 操 作 之 后, 可 用 FitWindow 功 能 复 原 场 景 显 示 显 示 场 景 时, 需 要 指 定 投 影 变 换 参 数, 实 际 上 就 是 定 义 一 个 视 景 体, 只 有 处 于 视 景 体 内 的 物 体 才 能 显 示 出 来 视 景 体 由 6 个 平 面 围 成, 分 别 为 left right top bottom near 和 far 平 面 如 图 5 唱 7 所 示 第 5 章 121 图 5 唱 7 视 景 体 FitWindow 的 功 能 就 是 要 根 据 场 景 数 据 计 算 出 一 个 刚 好 能 容 纳 整 个 场 景 的 视 景 体, 达 到 使 场 景 刚 好 充 满 窗 口 的 目 的 FitWindow 的 伪 代 码 如 下 : // 得 到 场 景 分 布 区 域 的 宽 度 Extend Point3D Max,Min; pscenedata ->GetBox(Max,Min);

135 计 算 机 图 形 学 // 设 置 视 距 viewdistance =Max.Distance(&Min) 倡 15; 122 // 求 出 场 景 中 心 点 middlepoint, 作 为 显 示 中 心 点, 保 证 场 景 能 够 显 示 在 屏 幕 中 心 middlepoint =( Max +Min)/2; // 求 出 场 景 分 布 区 域 x 方 向 的 长 度 dx_extend 和 y 方 向 的 长 度 dy_extend PSceneData ->GetBox(Max,Min); double Extend =Max.Distance(&Min); double dx_extend =Extend; double dy_extend =Extend; // 再 根 据 窗 口 的 宽 高 比 及 Y 方 向 的 长 度, 得 到 X 方 向 的 适 合 窗 口 宽 高 比 的 长 度 //dtmpx_extend double dtmpx_extend =dy_extend 倡 m_daspectratio; // 设 置 near 平 面 和 far 平 面 nearestplanedistance =viewdistance -Extend /2; farestplanedistance =viewdistance +Extend /2; // 设 置 视 宽 为 X 方 向 长 度 及 X 方 向 的 适 合 窗 口 宽 高 比 的 长 度 中 小 者 // 保 证 场 景 在 X 方 向 及 Y 方 向 都 不 会 超 出 视 景 体 viewwidth =max(dx_extend,dtmpx_extend)/1.1; // 刷 新 窗 口 Invalidate(); 旋 转 操 作 的 交 互 控 制 方 法 利 用 前 面 介 绍 的 功 能 类 机 制, 可 以 定 义 负 责 场 景 旋 转 的 功 能 类, 其 显 示 控 制 实 现 如 下 : OnLButtonDown(msg) { m_leftbuttondown =TRUE; m_leftdownpos =GetMouseLocation(); m_centerpoint =GetCenterPoint(); m_viewpoint =GetViewPoint(); } OnLButtonUp(msg) { m_leftbuttondown =FALSE; } OnMouseMove(msg)

136 { } if(m_leftbuttondown) { int dx,dy; dx =m_leftdownpos.x 唱 GetMouseLocation().x; dy =m_leftdownpos.y 唱 GetMouseLocation().y; m_ LeftDownPos =GetMouseLocation(); VP =m_viewpoint 唱 m_centerpoint; double alfa =3.14 倡 dx /GetClientRect().right; VP.Rotate(alfa 倡 2); SetViewDirection(VP); m_viewpoint =GetViewPoint(); Invalidate(); } 交 互 绘 图 技 术 第 5 章 123 首 先, 在 旋 转 功 能 类 中 定 义 如 下 数 据 成 员 : m_leftbuttondown, 布 尔 型, 用 来 标 志 鼠 标 左 键 是 否 已 被 按 下 m_leftdownpos,cpoint 类 型, 记 录 上 次 鼠 标 移 动 事 件 中 鼠 标 的 位 置, 用 来 计 算 两 次 鼠 标 移 动 的 距 离 m_centerpoint,point3d 类 型, 显 示 中 心 点 的 坐 标 m_viewpoint,point3d 类 型, 视 点 的 位 置 当 鼠 标 左 键 按 下 时, 表 示 旋 转 操 作 的 开 始, 因 此 旋 转 功 能 类 在 鼠 标 左 键 按 下 时 做 如 下 几 个 工 作 : 1 设 标 志 m_leftbuttondown 为 真, 表 示 已 经 处 于 旋 转 状 态 ; 2 记 下 此 时 鼠 标 指 针 的 位 置, 放 在 m_leftdownpos 中, 用 来 在 鼠 标 移 动 事 件 中 计 算 两 次 鼠 标 位 置 的 移 动 距 离, 从 而 计 算 出 应 对 场 景 旋 转 的 尺 度 ; 3 将 此 时 场 景 的 显 示 中 心 点 记 入 m _ CenterPoint 中, 将 视 点 位 置 记 入 m_viewpoint 中 当 鼠 标 移 动 时, 旋 转 功 能 类 首 先 判 断 鼠 标 左 键 是 否 已 按 下, 这 可 以 根 据 m_leftbuttondown 的 值 来 确 定 若 鼠 标 左 键 未 按 下, 则 不 作 任 何 处 理, 否 则, 做 如 下 工 作 : 分 别 计 算 上 次 鼠 标 位 置 与 现 在 鼠 标 位 置 在 x y 方 向 的 距 离, 根 据 这 两 个 距 离 值 计 算 场 景 应 旋 转 的 尺 度, 然 后 按 照 这 个 尺 度 将 视 图 原 来 的 视 线 方 向 ( 视 点 减 去 参 考 点 所 得 向 量 ) 进 行 旋 转, 得 到 新 的 视 线 方 向 ( vp), 并 将 视 图 的 视 线 方 向 修 改 为 新 的 值 然 后 刷 新 视 图 当 视 图 刷 新 时, 会 根 据 视 点 显 示 中 心 点 视 线 方 向 等 参 数 自 动 调 整 场 景 的 外 观 当 鼠 标 左 键 抬 起 时, 表 示 旋 转 动 作 结 束, 因 此, 旋 转 功 能 类 将 标 志 m_leftbuttondown 设 为 FALSE, 这 样, 在 鼠 标 移 动 事 件 中 将 不 再 继 续 处 理

137 计 算 机 图 形 学 平 移 操 作 的 交 互 控 制 方 法 124 场 景 平 移 功 能 类 的 伪 代 码 实 现 如 下 : OnLButtonDown(msg) { m_leftbuttondown =TRUE; oldcenterpoint =GetCenterPoint(); m_leftdownpos =GetMouseLocation(); } OnLButtonUp(msg) { m_leftbuttondown =FALSE; } OnMouseMove(msg) { if(m_leftbuttondown) { MouseLocation =GetMouseLocation(); oldpoint =GetWorldCrdByScreenCrd(m_LeftDownPos); newpoint =oldcenterpoint +( GetWorldCrdByScreenCrd( MouseLocation) - oldpoint); SetCenterPoint(newPoint); Invalidate(); } } 首 先, 在 场 景 平 移 功 能 类 中 定 义 如 下 数 据 成 员 : m_leftbuttondown, 布 尔 型, 用 来 标 志 鼠 标 左 键 是 否 已 被 按 下 oldcenterpoint,point3d 类 型, 本 次 平 移 操 作 之 前 显 示 中 心 点 的 位 置 m_leftdownpos,cpoint 类 型, 记 录 上 次 鼠 标 移 动 事 件 中 鼠 标 的 位 置, 用 来 计 算 两 次 鼠 标 移 动 的 距 离 当 鼠 标 左 键 按 下 时, 表 示 平 移 操 作 开 始, 因 此 平 移 功 能 类 在 鼠 标 左 键 按 下 时 做 如 下 几 个 工 作 : 1 设 标 志 m_leftbuttondown 为 真, 表 示 已 经 处 于 平 移 状 态 ; 2 记 下 此 时 鼠 标 指 针 的 位 置, 放 在 m_leftdownpos 中, 用 来 在 鼠 标 移 动 事 件 中 计 算 两 次 鼠 标 位 置 的 移 动 距 离, 从 而 计 算 出 应 对 视 图 平 移 的 尺 度 ; 3 将 此 时 视 图 的 显 示 中 心 点 记 入 oldcenterpoint 中

138 交 互 绘 图 技 术 当 鼠 标 移 动 时, 视 图 平 移 功 能 类 首 先 判 断 鼠 标 左 键 是 否 已 按 下, 这 可 以 根 据 m_leftbuttondown 的 值 来 确 定 若 鼠 标 左 键 未 按 下, 则 不 作 任 何 处 理, 否 则, 做 如 下 工 作 : 计 算 上 次 鼠 标 位 置 对 应 的 世 界 坐 标 ; 计 算 本 次 鼠 标 位 置 对 应 的 世 界 坐 标 ; 求 得 两 次 鼠 标 位 置 在 世 界 坐 标 系 中 的 距 离 向 量, 将 此 向 量 加 到 场 景 的 显 示 中 心 点 上, 得 到 场 景 新 的 显 示 中 心 点 最 后 刷 新 场 景 当 视 图 刷 新 时, 会 根 据 显 示 中 心 点 的 新 值 自 动 调 整 场 景 的 外 观, 实 现 平 移 效 果 当 鼠 标 左 键 抬 起 时, 表 示 平 移 动 作 结 束, 因 此, 平 移 功 能 类 将 标 志 m_leftbuttondown 设 为 FALSE, 这 样, 在 鼠 标 移 动 事 件 中 将 不 再 继 续 处 理 第 5 章 缩 放 操 作 的 交 互 控 制 方 法 场 景 缩 放 功 能 类 的 伪 代 码 实 现 如 下 : OnLButtonDown(msg) { m_leftbuttondown =TRUE; m_leftdownpos =GetMouseLocation(); oldwidth =GetViewWidth(); } OnLButtonUp(msg) { m_leftbuttondown =FALSE; } OnMouseMove(msg) { if(m_leftbuttondown) { dy =m_leftdownpos.y 唱 GetMouseLocation().y; ScalingFactor =dy /msg.getview() ->GetClientRect().bottom; newwidth =oldwidth 倡 (1 +ScalingFactor); SetViewWidth( newwidth); InvalidateRect(NULL,FALSE); } } 首 先, 在 场 景 缩 放 功 能 类 中 定 义 如 下 数 据 成 员 : m_leftbuttondown, 布 尔 型, 用 来 标 志 鼠 标 左 键 是 否 已 被 按 下 oldwidth,double 类 型, 本 次 缩 放 操 作 之 前 视 口 的 宽 度 m_leftdownpos,cpoint 类 型, 记 录 上 次 鼠 标 移 动 事 件 中 鼠 标 的 位 置, 用 来 计 算 两 次 鼠

139 计 算 机 图 形 学 126 标 移 动 的 距 离 当 鼠 标 左 键 按 下 时, 表 示 缩 放 操 作 的 开 始, 因 此 缩 放 功 能 类 在 鼠 标 左 键 按 下 时 做 如 下 几 个 工 作 : 1 设 标 志 m_leftbuttondown 为 真, 表 示 已 经 处 于 缩 放 状 态 ; 2 记 下 此 时 鼠 标 指 针 的 位 置, 放 在 m_leftdownpos 中, 用 来 在 鼠 标 移 动 事 件 中 计 算 两 次 鼠 标 位 置 的 纵 向 移 动 距 离, 从 而 计 算 出 应 对 视 图 缩 放 的 尺 度 ; 3 将 此 时 场 景 的 视 宽 记 入 oldwidth 中 当 鼠 标 移 动 时, 首 先 判 断 鼠 标 左 键 是 否 已 按 下, 这 可 以 根 据 m_leftbuttondown 的 值 来 确 定 若 鼠 标 左 键 未 按 下, 则 不 作 任 何 处 理, 否 则, 做 如 下 工 作 : 首 先 计 算 上 次 鼠 标 位 置 与 现 在 鼠 标 位 置 在 y 方 向 的 距 离, 根 据 这 个 距 离 值 计 算 场 景 应 缩 放 的 尺 度, 然 后 将 这 个 尺 度 与 原 来 的 视 宽 结 合, 并 将 视 图 的 视 宽 修 改 为 新 的 值 最 后 刷 新 场 景 当 刷 新 时, 会 根 据 视 宽 自 动 调 整 场 景 的 显 示 尺 寸 当 鼠 标 左 键 抬 起 时, 表 示 缩 放 动 作 结 束, 因 此, 功 能 类 将 标 志 m_leftbuttondown 设 为 FALSE, 这 样, 在 鼠 标 移 动 事 件 中 将 不 再 继 续 处 理 5.3 交 互 式 的 图 形 生 成 技 术 交 互 式 的 计 算 机 图 形 学 软 件 允 许 用 户 通 过 鼠 标 或 键 盘 等 外 部 设 备 动 态 的 控 制 场 景 的 显 示, 甚 至 能 够 动 态 的 可 视 的 改 变 场 景 数 据 假 如 用 户 想 向 一 个 三 维 场 景 中 通 过 鼠 标 单 击 加 入 一 个 点 数 据, 那 么 就 需 要 将 鼠 标 在 屏 幕 上 的 位 置 ( 二 维 坐 标 ) 转 换 为 与 当 前 场 景 对 应 的 三 维 坐 标 ; 若 用 户 需 要 在 当 前 场 景 的 基 础 上 进 行 实 时 绘 图 操 作, 比 如 画 线, 则 需 要 使 用 橡 皮 筋 技 术 因 此, 本 节 将 讨 论 有 关 的 交 互 式 图 形 生 成 技 术, 包 括 交 互 式 绘 图 基 本 方 法 坐 标 的 输 入 技 术 和 橡 皮 筋 技 术 等 交 互 式 绘 图 概 述 一 般 说 来, 交 互 式 绘 图 操 作 是 一 次 性 操 作, 这 种 绘 图 是 为 了 表 示 用 户 在 操 作 过 程 中 产 生 的 暂 时 的 过 程 性 的 图 形 元 素 比 如 用 户 在 三 维 场 景 中 的 画 线 操 作, 鼠 标 左 键 单 击 表 示 一 条 新 的 线 段 的 开 始 ; 在 用 户 移 动 鼠 标 的 过 程 中, 上 一 次 画 线 的 结 果 要 抹 掉, 一 条 新 的 线 段 将 出 现 在 屏 幕 上, 指 示 当 前 的 画 线 过 程 ; 当 用 户 鼠 标 再 次 单 击 后, 则 表 示 当 前 的 画 线 操 作 结 束, 这 条 线 段 将 保 存 到 程 序 的 数 据 结 构 中 在 这 个 过 程 中, 如 何 抹 掉 上 次 操 作 的 图 形 指 示? 另 一 个 重 要 的 问 题 是, 如 何 将 屏 幕 上 鼠 标 位 置 的 二 维 坐 标 转 换 为 场 景 中 的 三 维 世 界 坐 标? 这 些 就 是 交 互 式 绘 图 所 要 解 决 的 一 些 基 本 问 题

140 5.3.2 坐 标 的 输 入 技 术 交 互 绘 图 技 术 计 算 机 屏 幕 是 一 个 二 维 的 平 面, 得 到 的 鼠 标 位 置 是 一 个 二 维 点 坐 标 但 用 户 的 操 作 在 语 义 上 是 对 三 维 场 景 进 行 的, 这 就 需 要 将 二 维 的 屏 幕 坐 标 转 换 为 三 维 世 界 坐 标, 称 这 种 转 换 为 坐 标 的 输 入 技 术 要 将 三 维 场 景 显 示 到 屏 幕 上, 需 要 进 行 一 系 列 变 换 操 作, 如 视 图 变 换 模 型 变 换 投 影 变 换 及 视 口 变 换 等, 这 些 变 换 是 由 三 维 坐 标 映 射 到 二 维 平 面 很 显 然, 坐 标 的 输 入 技 术 正 好 与 此 相 反, 是 将 二 维 坐 标 变 换 到 三 维 空 间, 因 此, 它 应 该 是 前 面 讨 论 过 的 各 种 变 换 的 逆 操 作 以 OpenGL 为 例, 其 变 换 规 则 为 : objx objy objz W =INV(M 倡 P) 2(WinX -view[0]) view[2] 2(WinY -view[1]) view[3] 2(WinZ -1 ) 1 其 中,objX objy objz 为 要 计 算 的 三 维 空 间 中 的 坐 标 分 量,INV 是 对 矩 阵 求 逆,M 为 当 前 三 维 场 景 的 模 型 变 换 矩 阵,P 为 当 前 使 用 的 投 影 变 换 矩 阵,WinX WinY WinZ 为 二 维 屏 幕 坐 标 (WinZ 可 以 随 意 取 值, 只 要 其 值 落 在 当 前 视 点 与 显 示 中 心 之 连 线 与 场 景 相 交 的 范 围 内 即 可 ),view[0] view[1] view[2] view[3] 分 别 对 应 当 前 视 口 的 左 上 角 x y 坐 标 分 量 宽 度 和 高 度 橡 皮 筋 技 术 橡 皮 筋 技 术 是 交 互 式 绘 图 中 广 泛 使 用 的 一 种 用 户 界 面 接 口 手 段, 何 谓 橡 皮 筋 技 术? 想 象 一 下, 将 橡 皮 筋 一 端 固 定 于 某 点, 手 持 其 另 一 端 点 随 意 移 动, 则 橡 皮 筋 将 随 着 手 的 移 动 而 不 断 变 换 形 态, 这 种 形 态 的 变 化 能 够 很 清 晰 的 表 达 出 手 移 动 的 过 程 细 节 因 此, 橡 皮 筋 技 术 可 用 于 交 互 式 绘 图 以 表 现 用 户 操 作 的 过 程 细 节 交 互 式 绘 图 需 要 控 制 某 种 图 形 随 着 用 户 的 操 作 ( 如 鼠 标 移 动 ) 不 断 变 换 形 态, 这 要 解 决 两 个 方 面 的 问 题 : 擦 除 旧 的 图 形 形 态, 显 示 新 的 图 形 形 态 要 实 现 橡 皮 筋 技 术, 最 关 键 的 问 题 是 如 何 将 旧 的 图 形 擦 除, 显 示 新 的 图 形 形 态 则 较 为 简 单 目 前, 实 现 橡 皮 筋 技 术 主 要 有 两 种 方 法 : 基 于 异 或 操 作 的 橡 皮 筋 技 术 和 基 于 缓 冲 区 的 橡 皮 筋 技 术 1. 基 于 异 或 操 作 的 橡 皮 筋 技 术 基 于 异 或 操 作 的 橡 皮 筋 技 术 利 用 了 异 或 逻 辑 操 作 的 重 要 性 质 : 值 A 与 值 B 两 次 异 或, 其 值 仍 然 为 A 其 运 算 逻 辑 如 表 5 唱 1 所 示 -1-1 第 5 章 127

141 计 算 机 图 形 学 表 5 唱 1 异 或 操 作 A B A 磑 B 将 这 个 性 质 应 用 到 像 素 的 颜 色 上, 则 可 以 利 用 两 次 异 或 操 作 恢 复 本 来 的 像 素 颜 色 即 : 将 图 形 显 示 方 式 设 置 为 异 或 模 式 ( 如 Visual C ++ 中 的 函 数 SetROP2), 画 出 图 形 ( 此 时 图 形 是 可 见 的 ), 在 异 或 模 式 下, 将 相 同 的 图 形 再 画 一 遍, 这 个 图 形 将 会 从 屏 幕 上 消 失, 而 原 来 被 它 覆 盖 的 部 分 将 恢 复 如 初 2. 基 于 缓 冲 区 的 橡 皮 筋 技 术 屏 幕 上 所 绘 的 图 形 都 是 由 像 素 组 成 的, 每 个 像 素 都 有 一 个 固 定 的 颜 色 或 带 有 相 应 点 的 其 他 信 息, 如 深 度 等 因 此 在 绘 制 图 形 时, 内 存 中 必 须 为 每 个 像 素 均 匀 地 保 存 数 据, 这 块 为 所 有 像 素 保 存 数 据 的 内 存 区 就 叫 缓 冲 区, 又 叫 缓 存 (buffer) 不 同 的 缓 存 可 能 包 含 每 个 像 素 的 不 等 数 位 的 数 据, 但 在 给 定 的 一 个 缓 存 中, 每 个 像 素 都 被 赋 予 相 同 数 位 的 数 据 在 基 于 缓 冲 区 的 橡 皮 筋 技 术 中 有 两 个 缓 存 ( 称 为 双 缓 存 ), 一 个 称 为 前 缓 存, 另 者 称 后 缓 存 向 前 缓 存 中 绘 制 图 形, 将 会 在 屏 幕 上 看 到 具 体 的 绘 制 过 程, 向 后 缓 存 中 绘 制 图 形, 屏 幕 上 看 不 见 具 体 的 绘 制 过 程, 在 适 当 的 时 刻, 将 后 缓 存 中 内 容 复 制 到 前 缓 存, 则 后 缓 存 中 绘 制 的 图 形 将 会 快 速 的 显 示 到 屏 幕 上 有 下 面 两 种 方 式 实 现 橡 皮 筋 技 术 : 1 在 进 行 交 互 式 绘 图 之 前, 将 场 景 内 容 放 入 后 缓 存 ; 在 进 行 交 互 式 绘 图 过 程 中, 每 次 需 要 更 新 画 面 时, 首 先 将 后 缓 存 内 容 显 示 到 屏 幕 上, 然 后 将 需 要 显 示 的 交 互 式 图 形 绘 制 到 屏 幕 上 2 在 进 行 交 互 式 绘 图 过 程 中, 将 每 次 需 要 显 示 的 整 个 场 景 ( 包 括 交 互 式 图 形 ) 一 并 绘 制 到 后 缓 存 中, 然 后 将 后 缓 存 中 的 内 容 复 制 到 前 缓 存 ( 快 速 显 示 到 屏 幕 ) 由 于 将 缓 存 中 内 容 显 示 到 屏 幕 上 速 度 非 常 快, 因 此 用 这 种 技 术 实 现 的 交 互 式 绘 图 效 果 并 不 比 异 或 绘 图 方 式 差 5.4 交 互 式 的 图 形 编 辑 技 术 场 景 显 示 的 交 互 式 控 制, 使 得 用 户 可 以 自 由 的 观 察 场 景 的 各 个 组 成 部 分, 通 过 缩 放 操 作 还 可 以 观 察 场 景 中 某 个 局 部 的 细 节, 相 应 的 交 互 式 的 图 形 编 辑 技 术 能 够 给 用 户 提 供 可 视 化 的 修 改 图 形 数 据 的 手 段

142 5.4.1 交 互 式 图 形 编 辑 的 基 本 方 法 交 互 绘 图 技 术 三 维 图 形 中 最 常 见 的 图 形 元 素 包 括 点 线 和 面, 因 此 交 互 式 图 形 编 辑 一 般 是 针 对 这 3 种 图 形 元 素 进 行 的, 当 然, 也 可 以 对 复 杂 的 三 维 对 象 进 行 整 体 编 辑 图 5 唱 8 给 出 点 线 面 的 最 基 本 的 编 辑 方 法 图 形 元 素 拾 取 技 术 在 一 个 三 维 图 形 处 理 系 统 中, 同 一 时 刻 屏 幕 上 存 在 着 多 种 对 象 ( 图 形 元 素 ), 如 曲 面 折 线 点 等 这 些 图 形 元 素 最 初 创 建 的 形 态 不 一 定 能 满 足 要 求, 有 时 需 要 对 这 些 图 形 元 素 的 形 态 做 进 一 步 的 调 整 比 如 移 动 折 线 中 的 某 个 关 键 点, 使 折 线 的 形 态 达 到 令 人 满 意 的 效 果 ; 有 时 需 要 沿 法 向 拖 动 曲 面 上 的 某 个 离 散 点, 从 而 改 变 曲 面 的 形 态 如 图 5 唱 8 所 示 所 有 这 些 编 辑 动 作, 都 需 要 在 选 中 某 个 图 形 元 素 后 才 能 进 行, 因 此, 图 形 元 素 的 选 择 ( 拾 取 ) 就 成 为 一 个 不 可 缺 少 的 基 本 操 作 选 择 一 个 元 素 与 对 这 个 元 素 进 行 操 作 往 往 是 紧 密 联 系 在 一 起 的 如 单 击 屏 幕 上 的 某 个 点 时, 其 实 就 是 在 选 择 这 个 点, 但 这 个 单 击 操 作 同 时 也 是 拖 动 ( 编 辑 ) 这 个 点 的 开 始, 因 此 选 择 与 编 辑 操 作 是 交 织 在 一 起 的 根 据 不 同 编 辑 操 作 的 需 要, 将 选 择 操 作 分 为 两 种 类 型 : 静 态 选 择 和 动 态 选 择 所 谓 静 态 选 择 是 指 只 有 在 某 个 图 形 元 素 之 上 单 击 了 鼠 标 左 键 之 后, 这 个 点 才 被 认 为 是 选 中 了 ; 动 态 选 择 是 在 鼠 标 移 动 过 程 中 实 现 的, 当 鼠 标 移 动 到 某 个 图 形 元 素 之 上 时, 这 个 图 形 元 素 就 被 选 中, 网 页 中 的 动 态 链 接 在 一 定 程 度 上 类 似 于 动 态 选 择 在 动 态 选 择 中, 按 下 鼠 标 左 键 不 再 表 示 选 择 操 作, 而 是 表 示 编 辑 动 作 的 开 始 针 对 这 两 种 不 同 类 型 的 选 择 操 作, 分 别 讨 论 其 实 现 机 制 在 一 个 三 维 图 形 处 理 系 统 中, 屏 幕 上 显 示 的 是 三 维 空 间 中 的 物 体, 而 屏 幕 本 身 却 是 二 维 的, 鼠 标 指 针 的 位 置 也 是 二 维 的, 因 此 需 要 解 决 一 个 问 题 : 如 何 在 二 维 世 界 中 识 别 三 维 对 象? 即 如 何 拾 取 指 定 的 三 维 对 象? 三 维 图 形 平 台 OpenGL 提 供 的 选 择 机 制 提 供 了 解 决 这 个 问 题 的 实 现 方 法 现 在 假 设 已 能 够 从 给 定 的 对 象 集 合 中 确 定 鼠 标 指 针 选 中 了 哪 个 对 象, 结 合 前 面 介 绍 的 功 能 类 机 制, 利 用 面 向 对 象 的 多 态 性, 可 以 对 任 意 给 定 的 对 象 集 合 进 行 静 态 选 择 与 动 态 选 择, 前 提 是 集 合 中 的 每 个 对 象 都 会 绘 制 自 己 ( 每 个 对 象 都 有 一 个 绘 制 自 身 的 成 员 函 数 ) 1. 静 态 选 择 功 能 类 静 态 选 择 往 往 与 其 后 的 编 辑 操 作 是 独 立 的, 使 用 静 态 选 择 选 中 某 个 对 象 后, 需 要 用 户 通 过 单 击 菜 单 或 其 他 操 作 来 对 选 中 的 对 象 做 进 一 步 的 处 理, 因 此, 静 态 选 择 通 常 用 来 选 中 复 合 型 对 象 ( 如 一 个 曲 面, 其 中 包 含 离 散 点 折 线 等 ), 选 中 后 再 对 其 做 进 一 步 处 理 第 5 章 129

143 计 算 机 图 形 学 130 图 5 唱 8 点 线 面 的 编 辑 方 法 下 面 给 出 了 静 态 选 择 功 能 类 的 伪 代 码 实 现, 它 由 BaseFunction 派 生 而 来 静 态 选 择 功 能 类 用 来 实 现 鼠 标 左 键 单 击 作 为 手 段 的 图 元 选 择 它 继 承 了 BaseFunction, 重 载 其 鼠 标 左 键 按 下 的 消 息 处 理 成 员, 以 满 足 静 态 选 择 操 作 的 需 要

144 交 互 绘 图 技 术 (1) 构 造 函 数 // 接 受 外 部 提 供 的 待 选 择 图 元 集 合 m_pelementset =pelementset; // 接 受 外 部 提 供 的 预 选 取 对 象 m_pelement =pelement; // 将 用 户 指 定 的 默 认 选 中 元 素 赋 给 成 员 变 量, 并 高 亮 显 示 默 认 被 选 中 元 素 if(m_pelement!=null)setselectedelement(m_pelement); 第 5 章 131 (2) 数 据 成 员 ElementSet 倡 m_pelementset; // 图 形 元 素 集 合, 将 从 这 些 图 元 中 挑 出 被 选 中 者, 放 到 m_pelement 中 Element 倡 m_pelement; // 被 选 中 的 图 元 被 放 在 这 个 成 员 变 量 中 (3) 鼠 标 左 键 处 理 // 利 用 某 种 机 制 ( 如 OpenGL 提 供 的 选 择 机 制 ) 从 待 选 择 元 素 集 合 中 选 择 出 鼠 标 指 向 的 图 形 元 素 Element 倡 pei =GetElementFromSelection(m_pElementSet,GetMouseLocation()); if(pei ==m_pselectedelement) return; if(pei! =NULL) SetSelectedElement(pEI); 当 静 态 选 择 功 能 类 对 象 获 得 控 制 权 ( 成 为 当 前 功 能 类 对 象 ) 时, 需 要 首 先 选 中 一 个 默 认 的 元 素, 因 此 在 其 构 造 函 数 中, 将 用 户 指 定 的 默 认 选 中 元 素 赋 给 成 员 m_pelement, 并 将 其 高 亮 显 示 2. 动 态 选 择 功 能 类 动 态 选 择 往 往 与 其 后 的 编 辑 操 作 密 不 可 分, 鼠 标 移 动 时 选 中 元 素, 左 键 按 下 开 始 拖 动 ( 编 辑 ) 该 元 素, 因 此, 动 态 选 择 功 能 类 通 常 与 其 他 具 有 编 辑 功 能 的 功 能 类 结 合 在 一 起, 共 同 完 成 一 种 完 整 的 编 辑 操 作 动 态 选 择 功 能 类 与 静 态 选 择 功 能 类 的 实 现 基 本 一 致, 不 同 的 是 动 态 选 择 功 能 类 重 载 基 类 的 鼠 标 移 动 事 件, 而 静 态 选 择 功 能 类 重 载 基 类 的 鼠 标 左 键 单 击 事 件 ; 另 外, 动 态 选 择 功 能 类 的 特 点 决 定 了 其 在 初 始 化 时 不 需 要 指 定 一 个 默 认 的 被 选 中 元 素, 因 此, 其 构 造 函 数 中 不 做 任 何 工 作 下 面 给 出 了 动 态 选 择 功 能 类 的 伪 代 码 实 现, 它 由 BaseFunction 派 生 而 来 (1) 数 据 成 员 ElementSet 倡 m_pelementset; // 图 形 元 素 集 合, 将 从 这 些 图 元 中 挑 出 被 选 中 者, 放 到 m_pelement 中 Element 倡 m_pelement;

145 计 算 机 图 形 学 // 被 选 中 的 图 元 被 放 在 这 个 成 员 变 量 中 (2) 鼠 标 移 动 处 理 132 // 利 用 某 种 机 制 ( 如 OpenGL 提 供 的 选 择 机 制 ) 从 待 选 择 元 素 集 合 中 选 择 出 // 鼠 标 指 向 的 图 形 元 素 Element 倡 pei =GetElementFromSelection(m_pElementSet,GetMouseLocation()); if(pei ==m_pselectedelement) return; // 恢 复 屏 幕 背 景, 然 后 高 亮 显 示 被 选 中 的 元 素 if(pei! =NULL) SetSelectedElement(pEI); 5.5 OpenGL 对 图 形 交 互 的 支 持 1992 年,OpenGL 正 式 成 为 适 用 于 各 种 计 算 机 环 境 下 的 三 维 应 用 程 序 接 口 (3D API) 目 前, 它 已 经 成 为 国 际 上 通 用 的 开 放 式 三 维 图 形 标 准 作 为 一 个 优 秀 的 三 维 图 形 接 口, OpenGL 提 供 有 丰 富 的 绘 图 命 令, 利 用 这 些 命 令 能 够 开 发 出 高 性 能 交 互 式 的 三 维 图 形 应 用 软 件 在 三 维 图 形 交 互 方 面,OpenGL 提 供 了 反 向 坐 标 变 换 ( gluunproject) 用 以 实 现 三 维 坐 标 输 入 ;OpenGL 的 双 缓 存 机 制 为 实 现 橡 皮 筋 技 术 提 供 了 途 径 ; 为 了 支 持 三 维 图 形 的 编 辑 及 三 维 目 标 实 体 的 拾 取 功 能,OpenGL 提 供 了 一 种 简 单 直 观 的 选 择 机 制, 能 够 很 容 易 的 实 现 三 维 场 景 中 任 一 图 形 元 素 的 选 取 本 节 将 依 次 介 绍 OpenGL 的 几 种 图 形 交 互 技 术 的 使 用 方 法 用 OpenGL 的 反 向 坐 标 变 换 实 现 三 维 坐 标 输 入 OpenGL 提 供 的 API 函 数 gluunproject 能 够 将 Windows 屏 幕 坐 标 转 换 为 场 景 中 的 三 维 世 界 坐 标, 也 就 是 说, 已 知 鼠 标 在 Windows 窗 口 中 的 位 置, 通 过 函 数 gluunproject 可 以 获 得 该 位 置 在 场 景 中 对 应 的 (x,y,z) 三 维 坐 标 使 用 该 函 数, 需 要 指 定 如 下 一 些 参 数 : 1 视 口 的 原 点 (x,y 坐 标 ) 及 视 口 宽 度 (width) 与 高 度 (height); 2 当 前 显 示 三 维 场 景 所 使 用 的 模 型 视 图 变 换 矩 阵 (the modelview matrix); 3 当 前 显 示 三 维 场 景 所 使 用 的 投 影 变 换 矩 阵 (the projection matrix); 4 Windows 窗 口 坐 标 ; 5 存 储 三 维 坐 标 的 变 量 (posx,posy,posz) 下 面 详 细 说 明 所 需 要 参 数 的 有 关 内 容 1. 视 口 信 息 ( 视 口 原 点 坐 标 宽 度 高 度 ) 使 用 函 数 gluunproject, 需 要 获 得 当 前 视 口 的 相 关 信 息, 包 括 视 口 左 上 角 坐 标 ( x,y) 及

146 交 互 绘 图 技 术 视 口 的 宽 度 (width) 与 高 度 (height) 方 法 是 : GLint viewport[4]; // 存 储 视 口 相 关 信 息 glgetintegerv(gl_viewport, viewport); // 检 索 (x, y, width, height) 一 旦 调 用 成 功, 将 有 : 第 5 章 133 viewport[0] =x viewport[1] =y viewport[2] =width viewport[3] =height 2. 模 型 视 图 变 换 矩 阵 一 旦 获 得 了 视 口 信 息, 紧 接 着 获 得 当 前 的 模 型 视 图 变 换 矩 阵 ( the modelview matrix) 模 型 视 图 变 换 矩 阵 决 定 了 OpenGL 图 元 顶 点 的 世 界 坐 标 如 何 变 换 到 视 坐 标 方 法 如 下 : GLdouble modelview[16]; // 存 储 模 型 视 图 矩 阵 的 16 个 双 精 度 值 (4 4 矩 阵 ) glgetdoublev(gl_modelview_matrix, modelview); // 检 索 模 型 视 图 矩 阵 3. 投 影 矩 阵 然 后, 需 要 获 取 投 影 矩 阵 (the projection matrix) 信 息 利 用 投 影 矩 阵 可 将 顶 点 的 视 坐 标 变 换 为 裁 剪 坐 标 利 用 下 面 的 代 码 段 可 以 获 得 投 影 矩 阵 : GLdouble projection[16]; // 存 储 投 影 矩 阵 的 16 个 双 精 度 值 (4 4 矩 阵 ) glgetdoublev(gl_projection_matrix, projection); // 检 索 投 影 矩 阵 4.Windows 屏 幕 坐 标 Windows 屏 幕 坐 标 即 为 要 变 换 成 三 维 坐 标 的 数 据 来 源, 一 般 对 当 前 鼠 标 位 置 感 兴 趣 在 VC 中, 有 些 事 件 处 理 程 序 可 以 直 接 获 得 鼠 标 位 置, 如 OnLButtonDown,OnMouseMove 等 但 有 些 事 件 处 理 程 序 的 参 数 不 直 接 提 供 鼠 标 位 置, 这 需 要 另 外 编 写 代 码 来 获 得 鼠 标 位 置, 下 面 的 代 码 段 说 明 了 这 个 过 程 : CPoint mouse; // 保 存 当 前 鼠 标 指 针 位 置 的 x,y 坐 标 GetCursorPos(&mouse); // 获 得 当 前 鼠 标 坐 标 ScreenToClient(hWnd, &mouse);// 将 屏 幕 坐 标 转 换 为 窗 口 坐 标 ( 或 称 为 OpenGL 视 口 坐 标 ) GLfloat winx, winy, winz; // 用 来 存 放 传 递 到 函 数 gluunproject 的 窗 口 坐 标 参 数 winx =(float)mouse.x; // 鼠 标 坐 标 的 x 分 量 winy =(float)mouse.y; // 鼠 标 坐 标 的 y 分 量 由 于 Windows 窗 口 坐 标 (0,0) 在 左 上 角, 而 OpenGL 视 口 是 由 左 下 角 开 始 的, 因 此 需 要 将 WinY 变 换 一 下 : winy =(float)viewport[3] 唱 winy;

147 计 算 机 图 形 学 需 要 注 意,WinZ 无 法 由 鼠 标 位 置 直 接 得 到 ( 鼠 标 位 置 为 二 维 坐 标 ), 需 调 用 OpenGL 提 供 的 API 函 数 glreadpixels 计 算 得 到, 方 法 为 : 134 glreadpixels(winx, winy, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winz); 5. 存 储 三 维 坐 标 的 变 量 剩 下 的 工 作 就 是 调 用 gluunproject 计 算 对 应 的 三 维 坐 标 (posx,posy,posz), 并 存 储 到 posx,posy,posz 中 下 面 给 出 利 用 OpenGL 函 数 gluunproject 进 行 反 向 坐 标 变 换 实 现 三 维 坐 标 输 入 的 完 整 的 子 程 序 : Point3D GetOGLPos(int x, int y) { GLint viewport[4]; GLdouble modelview[16]; GLdouble projection[16]; GLfloat winx, winy, winz; GLdouble posx, posy, posz; glgetdoublev(gl_modelview_matrix, modelview ); glgetdoublev(gl_projection_matrix, projection ); glgetintegerv(gl_viewport, viewport ); winx =(float) x; winy =(float)viewport[3] 唱 (float)y; glreadpixels(winx, winy, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winz ); gluunproject ( winx, winy, winz, modelview, projection, viewport, &posx, &posy, &posz); } return Point3D(posX, posy, posz); 用 OpenGL 缓 冲 区 技 术 实 现 橡 皮 筋 功 能 屏 幕 上 所 绘 的 图 形 都 是 由 像 素 组 成 的, 每 个 像 素 都 有 一 个 固 定 的 颜 色 或 带 有 相 应 点 的 其 他 信 息, 如 深 度 等 因 此 在 绘 制 图 形 时, 内 存 中 必 须 为 每 个 像 素 均 匀 地 保 存 数 据, 这 块 为 所 有 像 素 保 存 数 据 的 内 存 区 就 叫 缓 冲 区, 又 叫 缓 存 (buffer) 不 同 的 缓 存 可 能 包 含 每 个 像 素 的 不 等 数 位 的 数 据, 但 在 给 定 的 一 个 缓 存 中, 每 个 像 素 都 被 赋 予 相 同 数 位 的 数 据

148 交 互 绘 图 技 术 存 储 一 位 像 素 信 息 的 缓 存 叫 位 面 ( bitplane ) 系 统 中 所 有 的 缓 存 统 称 为 帧 缓 存 (framebuffer), 可 以 利 用 这 些 不 同 的 缓 存 进 行 颜 色 设 置 隐 藏 面 消 除 场 景 反 走 样 和 模 板 等 操 作 1.OpenGL 帧 缓 存 组 成 OpenGL 帧 缓 存 由 以 下 4 种 缓 存 组 成 (1) 颜 色 缓 存 (color buffer) 颜 色 缓 存 通 常 指 的 是 图 形 要 画 入 的 缓 存, 其 中 内 容 可 以 是 颜 色 索 引, 也 可 以 是 RGB 颜 色 数 据 ( 包 含 alpha 值 也 可 ) 若 所 用 OpenGL 系 统 支 持 立 体 视 图, 则 有 左 右 两 个 缓 存 ; 若 不 支 持 立 体 视 图, 则 只 有 左 缓 存 同 样, 双 缓 存 OpenGL 系 统 有 前 台 和 后 台 两 个 缓 存, 而 单 缓 存 系 统 只 有 前 台 缓 存 每 个 OpenGL 系 统 都 必 须 提 供 一 个 左 前 颜 色 缓 存 (2) 深 度 缓 存 (depth buffer) 深 度 缓 存 保 存 每 个 像 素 的 深 度 值 深 度 通 常 用 视 点 到 物 体 的 距 离 来 度 量, 这 样 带 有 较 大 深 度 值 的 像 素 就 会 被 带 有 较 小 深 度 值 的 像 素 替 代, 即 远 处 的 物 体 被 近 处 的 物 体 遮 挡 住 了 深 度 缓 存 也 称 为 z 唱 buffer, 因 为 在 实 际 应 用 中,x y 常 度 量 屏 幕 上 水 平 与 垂 直 距 离, 而 z 常 被 用 来 度 量 眼 睛 到 屏 幕 的 垂 直 距 离 (3) 模 板 缓 存 (stencil buffer) 模 板 缓 存 可 以 保 持 屏 幕 上 某 些 部 位 的 图 形 不 变, 而 其 他 部 位 仍 然 可 以 进 行 图 形 绘 制 比 如 说, 可 以 通 过 模 板 缓 存 来 绘 制 透 过 汽 车 挡 风 玻 璃 观 看 车 外 景 物 的 画 面 首 先, 将 挡 风 玻 璃 的 形 状 存 储 到 模 板 缓 存 中 去, 然 后 再 绘 制 整 个 场 景 这 样, 模 板 缓 存 挡 住 了 通 过 挡 风 玻 璃 看 不 见 的 任 何 东 西, 而 车 内 的 仪 表 及 其 他 物 品 只 需 绘 制 一 次 因 此, 随 着 汽 车 的 移 动, 只 有 外 面 的 场 景 在 不 断 地 更 改 (4) 累 积 缓 存 (accumulation buffer) 累 积 缓 存 同 颜 色 缓 存 一 样 也 保 存 颜 色 数 据, 但 它 只 保 存 RGBA 颜 色 数 据, 而 不 能 保 存 颜 色 索 引 数 据 ( 因 此 在 颜 色 表 方 式 下 使 用 累 积 缓 存 其 结 果 不 确 定 ) 这 个 缓 存 一 般 用 于 累 积 一 系 列 图 像, 从 而 形 成 最 后 的 合 成 图 像 利 用 这 种 方 法, 可 以 进 行 场 景 反 走 样 操 作 2. 利 用 OpenGL 的 双 缓 存 实 现 橡 皮 筋 技 术 OpenGL 提 供 了 双 ( 颜 色 ) 缓 存, 分 别 称 为 前 ( 颜 色 ) 缓 存 和 后 ( 颜 色 ) 缓 存 当 然, 有 些 OpenGL 系 统 还 提 供 了 更 多 的 颜 色 缓 存, 如 前 左 缓 存 后 右 缓 存 等, 这 里 我 们 只 讨 论 利 用 双 缓 存 实 现 橡 皮 筋 技 术, 其 他 颜 色 缓 存 不 予 考 虑 通 过 调 用 OpenGL 的 API 函 数 gldrawbuffer 可 以 指 定 后 续 绘 图 操 作 将 画 进 哪 个 缓 存, 其 参 数 可 以 是 GL_FRONT 或 GL_BACK, 也 可 以 是 GL_FRONT_AND_BACK GL_BACK _RIGHT 等 前 缓 存 直 接 与 计 算 机 屏 幕 相 对 应, 也 就 是 说, 若 指 定 后 续 绘 图 操 作 画 进 前 缓 存, 则 用 户 能 够 在 屏 幕 上 看 见 绘 图 的 过 程, 即 画 进 前 缓 存 相 当 于 直 接 对 屏 幕 作 图 ; 若 指 定 第 5 章 135

149 计 算 机 图 形 学 136 后 续 绘 图 操 作 画 进 后 缓 存, 则 绘 图 结 果 并 不 显 示 到 计 算 机 屏 幕, 除 非 调 用 OpenGL 的 函 数 SwapBuffers, 将 后 缓 存 的 内 容 复 制 到 前 缓 存 中 由 此, 利 用 OpenGL 的 双 缓 存 机 制, 可 以 实 现 橡 皮 筋 技 术 具 体 操 作 方 法 为 : 在 进 行 交 互 式 绘 图 之 前, 首 先 指 定 后 续 绘 图 操 作 将 对 后 缓 存 进 行, 然 后 绘 制 场 景, 这 时, 后 缓 存 中 存 放 了 不 包 括 交 互 式 图 形 在 内 的 整 个 场 景, 可 以 将 之 作 为 背 景 来 抹 除 不 再 需 要 显 示 的 交 互 式 图 形 当 需 要 绘 制 交 互 式 图 形 时, 首 先 调 用 SwapBuffers 将 后 缓 存 中 的 背 景 显 示 到 计 算 机 屏 幕, 然 后 指 定 后 续 绘 图 操 作 针 对 前 缓 存 进 行, 紧 接 着 绘 制 交 互 式 图 形 通 过 这 种 方 式, 不 再 需 要 考 虑 怎 样 抹 除 上 次 画 出 的 交 互 式 图 形, 只 是 简 单 的 用 后 缓 存 中 保 存 的 背 景 重 画 屏 幕, 再 画 出 新 的 交 互 式 图 形 就 可 以 了 因 为 将 后 缓 存 中 的 三 维 图 形 倾 倒 至 计 算 机 屏 幕 的 速 度 相 当 快 速 ( 将 某 缓 存 中 三 维 图 形 显 示 到 屏 幕 并 不 重 新 进 行 各 种 变 换 及 消 隐 操 作, 缓 存 中 的 数 据 是 当 初 画 进 缓 存 时 已 经 计 算 好 的 ), 因 此 利 用 这 种 方 式 实 现 的 橡 皮 筋 效 果 非 常 理 想 另 外, 具 有 橡 皮 筋 效 果 的 交 互 式 图 形 是 用 来 表 现 用 户 的 某 种 操 作, 一 般 情 况 下 希 望 交 互 式 图 形 总 能 被 用 户 看 见, 而 不 被 其 他 三 维 对 象 挡 住, 因 此, 在 绘 制 交 互 式 图 形 之 前, 调 用 OpenGL 函 数 gldepthmask(false) 禁 止 进 行 深 度 测 试, 这 样, 交 互 式 图 形 总 会 在 背 景 之 前 根 据 前 面 论 述, 给 出 一 个 完 整 的 函 数 SetDrawImmediately( BOOLImd), 它 的 功 能 是 : 根 据 所 传 递 参 数 的 不 同, 设 置 不 同 的 图 形 绘 制 方 式, 若 参 数 Imd 为 TRUE, 则 设 置 为 交 互 式 绘 图, 否 则, 设 置 为 一 般 绘 图 情 况 其 代 码 片 断 如 下 : void GLView SetDrawImmediately( BOOL Imd) { if(imd) // 绘 制 交 互 式 图 形 { // 取 消 深 度 测 试, 保 证 交 互 式 图 形 总 能 够 被 用 户 看 见 gldepthmask(false); // 直 接 向 屏 幕 绘 图 gldrawbuffer(gl_front); // 总 是 不 进 行 深 度 测 试 gldepthfunc(gl_always); } else // 一 般 情 况 下 绘 图 { // 进 行 深 度 测 试 ( 进 行 消 隐 计 算 ) gldepthmask(true);

150 交 互 绘 图 技 术 } } // 后 缓 存 绘 图, 用 SwapBuffers 显 示, 在 视 觉 上 提 高 绘 图 速 度, 减 少 闪 烁 现 象 gldrawbuffer(gl_back); // 深 度 小 的 对 象 显 示 ( 深 度 大 的 对 象 被 消 隐 ) gldepthfunc(gl_less); 第 5 章 实 例 利 用 前 面 介 绍 的 功 能 类 机 制, 结 合 OpenGL 提 供 的 双 缓 存 绘 图, 给 出 一 个 画 线 的 程 序 实 例 用 户 单 击 鼠 标 左 键, 表 示 一 条 新 的 线 段 的 开 始, 在 鼠 标 移 动 过 程 中, 要 不 断 的 更 新 屏 幕 显 示, 线 段 的 起 点 不 变, 但 终 点 始 终 跟 随 着 鼠 标 指 针, 当 用 户 再 次 单 击 鼠 标 左 键 后, 画 线 操 作 结 束 实 例 代 码 比 较 简 单, 请 读 者 自 行 理 解 OnLButtonDown(msg) { ShowStatusBar( 拖 动 鼠 标 至 终 点, 抬 起 左 键 完 成 线 段 定 义 ); m_leftbuttondown =TRUE; m_leftdownpos =GetMouseLocation(); m_start3dpoint =GetOGLPos(m_LeftDownPos.x,m_LeftDownPos.y); m_lastmovepos =m_leftdownpos; } OnMouseMove(msg) { if(! m_leftbuttondown) return FALSE; Point3D tmppoint =GetOGLPos ( GetMouseLocation ().x, GetMouseLocation (). y); if(m_lastmovepos!=m_leftdownpos) { SwapBuffers(wglGetCurrentDC()); } if(getmouselocation()! =m_leftdownpos) { SetDrawImmediately(TRUE); DrawLine(&m_Start3DPoint,&tmpPoint); SetDrawImmediately(FALSE); } m_lastmovepos =GetMouseLocation(); } OnLButtonUp(msg) {

151 计 算 机 图 形 学 138 Point3D tmppoint =GetOGLPos ( GetMouseLocation ().x, GetMouseLocation (). y); if(m_lastmovepos!=m_leftdownpos) { SwapBuffers(wglGetCurrentDC()); } ShowStatusBar( 按 下 鼠 标 左 键, 定 义 线 段 起 点 ); m_leftbuttondown =FALSE; if(getmouselocation() ==m_leftdownpos) SetDrawImmediately(TRUE); DrawLine(&m_Start3DPoint,&tmpPoint); SetDrawImmediately(FALSE); } return TRUE; OpenGL 中 的 选 择 机 制 介 绍 在 实 际 应 用 中, 有 些 OpenGL 图 形 程 序 只 需 简 单 地 将 二 维 或 三 维 物 体 显 示 到 屏 幕 上, 可 由 用 户 控 制 对 整 个 场 景 进 行 旋 转 缩 放 平 移 等 操 作 ; 而 另 外 一 些 应 用 程 序 则 可 能 需 要 识 别 屏 幕 上 显 示 出 来 的 各 个 三 维 图 形 元 素, 允 许 用 户 进 一 步 对 某 个 元 素 单 独 做 处 理 如 在 三 维 地 质 建 模 系 统 中, 屏 幕 上 同 时 显 示 出 一 系 列 地 层 断 面 剖 面, 每 个 断 面 或 地 层 中 又 包 含 着 大 量 离 散 点 或 地 质 线, 剖 面 中 包 括 用 来 生 成 断 面 的 断 面 线 和 用 来 生 成 地 层 的 层 位 线, 系 统 应 允 许 用 户 选 中 断 面 或 地 层 面 上 的 某 个 离 散 点, 拖 动 它 进 行 编 辑 从 而 引 起 断 面 或 地 层 形 态 的 变 化, 达 到 建 模 的 目 的 ; 用 户 也 可 以 拖 动 地 质 线 上 的 某 离 散 点 来 编 辑 地 质 线, 从 而 改 变 此 地 质 线 所 附 属 的 地 质 面 的 形 态 所 有 这 些 都 需 要 识 别 屏 幕 上 的 某 个 图 形 元 素, 允 许 用 户 选 择 它 并 进 行 编 辑, 而 不 是 将 整 个 场 景 作 为 一 个 整 体 来 对 待 通 过 OpenGL 画 在 屏 幕 上 的 图 元 通 常 都 经 历 过 多 次 旋 转 平 移 和 投 影 变 换, 在 三 维 场 景 中 要 确 定 用 户 所 选 择 的 究 竟 是 哪 一 个 图 元 就 显 得 非 常 困 难 令 人 高 兴 的 是,OpenGL 提 供 了 一 种 选 择 机 制, 可 自 动 通 知 用 户 在 窗 口 的 某 个 特 定 区 域 里 画 出 的 是 哪 个 图 元, 利 用 这 种 机 制, 就 可 以 判 断 给 定 图 元 集 合 中 哪 个 图 元 被 鼠 标 选 中 1. 设 置 选 择 缓 冲 区 若 需 使 用 OpenGL 的 选 择 机 制, 第 一 个 步 骤 首 先 要 为 OpenGL 返 回 的 选 择 信 息 设 置 缓 冲 区, 通 过 这 个 缓 冲 区 可 以 取 得 有 关 被 选 中 图 元 的 信 息, 从 而 决 定 给 定 图 元 集 合 中 哪 些 图 元 被 选 中 了 使 用 命 令 glselectbuffer 可 以 设 置 选 择 缓 冲 区 它 有 两 个 参 数, 一 个 指 明 缓 冲 区 的 大 小, 另 外 一 个 是 整 型 数 组, 用 来 存 放 OpenGL 返 回 的 选 择 信 息 2. 进 入 选 择 模 式 通 常 情 况 下,OpenGL 工 作 在 渲 染 模 式 ( 默 认 模 式 ), 在 这 种 模 式 下, 一 切 绘 图 操 作 通

152 交 互 绘 图 技 术 过 各 种 变 换 直 接 显 示 到 屏 幕 上 ; 若 需 使 用 OpenGL 的 选 择 机 制, 则 必 须 进 入 选 择 模 式, 在 这 种 模 式 下, 实 际 的 绘 图 操 作 并 不 反 映 到 屏 幕 上 ( 不 进 行 光 栅 化 ), 而 是 收 集 到 某 个 后 台 缓 冲 区, 供 OpenGL 判 断 返 回 给 定 条 件 下 的 选 择 信 息 因 此, 在 设 置 了 选 择 缓 冲 区 之 后, 必 须 设 置 当 前 的 绘 图 模 式 为 选 择 模 式, 这 可 以 通 过 命 令 glrendermode 来 实 现, 给 定 参 数 为 GL_RENDER, 则 进 入 渲 染 模 式, 若 要 进 入 选 择 模 式, 则 设 置 参 数 为 GL_SELECT 注 意, 当 选 择 操 作 完 成 后, 应 该 再 次 使 用 glrendermode 返 回 到 默 认 的 绘 图 模 式 ( 渲 染 模 式 GL_RENDER), 并 由 此 让 OpenGL 将 选 择 信 息 写 入 选 择 缓 冲 区 3. 初 始 化 命 名 堆 栈 命 名 堆 栈 构 成 了 选 择 信 息 的 基 础 命 名 堆 栈 中 用 来 存 放 一 系 列 整 数, 每 个 整 数 作 为 某 个 图 元 的 标 识 ; 每 当 需 要 绘 制 下 一 个 图 元 供 OpenGL 判 断 其 是 否 被 选 中 之 前, 首 先 将 此 图 元 的 标 识 ( 整 数 ) 压 入 命 名 堆 栈, 这 样,OpenGL 便 会 知 道 其 后 绘 制 的 便 是 此 图 元, 经 计 算 之 后, 若 此 图 元 被 选 中, 则 命 名 堆 栈 中 此 图 元 的 标 识 便 会 返 回 到 选 择 缓 冲 区 中, 这 样, 通 过 提 取 选 择 缓 冲 区 中 的 命 名 堆 栈 的 内 容, 便 可 得 到 有 关 哪 个 图 元 被 选 中 的 信 息 在 使 用 命 名 堆 栈 之 前, 首 先 要 对 其 进 行 初 始 化 ( 置 空 ), 命 令 glinitnames 完 成 这 项 工 作, 它 不 需 要 参 数 4. 设 置 合 适 的 投 影 变 换 矩 阵 和 模 型 视 图 矩 阵 若 要 使 OpenGL 能 够 正 确 地 判 断 哪 个 图 元 被 选 中, 就 要 设 置 合 适 的 投 影 变 换 矩 阵 和 模 型 视 图 矩 阵, 使 得 在 选 择 模 式 下 的 绘 制 代 码 能 够 与 绘 图 模 式 下 的 相 吻 合, 因 此 这 里 设 置 的 投 影 变 换 矩 阵 和 模 型 视 图 矩 阵 应 该 与 在 绘 图 模 式 下 的 相 一 致 与 在 绘 图 模 式 下 惟 一 不 同 的 是, 在 此 要 设 置 另 外 一 个 矩 阵 拾 取 矩 阵 要 让 OpenGL 来 判 断 哪 个 图 元 被 选 中, 则 必 须 向 它 提 供 一 个 位 置 信 息 ( 通 常 便 是 鼠 标 的 位 置 ), 这 个 位 置 信 息 由 拾 取 矩 阵 来 表 达, 使 用 命 令 glupickmatrix 设 置 拾 取 矩 阵, 它 有 5 个 参 数 : 第 一 个 参 数 是 鼠 标 指 针 的 横 坐 标 x; 第 二 个 参 数 是 鼠 标 指 针 的 纵 坐 标 y( 注 意, OpenGL 中 的 二 维 坐 标 系 规 定 原 点 在 左 下 角, 因 此, 第 二 个 参 数 要 稍 微 变 换 一 下, 即 将 视 口 高 度 与 鼠 标 指 针 纵 坐 标 之 差 作 为 glupickmatrix 的 第 二 个 参 数 ); 第 三 个 参 数 是 靶 区 的 宽 度 ; 第 四 个 参 数 是 靶 区 的 高 度 ( 为 了 方 便 用 户 选 中 微 小 的 物 体, 将 鼠 标 指 针 扩 大 为 一 个 合 适 的 矩 形 区 域, 凡 是 与 这 个 区 域 相 交 的 图 元 便 被 选 中, 这 个 矩 形 区 域 就 称 为 靶 区 ); 第 五 个 参 数 是 一 个 含 有 4 个 元 素 的 整 型 数 组, 它 包 含 着 当 前 OpenGL 视 口 ( Viewport) 的 信 息, 即 左 上 角 x,y 坐 标 值, 视 口 的 宽 度 与 高 度 视 口 信 息 可 以 用 变 量 保 存, 在 窗 口 大 小 发 生 变 化 时 更 新, 也 可 以 通 过 OpenGL 提 供 的 函 数 glgetintegerv 临 时 获 得 5. 交 替 发 送 图 元 绘 制 命 令 以 及 命 名 堆 栈 操 作 命 令, 为 每 个 图 元 分 配 合 适 的 名 称 当 前 面 各 项 内 容 都 正 确 设 置 好 之 后, 便 可 以 将 集 合 中 每 个 图 元 依 次 进 行 绘 制, 供 OpenGL 计 算 相 关 的 选 择 信 息 第 5 章 139

153 计 算 机 图 形 学 140 在 绘 制 每 个 图 元 之 前, 首 先 要 将 此 图 元 的 标 识 ( 整 数 ) 压 入 命 名 堆 栈, 然 后 开 始 绘 制 ; 若 几 个 图 元 使 用 了 相 同 的 标 识, 则 OpenGL 将 这 几 个 图 元 作 为 一 个 整 体 进 行 计 算, 如 具 有 相 同 标 识 的 图 元 中 的 某 一 个 或 几 个 被 选 中, 则 其 标 识 会 返 回 到 选 择 缓 冲 区 中, 如 具 有 相 同 标 识 的 图 元 中 任 何 一 个 都 未 被 选 中, 则 此 标 识 不 返 回 到 选 择 缓 冲 区 中 ; 当 某 个 图 元 绘 制 完 成 之 后, 为 了 节 省 命 名 堆 栈 的 空 间, 应 将 其 标 识 从 命 名 堆 栈 中 弹 出 ( 这 并 不 影 响 OpenGL 的 计 算 ) 使 用 命 令 glpushname 将 某 个 图 元 的 标 识 压 入 命 名 堆 栈, 而 glpopname 则 负 责 将 当 前 栈 顶 元 素 弹 出 6. 切 换 回 渲 染 模 式 当 所 有 待 选 择 图 元 绘 制 完 毕 后, 便 可 以 让 OpenGL 进 行 计 算, 并 将 相 关 信 息 写 入 选 择 缓 冲 区 了, 这 需 要 再 次 调 用 函 数 glrendermode( 此 时 可 以 根 据 需 要 决 定 是 进 入 哪 种 模 式 : 渲 染 模 式 选 择 模 式 还 是 反 馈 模 式 ) 函 数 glrendermode 返 回 选 中 记 录 的 数 目 ( 整 数 ); 若 选 中 记 录 的 数 目 大 于 0, 那 么 选 择 缓 冲 区 中 就 已 经 包 含 了 相 关 的 选 择 信 息 ( 是 哪 些 标 识 被 选 中 了 ) 7. 分 析 选 择 缓 冲 区 中 数 据, 确 定 被 选 中 图 元 若 glrendermode 返 回 值 大 于 0, 说 明 有 图 元 被 选 中 了, 此 时, 选 择 缓 冲 区 中 包 含 了 一 个 个 选 中 记 录, 每 个 选 中 记 录 的 格 式 如 下 ( 对 应 于 某 个 图 元 被 选 中 时 的 情 形 ): 命 名 堆 栈 中 标 识 的 数 目 最 小 深 度 最 大 深 度 标 识 序 列 若 每 个 图 元 的 标 识 均 不 相 同, 每 个 图 元 选 中 记 录 中 的 标 识 数 应 为 1, 标 识 序 列 中 只 包 含 一 个 标 识, 即 被 选 中 的 图 元 的 标 识, 因 此, 选 择 缓 冲 区 的 格 式 为 : 1 最 小 深 度 最 大 深 度 标 识 1 最 小 深 度 最 大 深 度 标 识 最 小 最 大 深 度 可 以 帮 助 判 断 被 选 中 的 图 元 中 哪 个 在 最 上 面 ( 深 度 最 小 ), 最 后 需 要 的 便 是 选 择 缓 冲 区 中 深 度 最 小 的 那 个 图 元 的 标 识 ( 即 鼠 标 单 击 的 是 最 上 面 的 图 元 ) 这 样, 就 可 以 得 知 在 给 定 鼠 标 靶 区 的 范 围 内, 哪 个 图 元 被 选 中 了 习 题 5.1 了 解 图 形 交 互 技 术, 分 别 用 MFC 和 OpenGL 实 现 直 线 的 交 互 绘 图 5.2 用 GDI 绘 图 功 能, 编 制 一 个 二 维 图 形 显 示 控 制 功 能, 实 现 二 维 图 形 的 充 满 放 大 缩 小 和 平 移, 并 显 示 进 行 试 验 验 证 5.3 用 OpenGL 绘 图 功 能, 编 制 一 个 三 维 图 形 显 示 控 制 功 能, 实 现 充 满 放 大 缩 小 平 移

154 交 互 绘 图 技 术 和 旋 转 5.4 用 GDI 绘 图 功 能, 实 现 交 互 生 成 与 编 辑 二 维 点 和 直 线 的 功 能, 实 现 在 二 维 平 面 上 增 加 删 除 和 拖 动 点 和 直 线 5.5 用 OpenGL 绘 图 功 能, 实 现 交 互 生 成 与 编 辑 三 维 点 和 直 线 的 功 能, 实 现 在 指 定 空 间 平 面 上 增 加 删 除 和 拖 动 点 和 直 线 5.6 绘 制 一 个 3 行 4 列 的 汽 车 阵 列, 每 个 汽 车 由 一 个 简 单 多 面 体 构 成 的 车 身 和 4 个 圆 柱 体 车 轮 构 成, 每 个 车 轮 侧 面 要 求 绘 制 一 圈 六 棱 柱 形 的 螺 母, 在 此 基 础 上, 编 制 用 OpenGL 选 择 机 制 选 取 汽 车 车 轮 与 螺 丝 的 功 能, 每 次 鼠 标 按 下 将 鼠 标 点 取 的 对 象 信 息 显 示 出 来, 当 鼠 标 未 选 中 任 何 对 象 时, 显 示 未 选 中 ; 当 鼠 标 选 中 汽 车 车 身 时, 显 示 选 中 某 行 某 列 车 身 ; 当 鼠 标 选 中 汽 车 车 轮 时, 显 示 选 中 某 行 某 列 左 或 右 前 或 后 车 轮 ; 当 鼠 标 选 中 汽 车 车 轮 螺 母 时, 显 示 选 中 某 行 某 列 左 ( 或 右 ) 前 ( 或 后 ) 车 轮 第 几 个 螺 母 双 击 某 个 汽 车 前 轮 时, 要 求 能 够 改 变 前 轮 的 转 向 角 度 第 5 章 141

155 第 6 章 真 实 感 图 形 的 生 成 技 术 真 实 感 图 形 绘 制 是 计 算 机 图 形 学 研 究 的 重 要 内 容 之 一, 简 单 地 讲, 真 实 感 图 形 绘 制 就 是 借 助 数 学 物 理 计 算 机 等 学 科 的 知 识 在 计 算 机 二 维 显 示 屏 上 产 生 三 维 场 景 的 真 实 逼 真 图 像 图 形 的 过 程 真 实 感 图 形 绘 制 在 人 们 日 常 的 工 作 学 习 和 生 活 中 已 经 有 了 非 常 广 泛 的 应 用, 如 计 算 机 辅 助 设 计 多 媒 体 教 育 虚 拟 现 实 系 统 科 学 计 算 可 视 化 动 画 制 作 电 影 特 技 模 拟 计 算 机 游 戏 等 许 多 方 面, 都 可 以 看 到 真 实 感 图 形 在 其 中 发 挥 了 重 要 的 作 用, 而 且 人 们 对 于 计 算 机 在 视 觉 感 受 方 面 的 要 求 越 来 越 严 格, 这 就 需 要 研 究 更 多 更 逼 真 的 真 实 感 图 像 生 成 算 法 在 计 算 机 图 形 设 备 上 生 成 真 实 逼 真 的 图 像 图 形 需 要 经 过 以 下 4 个 步 骤 : 1 构 造 各 个 物 体 的 数 学 描 述 物 体 可 以 由 基 本 的 几 何 要 素 构 成, 如 点 线 多 边 形 等 2 将 各 个 物 体 安 放 在 给 定 参 考 坐 标 系 的 三 维 空 间 中 适 当 位 置 处, 由 此 构 成 场 景, 并 且 选 择 所 期 望 的 观 察 场 景 的 视 点 视 方 向 视 域 3 给 出 各 个 物 体 的 颜 色 信 息 物 体 的 颜 色 可 以 显 式 地 指 定, 也 可 以 由 特 定 的 光 照 条 件 决 定, 还 可 以 通 过 向 物 体 粘 贴 纹 理 来 获 得 4 将 各 个 物 体 的 数 学 描 述 和 它 们 相 关 的 颜 色 信 息 转 化 为 屏 幕 上 的 像 素 信 息 这 个 过 程 称 为 光 栅 化 为 了 使 光 栅 化 后 生 成 的 图 形 具 有 真 实 感, 在 这 个 过 程 中 应 该 将 被 其 他 物 体 遮 挡 的 不 可 见 面 ( 线 ) 消 隐, 并 且 可 见 面 的 颜 色 应 该 由 光 照 条 件 决 定, 即 根 据 基 于 光 学 物 理 的 光 照 模 型 计 算 可 见 面 投 射 到 观 察 者 眼 中 的 光 亮 度 大 小 为 了 使 绘 制 的 图 形 更 接 近 自 然 景 物, 可 以 在 应 用 光 照 模 型 时 将 特 定 的 花 纹 图 案 映 射 到 物 体 的 表 面 在 应 用 光 照 模 型 时 还 可 以 根 据 物 体 的 表 面 是 否 位 于 阴 影 区 内 来 改 变 相 应 光 源 的 光 照 效 果, 从 而 使 得 最 终 生 成 的 图 形 具 有 阴 影 的 效 果 下 面 各 节 将 对 上 面 提 到 的 消 除 隐 藏 面 ( 线 ) 技 术, 以 及 确 定 可 见 面 颜 色 的 光 照 技 术 物 体 表 面 细 节 模 拟 技 术 阴 影 生 成 技 术 进 行 介 绍 本 章 还 讨 论 了 真 实 感 图 形 生 成 过 程 中 的 图 形 反 走 样 技 术 最 后 介 绍 如 何 利 用 OpenGL 图 形 库 生 成 真 实 感 图 形

156 真 实 感 图 形 的 生 成 技 术 消 隐 技 术 的 综 合 介 绍 6.1 消 隐 技 术 第 6 章 143 将 三 维 场 景 绘 制 在 计 算 机 二 维 显 示 屏 上 必 须 经 过 投 影 变 换, 比 如, 将 多 面 体 的 顶 点 按 某 种 方 式 投 影 到 二 维 平 面 上, 然 后 按 照 原 有 的 拓 扑 连 接 关 系 连 接 各 个 投 影 点 即 可 将 多 面 体 绘 制 出 来 投 影 变 换 将 三 维 信 息 变 换 到 二 维 平 面 上, 这 个 过 程 中 深 度 信 息 被 丢 失, 生 成 的 图 形 往 往 具 有 二 义 性, 如 图 6 唱 1(a) 通 过 判 别 当 前 观 察 方 向 下 的 可 见 线 和 可 见 面, 然 后 只 显 示 可 见 线 与 可 见 面 可 以 消 除 图 形 的 二 义 性, 如 图 6 唱 1(b),6 唱 1(c) 在 计 算 机 图 形 学 研 究 的 早 期, 判 别 可 见 面 的 算 法 又 被 称 为 消 除 隐 藏 线 消 除 隐 藏 面 算 法 图 6 唱 1 图 形 具 有 二 义 性 判 别 可 见 面 算 法 通 常 可 以 按 照 它 们 在 实 现 时 所 基 于 的 坐 标 系 分 为 物 空 间 算 法 和 像 空 间 算 法 物 空 间 算 法 是 在 定 义 描 述 物 体 的 世 界 坐 标 系 中 实 现 的 它 以 场 景 中 的 物 体 为 处 理 单 元, 可 描 述 如 下 : for( 场 景 中 的 每 一 个 物 体 ) { 将 其 与 场 景 中 的 其 他 物 体 比 较, 确 定 其 表 面 的 可 见 部 分 ; 显 示 该 物 体 表 面 的 可 见 部 分 ; } 物 空 间 算 法 具 有 很 高 的 精 度, 通 常 与 机 器 的 精 度 相 同, 因 而 物 空 间 算 法 在 对 精 度 要 求 较 高 的 工 程 应 用 方 面 特 别 有 用 像 空 间 算 法 是 在 观 看 物 体 的 屏 幕 坐 标 系 下 实 现 的, 它 以 窗 口 内 的 每 个 像 素 为 处 理 单 元, 可 描 述 如 下 : for( 窗 口 内 的 每 一 个 像 素 ) { 确 定 与 此 像 素 对 应 的 距 离 视 点 最 近 的 物 体, 以 该 物 体 表 面 的 颜 色 来 显 示 像 素 ; } 像 空 间 算 法 的 计 算 仅 局 限 于 屏 幕 的 分 辨 率, 比 如 , 这 通 常 是 很 粗 糙 的 物

157 计 算 机 图 形 学 144 空 间 算 法 和 像 空 间 算 法 一 个 显 著 区 别 在 于 算 法 所 需 要 的 计 算 量 不 同 假 设 场 景 中 有 k 个 物 体, 平 均 每 个 物 体 表 面 由 h 个 多 边 形 构 成, 显 示 区 域 中 有 m n 个 像 素, 则 物 空 间 算 法 需 要 的 计 算 量 为 ( kh) ( kh), 而 像 空 间 算 法 所 需 要 的 计 算 量 为 ( mn) ( kh), 其 中 mn 冲 kh 理 论 上 讲, 物 空 间 算 法 的 计 算 量 少 于 像 空 间 算 法 的 计 算 量, 因 为 mn 冲 kh, 于 是 绝 大 多 数 的 算 法 似 乎 应 该 在 物 空 间 实 现 但 实 际 上, 并 不 是 这 回 事 所 有 的 判 别 可 见 面 算 法 都 离 不 开 排 序, 物 体 距 视 点 越 远, 则 它 越 有 可 能 被 距 视 点 近 的 物 体 部 分 或 全 部 遮 挡, 因 此 排 序 一 般 是 基 于 体 面 边 或 点 到 视 点 的 距 离 判 别 可 见 面 算 法 的 效 率 很 大 程 度 上 取 决 于 排 序 的 效 率 而 以 扫 描 线 的 方 式 实 现 像 空 间 算 法 时 容 易 利 用 连 贯 性 质 从 而 使 得 像 空 间 算 法 更 具 效 率 这 里 连 贯 性 指 的 是 物 体 特 征 的 变 化 趋 势 具 有 局 部 不 变 性 提 高 消 隐 算 法 效 率 的 常 见 方 法 有 利 用 连 贯 性 包 围 盒 技 术 背 面 剔 除 区 域 分 割 技 术 物 体 分 层 表 示 等, 由 此 人 们 提 出 了 许 多 的 判 别 可 见 面 算 法, 如 画 家 算 法 Z 缓 冲 器 算 法 扫 描 线 算 法 Warnock 算 法 等 等 需 要 指 出 的 是, 在 进 行 真 实 感 图 形 绘 制 时, 光 照 计 算 纹 理 映 射 技 术 都 要 融 合 到 消 隐 算 法 中, 确 切 地 讲 就 是 在 利 用 消 隐 技 术 确 定 像 素 所 对 应 的 物 体 上 可 见 点 后, 需 要 利 用 光 照 计 算 纹 理 映 射 技 术 计 算 出 该 点 的 颜 色 接 下 来 的 两 小 节 分 别 介 绍 了 多 面 体 隐 藏 线 消 除 和 Z 缓 冲 器 消 隐 算 法 多 面 体 隐 藏 线 消 除 多 面 体 是 由 表 面 多 边 形 构 成 的 表 面 多 边 形 可 以 是 凹 的, 凸 的, 还 可 以 是 带 孔 的 讨 论 多 面 体 隐 藏 线 消 除 问 题 时, 总 是 假 定 多 面 体 是 用 线 框 方 式 表 示 的, 并 且 如 果 存 在 多 个 多 面 体, 则 多 面 体 之 间 是 互 不 相 交 的 隐 藏 线 的 产 生 是 因 为 在 给 定 的 观 察 方 向 下, 某 些 棱 ( 或 棱 的 一 部 分 ) 被 表 面 多 边 形 的 遮 挡 成 为 不 可 见, 因 此 多 面 体 隐 藏 线 消 除 可 以 归 结 为 一 个 根 本 问 题 : 在 给 定 的 观 察 方 向 下, 给 定 一 条 空 间 线 段 P 1 P 2 和 一 个 多 边 形 π, 判 断 线 段 是 否 被 多 边 形 遮 挡 如 果 遮 挡, 求 出 遮 挡 部 分 基 于 前 面 的 假 定, 这 里 的 线 段 P 1 P 2 和 多 边 形 π 在 空 间 中 是 不 相 交 的 这 个 问 题 可 以 按 下 面 的 步 骤 求 解 : 1 将 线 段 P 1 P 2 和 多 边 形 π 投 影 到 投 影 平 面 上 得 到 线 段 P 1 P 2 和 多 边 形 π 2 计 算 线 段 P 1 P 2 和 多 边 形 π 各 条 边 的 交 点 3 交 点 将 P 1 P 2 分 成 若 干 个 子 线 段, 特 别 地 当 交 点 不 存 在 时, 子 线 段 只 有 一 个, 即 P 1 P 2 自 身 现 在 每 个 子 线 段 上 的 所 有 点 具 有 相 同 的 隐 藏 性 4 分 别 判 断 各 个 子 线 段 的 隐 藏 性 取 子 线 段 的 中 点, 判 断 该 点 是 否 在 多 边 形 π 内 如 果 不 在 多 边 形 内, 则 说 明 子 线 段 与 多 边 形 π 是 分 离 的, 不 存 在 隐 藏 关 系, 因 而 该 子

158 真 实 感 图 形 的 生 成 技 术 线 段 是 可 见 的 如 果 在 多 边 形 内, 则 说 明 子 线 段 在 多 边 形 π 内, 子 线 段 可 能 完 全 可 见, 也 可 能 完 全 隐 藏, 需 要 进 一 步 判 断 这 时 从 子 线 段 中 点 ( 对 应 P 1 P 2 上 的 点 ) 向 视 点 引 射 线, 如 果 射 线 与 多 边 形 π 相 交, 则 该 子 线 段 被 多 边 形 隐 藏, 否 则 该 子 线 段 可 见 上 面 的 算 法 求 出 的 是 线 段 P 1 P 2 被 一 个 多 边 形 遮 挡 的 部 分, 当 线 段 P 1 P 2 用 参 数 形 式 P(t) =(P 2 -P 1 )t +P 1 表 示 时 ( 其 中 0 t 1), 这 些 遮 挡 部 分 可 以 表 示 为 参 数 区 间 [0,1] 的 若 干 个 子 区 间 在 进 行 多 面 体 隐 藏 线 消 除 时, 线 段 P 1 P 2 视 为 多 面 体 的 一 条 棱, 它 与 所 有 的 多 面 体 表 面 多 边 形 依 次 进 行 上 面 的 隐 藏 性 判 别, 记 下 各 个 多 边 形 所 遮 挡 的 参 数 子 区 间, 最 后 对 这 些 区 间 进 行 并 集 运 算, 就 可 以 确 定 这 条 棱 总 的 隐 藏 子 线 段 的 位 置, 进 而 确 定 可 见 子 线 段 如 图 6 唱 2 所 示 第 6 章 145 图 6 唱 2 可 见 子 线 段 的 确 定 注 意 到 线 段 和 一 个 多 边 形 进 行 隐 藏 性 判 断 时, 涉 及 到 的 运 算 包 括 投 影 变 换, 平 面 上 线 段 和 多 边 形 的 求 交, 判 断 点 是 否 在 多 边 形 内, 空 间 中 射 线 和 平 面 求 交 如 果 将 多 面 体 的 每 条 棱 与 每 个 多 边 形 都 按 上 面 的 方 法 消 除 隐 藏 线, 那 么 计 算 量 将 非 常 大 事 实 上, 可 以 采 取 预 先 消 除 自 隐 藏 线 面, 进 行 深 度 测 试 和 包 围 盒 测 试 来 减 少 大 量 不 必 要 的 复 杂 运 算 1. 消 除 自 隐 藏 线 隐 藏 面 首 先 介 绍 多 面 体 表 面 多 边 形 内 法 向 量 的 概 念 假 设 某 表 面 多 边 形 所 在 平 面 方 程 为 : ax +by +cz +d =0 可 以 调 整 系 数 的 符 号, 使 得 位 于 物 体 所 在 一 侧 的 某 P 0 ( x 0,y 0,z 0 ) 点 ( 比 如 物 体 的 重 心 ) 有 : ax 0 +by 0 +cz 0 +d >0 这 时 平 面 法 向 量 (a,b,c) 必 是 指 向 物 体 内 部 的, 这 个 法 向 量 称 为 该 表 面 多 边 形 的 内 法 向 量 事 实 上, 设 P(x,y,z ) 为 P 0 在 这 个 表 面 多 边 形 所 在 平 面 上 的 垂 足, 则 有 : ax +by +cz +d =0, 并 且 P 0 -P 是 指 向 物 体 内 部 的 平 面 法 向 量 此 时, ( a,b,c) (P 0 -P) =ax 0 +by 0 +cz 0 +d -( ax +by +cz +d) >0

159 计 算 机 图 形 学 146 这 说 明 (a,b,c) 和 (P 0 -P) 的 夹 角 小 于 90, 又 ( a,b,c) 和 ( P 0 -P) 都 是 平 面 的 法 向 量, 二 者 夹 角 只 能 是 0 或 180, 所 以 (a,b,c) 和 (P 0 -P) 的 夹 角 只 能 为 0, 即 向 量 ( a,b,c) 和 向 量 (P 0 -P) 一 样 也 是 指 向 物 体 内 部 的 可 以 按 照 这 种 方 法 求 出 多 面 体 表 面 各 多 边 形 的 内 法 向 量, 当 视 线 与 某 个 多 边 形 的 内 法 向 量 夹 角 余 弦 大 于 0, 则 这 个 多 边 形 称 为 朝 前 的 面, 朝 前 的 面 是 潜 在 可 见 面, 它 可 能 完 全 可 见, 也 可 能 被 其 他 的 多 边 形 遮 挡 成 为 部 分 可 见 或 完 全 隐 藏 ; 当 这 个 夹 角 余 弦 小 于 0, 则 这 个 多 边 形 称 为 朝 后 的 面, 朝 后 的 面 是 自 隐 藏 面, 这 是 因 为 物 体 表 面 是 封 闭 的, 朝 后 的 面 总 是 被 朝 前 的 面 所 遮 挡, 从 而 始 终 是 不 可 见 的 两 个 自 隐 藏 面 的 交 线 为 自 隐 藏 线 显 然 在 多 面 体 的 消 隐 问 题 中, 不 会 仅 由 于 自 隐 藏 面 的 遮 挡, 导 致 某 条 棱 的 不 可 见, 因 此 在 进 行 多 面 体 的 消 隐 时 可 以 将 自 隐 藏 面 全 部 去 掉, 而 不 考 虑 它 们 对 棱 的 遮 挡 性 另 外 也 无 需 对 所 有 的 棱 进 行 隐 藏 性 判 别, 因 为 自 隐 藏 线 总 是 不 可 见 的, 因 此 只 需 要 对 潜 在 可 见 面 的 边 进 行 隐 藏 性 判 别 2. 深 度 测 试 深 度 测 试 指 的 是 在 观 察 坐 标 系 下 判 断 线 段 与 多 边 形 的 前 后 关 系 不 失 一 般 性, 假 设 视 点 为 观 察 坐 标 系 原 点, 视 线 方 向 沿 观 察 坐 标 系 Z 轴 负 向, 以 下 的 讨 论 在 观 察 坐 标 系 中 进 行 深 度 测 试 可 以 分 为 粗 略 测 试 和 精 确 测 试 两 步 首 先 进 行 粗 略 测 试, 即 把 多 边 形 顶 点 的 最 大 Z 坐 标 和 线 段 端 点 的 最 小 Z 坐 标 进 行 比 较 如 果 前 者 小 于 或 等 于 后 者, 则 说 明 多 边 形 完 全 在 线 段 之 后, 多 边 形 不 可 能 对 线 段 造 成 任 何 遮 挡, 线 段 完 全 可 见, 无 需 就 线 段 和 多 边 形 的 遮 挡 关 系 进 行 进 一 步 判 断 ; 如 果 前 者 大 于 后 者, 这 时 线 段 仍 有 可 能 完 全 位 于 多 边 形 之 前, 可 以 采 用 精 确 测 试 予 以 判 断 : 从 线 段 两 端 点 P 1 (x 1,y 1,z 1 ) 和 P 2 (x 2,y 2,z 2 ) 各 做 一 条 与 Z 轴 平 行 的 直 线, 假 设 这 两 条 直 线 与 多 边 形 所 在 平 面 的 交 点 分 别 为 M 1 (x 1,y 1,z 1 ) M 2 (x 2,y 2,z 2 ), 若 z 1 z 1 且 z 2 z 2, 则 多 边 形 不 会 对 线 段 造 成 任 何 遮 挡, 线 段 完 全 可 见, 无 需 就 线 段 和 多 边 形 的 遮 挡 关 系 进 行 进 一 步 判 断 否 则, 要 按 前 面 介 绍 的 步 骤 将 线 段 和 多 边 形 投 影 到 投 影 平 面 上, 进 行 线 段 和 多 边 形 求 交 等 诸 多 运 算 最 终 确 定 被 多 边 形 隐 藏 的 子 线 段 ( 如 果 存 在 的 话 ) 3. 包 围 盒 测 试 包 围 盒 测 试 是 在 投 影 平 面 上 线 段 和 多 边 形 求 交 之 前 进 行 的 在 投 影 平 面 上, 线 段 或 多 边 形 的 包 围 盒 是 包 含 它 们 的 边 平 行 于 投 影 平 面 坐 标 轴 的 最 小 矩 形, 这 个 矩 形 可 以 由 4 个 参 数 x min,x max,y min,y max 表 示 设 线 段 和 多 边 形 的 包 围 盒 参 数 分 别 为 : x min 1,x max 1,y min 1,y max 1 与 x min 2,x max 2,y min 2,y max 2 当 它 们 满 足 x min 1 >x max 2 或 y min 1 >y max 2 或 x max 1 <x min 2 或 y max 1 <y min 2 时, 这 两 个 包 围 盒 不 相 交, 从 而 线 段 和 多 边 形 也 不 相 交 如 图 6 唱 3 所 示 图 6 唱 3 包 围 盒 测 试

160 真 实 感 图 形 的 生 成 技 术 显 然 这 时 多 边 形 不 会 对 线 段 造 成 任 何 遮 挡, 线 段 完 全 可 见, 无 需 就 线 段 和 多 边 形 的 遮 挡 关 系 进 行 进 一 步 判 断 如 果 包 围 盒 测 试 的 上 述 条 件 不 满 足, 则 只 能 在 投 影 平 面 上 将 线 段 和 多 边 形 进 行 求 交 运 算, 进 而 判 断 各 个 子 线 段 相 对 多 边 形 的 隐 藏 性 最 后, 这 里 讨 论 的 多 面 体 隐 藏 线 的 消 除 算 法 思 路 可 以 完 整 地 描 述 如 下 : hidden_line_removal() { for(i =1 ; i <=NF; i ++) / 倡 NF 是 所 有 多 面 体 表 面 多 边 形 的 个 数 倡 / { 求 第 i 个 表 面 多 边 形 的 内 法 向 量 ; 计 算 视 线 与 这 个 内 法 向 量 的 夹 角 余 弦 ; if( 上 述 夹 角 余 弦 大 于 0, 即 第 i 个 表 面 多 边 形 是 潜 在 可 见 面 ) { 把 当 前 多 边 形 送 入 潜 在 可 见 面 集 合 ; 把 当 前 多 边 形 的 各 条 边 送 入 潜 在 可 见 线 段 集 合 ; / 倡 注 意 如 果 某 条 边 已 经 在 集 合 中, 则 不 必 再 次 加 入 倡 / } } / 倡 至 此, 产 生 了 一 个 潜 在 可 见 面 集 合, 假 设 面 的 个 数 为 NF1 还 产 生 了 一 个 潜 倡 / / 倡 在 可 见 线 段 集 合, 假 设 线 段 的 个 数 为 NE 不 属 于 潜 在 可 见 线 段 集 合 的 其 他 多 倡 / / 倡 面 体 棱 是 自 隐 藏 线, 其 不 可 见 性 不 言 而 喻 接 下 来 要 为 潜 在 可 见 线 段 集 合 中 的 倡 / / 倡 每 一 条 线 段 与 潜 在 可 见 面 集 合 中 的 每 一 个 多 边 形 进 行 隐 藏 性 判 别 倡 / for(j =1; j <=NE; j ++) / 倡 对 每 一 条 潜 在 可 见 线 段 进 行 处 理 倡 / { for(k =1; k <NF1; k ++) / 倡 线 段 j 与 每 一 个 潜 在 可 见 多 边 形 进 行 隐 藏 性 判 别 倡 / { 在 观 察 坐 标 系 下, 潜 在 可 见 线 段 j 和 潜 在 可 见 多 边 形 k 进 行 深 度 测 试 if( 深 度 测 试 中 的 粗 略 测 试 或 精 确 测 试 通 过 ) { 深 度 测 试 表 明 多 边 形 不 会 对 线 段 造 成 任 何 遮 挡, 线 段 j 相 对 于 当 前 多 边 形 的 隐 藏 子 区 间 不 存 在 } else { 将 线 段 j 和 多 边 形 k 变 换 到 投 影 平 面 上 二 者 进 行 包 围 盒 测 试 if( 包 围 盒 测 试 表 明 二 者 是 分 离 的 ) { 多 边 形 不 会 对 线 段 造 成 任 何 遮 挡, 线 段 j 相 对 于 当 前 多 边 形 的 隐 藏 子 区 间 不 存 在 } 第 6 章 147

161 计 算 机 图 形 学 148 } } else { 按 照 本 节 最 开 始 提 出 的 根 本 问 题 的 求 解 步 骤 2~4, 计 算 并 记 录 线 段 j 被 当 前 多 边 形 遮 挡 的 子 线 段 位 置 } } } 对 线 段 j 被 各 个 潜 在 可 见 多 边 形 隐 藏 的 子 线 段 位 置 求 并 运 算, 获 得 线 段 j 最 终 的 隐 藏 子 线 段 以 及 可 见 子 线 段 Z 缓 冲 器 消 隐 算 法 Z 缓 冲 器 消 隐 算 法 是 最 简 单 的 消 除 隐 藏 面 算 法 之 一 在 这 个 算 法 里, 除 了 有 一 个 帧 缓 冲 区 用 来 存 放 每 个 像 素 的 亮 度 值, 还 要 有 一 个 Z 缓 冲 区 用 来 存 放 每 个 像 素 的 深 度 值 帧 缓 冲 区 和 Z 缓 冲 区 的 存 储 单 元 数 目 相 同, 并 且 都 等 于 屏 幕 上 像 素 的 个 数, 见 图 6 唱 4 当 颜 色 用 RGB 值 表 示 时, 帧 缓 冲 区 每 个 单 元 的 位 数 可 以 是 24bits 由 于 Z 缓 冲 区 中 每 个 单 元 存 储 的 是 相 应 像 素 所 对 应 物 体 上 的 点 在 观 察 坐 标 系 下 的 z 坐 标 值, 因 而 每 个 单 元 的 位 数 取 决 于 场 景 在 观 察 坐 标 系 下 z 方 向 的 变 化 范 围, 一 般 取 20bits 可 以 满 足 需 要, 更 精 确 的 可 以 取 float 数 据 类 型 所 占 的 位 数 图 6 唱 4 Z 缓 冲 区 示 意 图 不 失 一 般 性, 假 设 视 点 为 观 察 坐 标 系 原 点, 视 线 方 向 沿 观 察 坐 标 系 z 轴 负 向 Z 缓 冲 区 算 法 的 流 程 为 : 帧 缓 冲 区 置 成 背 景 色 ; Z 缓 冲 区 置 成 某 初 始 值, 该 值 比 场 景 在 观 察 坐 标 系 下 的 最 小 z 值 还 小 ; for( 各 个 多 边 形 ) { 扫 描 转 换 该 多 边 形 ;

162 } for( 多 边 形 所 覆 盖 的 每 个 像 素 (x,y)) { } 计 算 该 像 素 所 对 应 多 边 形 上 的 点 在 观 察 坐 标 系 下 的 z 坐 标 值 Z(x,y); if(z(x,y) 大 于 Z 缓 冲 区 在 (x,y) 处 的 值 ) { } Z 缓 冲 区 中 (x,y) 处 深 度 值 替 换 为 Z(x,y); 帧 缓 冲 区 中 (x,y) 处 亮 度 值 替 换 为 多 边 形 在 (x,y) 处 的 亮 度 值 ; 真 实 感 图 形 的 生 成 技 术 第 6 章 149 如 果 是 平 行 投 影, 则 上 述 过 程 中 计 算 像 素 所 对 应 多 边 形 上 的 点 在 观 察 坐 标 系 下 的 z 坐 标 值 可 以 用 增 量 方 法 求 出 事 实 上, 假 设 平 面 在 观 察 坐 标 系 下 的 方 程 为 : ax +by +cz +d =0 则 投 影 平 面 上 (x 0,y 0 ) 处 对 应 多 边 形 上 的 点 的 z 值 为 : z 0 =( -d -ax 0 -by 0 )/c 屏 幕 上 同 一 行 中 两 相 邻 像 素 x 坐 标 相 差 为 1, 对 应 到 投 影 平 面 上 的 两 点 只 是 x 坐 标 相 差 一 个 常 量 Δx, 投 影 平 面 上 (x 0 +Δx,y 0 ) 处 对 应 多 边 形 上 的 点 的 z 值 为 : z =[ -d -a(x 0 +Δx) -by 0 ]/c =z 0 -( a /c)δx 这 里 a /c 为 常 数, 所 以 计 算 同 一 行 中 相 邻 像 素 的 深 度 值 只 需 要 做 一 次 减 法 在 Z 缓 冲 器 算 法 中, 多 边 形 的 绘 制 次 序 是 无 关 紧 要 的, 其 基 本 思 想 就 是 在 像 素 级 上 以 近 物 取 代 远 物, 因 此 有 利 于 硬 件 实 现 由 于 除 了 帧 缓 冲 器 外, 还 要 有 一 个 Z 缓 冲 器, 因 此 Z 缓 冲 器 消 隐 算 法 的 实 现 需 要 较 多 的 存 储 空 间 简 单 光 照 模 型 6.2 光 照 技 术 在 利 用 消 隐 技 术 确 定 了 像 素 所 对 应 的 物 体 上 的 可 见 点 后, 需 要 计 算 该 可 见 点 的 颜 色 并 赋 给 当 前 像 素 如 果 可 见 点 取 预 先 指 定 的 物 体 的 颜 色, 则 绘 制 出 来 的 图 形 即 使 经 过 消 隐, 大 多 数 物 体 看 起 来 也 不 像 是 三 维 的, 更 谈 不 上 真 实 性, 如 图 6 唱 5(b) 所 示 事 实 上, 物 体 表 面 所 呈 现 的 颜 色 是 由 表 面 向 视 线 方 向 辐 射 进 入 人 眼 中 的 光 决 定 的 颜 色 是 可 见 光 的 一 种 视 觉 特 性, 光 谱 分 布 表 示 了 一 束 光 中 不 同 波 长 光 所 占 的 比 例, 它 是 波 长 的 函 数, 它 惟 一 决 定 了 相 应 可 见 光 的 颜 色 比 如, 由 表 面 辐 射 而 进 入 人 眼 的 光 中 如 果 等 量 地 包 含 了 所 有 波 长 的 可 见 光, 则 物 体 表 面 将 呈 现 白 色 灰 色 或 黑 色, 即 非 彩 色 否 则 物

163 计 算 机 图 形 学 150 体 表 面 将 呈 现 彩 色 在 光 学 物 理 中, 光 亮 度 ( luminance) 是 一 光 谱 量, 既 可 以 表 示 光 能 大 小, 又 可 以 表 示 色 彩 组 成, 它 可 以 很 方 便 地 转 换 成 颜 色 如 果 能 建 立 一 些 数 学 模 型 来 模 拟 物 体 表 面 的 光 照 明 物 理 现 象, 然 后 按 照 数 学 模 型 计 算 物 体 表 面 向 视 线 方 向 辐 射 进 入 人 眼 中 的 光 亮 度, 即 可 获 得 像 素 所 对 应 的 物 体 上 的 可 见 点 的 颜 色, 这 样 绘 制 出 来 的 图 形 具 有 较 强 的 真 实 感, 如 图 6 唱 5(a) 所 示 这 些 数 学 模 型 就 称 为 明 暗 效 应 模 型 或 者 光 照 明 模 型 当 光 照 射 到 物 体 表 面 时, 光 可 能 被 吸 收 反 射 和 透 射, 被 物 体 吸 收 的 部 分 转 化 为 热, 只 有 反 射 透 射 的 光 能 够 进 入 人 眼 产 生 视 觉 效 果, 它 们 决 定 了 物 体 所 呈 现 的 颜 色 如 果 物 体 是 不 透 明 的, 则 透 射 光 不 存 在, 物 体 的 颜 色 仅 由 反 射 光 决 定 这 种 情 形 正 是 简 单 光 照 模 型 需 要 考 虑 的, 简 单 光 照 模 型 只 考 察 光 源 直 接 照 射 下 物 体 表 面 的 反 射 情 况 通 常, 物 体 表 面 的 反 射 光 可 以 认 为 包 含 3 个 分 量, 对 环 境 光 的 反 射, 对 特 定 光 源 的 漫 反 射 和 镜 面 反 射 下 面 的 讨 论 假 定 光 源 为 单 个 点 光 源 图 6 唱 5 球 的 绘 制 对 环 境 光 的 反 射 按 理, 没 有 被 光 源 直 接 照 射 的 物 体 看 起 来 应 该 是 黑 色 的, 但 是 在 实 际 场 景 中, 并 不 是 这 样 的, 这 是 因 为 物 体 仍 然 接 收 到 了 来 自 周 围 环 境 ( 如 墙 面 ) 散 射 的 光 因 此 环 境 光 (ambient light) 用 来 模 拟 光 在 物 体 间 相 互 传 播 的 效 果 环 境 光 被 认 为 在 空 间 近 似 均 匀 分 布, 即 在 任 何 位 置 任 何 方 向 上 光 亮 度 一 样, 并 且 入 射 至 物 体 表 面 后 将 向 空 间 各 个 方 向 均 匀 反 射 出 去 物 体 对 环 境 光 的 反 射 分 量 可 以 用 式 (6 唱 1) 表 示 : I =K a I a 0 K a 1 (6 唱 1) 其 中, I a 是 入 射 的 环 境 光 亮 度,K a 是 环 境 光 漫 反 射 系 数, 它 与 物 体 表 面 性 质 有 关 如 果 简 单 光 照 模 型 中 仅 考 虑 环 境 光 的 反 射 分 量, 则 物 体 表 面 的 亮 度 是 一 个 恒 定 值, 没 有 明 暗 的 自 然 过 渡 漫 反 射 (diffuse reflection) 漫 反 射 分 量 表 示 特 定 光 源 在 物 体 表 面 的 反 射 光 中 那 些 向 空 间 各 个 方 向 均 匀 反 射 出 去 的 光, 见 图 6 唱 6(a) 就 向 空 间 各 个 方 向 均 匀 反 射 出 去 这 一 性 质 而 言, 漫 反 射 和 环 境 光 反 射 是 相 同 的, 不 同 之 处 在 于 漫 反 射 分 量 大 小 与 光 的 入 射 方 向 和

164 真 实 感 图 形 的 生 成 技 术 物 体 表 面 法 矢 夹 角 有 关 兰 伯 特 ( Lambert) 余 弦 定 律 指 出 : 当 点 光 源 照 射 到 一 个 漫 反 射 体 时, 其 表 面 反 射 光 亮 度 和 光 源 入 射 角 ( 入 射 光 线 和 表 面 法 矢 量 的 夹 角 ) 的 余 弦 成 正 比, 即 : I =K d I l cos(θ) 0 θ π 2, 0 K d 1 (6 唱 2) 其 中, I l 是 来 自 点 光 源 的 入 射 光 亮 度 K d 是 漫 反 射 系 数, 与 物 体 表 面 性 质 有 关 θ 是 入 射 光 线 和 表 面 法 矢 量 的 夹 角 如 果 简 单 光 照 模 型 中 考 虑 对 环 境 光 的 反 射 分 量 和 对 特 定 光 源 的 漫 反 射 分 量, 则 物 体 表 面 的 反 射 光 亮 度 为 : I =K a I a +K d I l cos(θ) 0 θ π 2, 0 K a +K d 1 (6 唱 3) 第 6 章 151 通 常 称 之 为 兰 伯 特 反 射 光 照 模 型 上 式 中, 如 果 θ> π 2, 则 物 体 该 处 的 表 面 不 能 被 光 源 直 接 照 射, 漫 反 射 分 量 为 0, 物 体 表 面 的 反 射 光 亮 度 仅 由 环 境 光 反 射 亮 度 决 定 对 于 许 多 粗 糙 无 光 泽 的 物 体, 如 粉 笔 黑 板, 使 用 上 式 计 算 物 体 表 面 的 反 射 光 是 可 行 的, 但 是 对 于 那 些 具 有 光 滑 的 表 面 的 物 体, 如 擦 亮 的 金 属 光 滑 的 塑 料, 使 用 上 式 计 算 反 射 光 亮 度 最 终 绘 制 出 来 的 图 像 给 人 的 感 觉 比 较 呆 板, 没 有 表 现 出 特 有 的 光 泽, 即 所 谓 的 高 光 图 6 唱 6 光 学 反 射 模 型 镜 面 反 射 (specular reflection) 镜 面 反 射 分 量 表 示 特 定 光 源 在 物 体 表 面 的 反 射 光 中 那 些 遵 循 反 射 定 律 的 光 对 于 纯 镜 面, 入 射 光 是 严 格 按 照 光 的 反 射 定 律 反 射 出 去, 即 反 射 光 和 入 射 光 对 称 地 分 布 在 表 面 法 向 的 两 侧, 如 图 6 唱 6(b) 所 示 对 于 一 般 光 滑 表 面, 表 面

165 计 算 机 图 形 学 152 可 理 解 为 由 许 多 朝 向 不 同 的 微 小 平 面 构 成, 入 射 光 经 许 多 微 小 平 面 反 射 后 形 成 的 反 射 光 不 再 是 单 向 的, 而 是 分 布 于 理 想 镜 面 反 射 方 向 的 周 围, 如 图 6 唱 6(c) 所 示 通 常 采 用 余 弦 函 数 的 幂 次 来 模 拟 一 般 光 滑 表 面 的 镜 面 反 射 光 的 空 间 分 布 I =K s I l cos n (α) 0 α π (6 唱 4) 2 其 中,I l 是 来 自 点 光 源 的 入 射 光 亮 度 K s 是 物 体 表 面 镜 面 反 射 系 数, 严 格 地 讲,K s 和 入 射 角 波 长 有 关, 但 是 为 了 计 算 的 方 便, 实 际 使 用 时 K s 取 为 常 量 α 为 理 想 镜 面 反 射 方 向 与 视 线 方 向 的 夹 角, 见 图 6 唱 6(d) n 为 镜 面 反 射 光 的 会 聚 指 数 上 式 表 明, 当 会 聚 指 数 n 恒 定 时, 随 视 线 与 理 想 镜 面 反 射 方 向 夹 角 α 增 大, 进 入 观 察 者 眼 中 的 镜 面 反 射 光 亮 度 越 小 当 视 线 与 理 想 镜 面 反 射 方 向 夹 角 α 恒 定 时, 物 体 表 面 的 镜 面 反 射 光 的 会 聚 指 数 n 越 大, 进 入 观 察 者 眼 中 的 镜 面 反 射 光 亮 度 越 小 如 果 简 单 光 照 模 型 中 考 虑 对 环 境 光 的 反 射 分 量 对 特 定 光 源 的 漫 反 射 分 量 和 镜 面 反 射 分 量, 则 物 体 表 面 的 反 射 光 亮 度 为 : I =K a I a +K d I lcos(θ) +K si lcos n (α) (6 唱 5) 这 就 是 通 常 人 们 所 说 的 Phong 光 照 模 型 利 用 上 式 计 算 像 素 所 对 应 的 物 体 上 可 见 点 的 亮 度 最 终 生 成 的 图 像 可 以 表 现 光 滑 物 体 应 有 的 光 泽, 即 高 光, 这 是 因 为 镜 面 反 射 分 量 的 缘 故, 并 且 和 实 际 情 况 一 样, 高 光 区 域 随 视 点 方 向 而 改 变 实 际 上 光 的 亮 度 与 传 播 距 离 的 平 方 成 反 比, 因 此 当 以 上 公 式 中 的 I l 明 确 为 光 源 处 的 光 亮 度, 则 光 线 抵 达 物 体 表 面 时 应 该 存 在 衰 减 的 问 题, 另 外 光 线 经 物 体 表 面 反 射 进 入 观 察 者 眼 睛 的 过 程 中 也 应 该 存 在 衰 减 的 问 题, 这 时 可 以 考 虑 给 特 定 光 源 引 起 的 漫 反 射 分 量 和 镜 面 反 射 分 量 乘 以 一 个 衰 减 因 子, 以 取 得 远 的 物 体 看 起 来 暗 些 的 效 果 当 场 景 的 投 影 变 1 换 采 用 透 视 投 影 时,Warnock 指 出 线 性 衰 减 因 子 d, 1 而 Rommey 指 出 衰 减 因 子 可 以 取 得 d p 比 较 真 实 的 效 果 此 时 Phong 光 照 模 型 可 以 进 一 步 描 述 为 : I =K a I a + I l d p +K [K d cos(θ) +K s cos n (α)] (6 唱 6) 其 中,d 是 物 体 上 当 前 考 察 点 到 视 点 的 距 离,K 是 一 个 任 意 的 常 量,0 p 2 采 用 上 式 计 算 物 体 上 可 见 点 光 亮 度 时, 通 常 是 将 光 亮 度 转 换 成 为 光 栅 图 形 显 示 器 采 用 的 RGB 三 基 色, 这 时 计 算 需 要 在 3 个 基 色 上 分 别 进 行 如 果 存 在 多 个 光 源, 则 将 效 果 线 性 相 加 此 时 光 照 模 型 可 以 描 述 为 : I =K a I a m + j =1 I l j d p +K (K d cosθ j +K s cos n α j ) =K a r a g a + d p m 1 +K (K d cosθ j +K scos n α j) j =1 r l j g l j (6 唱 7) b a b lj

166 真 实 感 图 形 的 生 成 技 术 有 了 上 面 的 简 单 光 照 模 型 后, 可 以 用 于 消 隐 算 法 中 计 算 像 素 所 对 应 的 物 体 上 可 见 点 的 亮 度 比 如 在 Z 缓 冲 器 算 法 中, 将 多 边 形 变 换 到 屏 幕 坐 标 后, 可 以 按 照 扫 描 线 的 次 序 处 理 多 边 形 覆 盖 的 每 个 像 素, 如 果 当 前 像 素 经 过 深 度 测 试 为 需 要 绘 制, 则 可 以 应 用 简 单 光 照 模 型 计 算 出 这 个 像 素 所 对 应 多 边 形 上 点 的 亮 度 作 为 像 素 的 颜 色, 在 光 照 计 算 时 需 要 用 到 多 边 形 上 点 的 法 矢 量, 如 果 多 边 形 上 点 的 法 矢 量 总 是 取 多 边 形 的 面 法 矢, 最 终 绘 制 出 来 的 图 像 看 起 来 呈 多 面 体 状, 不 能 展 现 以 多 边 形 方 式 近 似 的 曲 面 本 身 的 光 滑 性, 如 图 6 唱 7(a), 这 是 因 为 平 面 上 所 有 点 的 法 向 量 都 取 为 同 一 的 面 法 矢 量, 不 同 平 面 片 之 间 法 矢 量 不 连 续, 从 而 导 致 不 连 续 的 光 亮 度 跳 越 第 6 章 153 图 6 唱 7 图 像 光 照 处 理 这 个 问 题 可 以 这 样 解 决, 首 先 多 边 形 的 顶 点 法 矢 量 不 再 简 单 地 取 为 其 所 在 多 边 形 的 面 法 矢, 而 是 取 为 共 该 顶 点 的 所 有 多 边 形 的 面 法 矢 的 平 均 值, 其 次 多 边 形 内 部 点 的 法 矢 量 也 不 再 简 单 地 取 为 多 边 形 的 面 法 矢, 而 是 利 用 多 边 形 顶 点 的 法 矢 量 通 过 双 线 性 插 值 计 算 出 结 合 Z 缓 冲 器 消 隐 算 法, 这 个 过 程 可 以 这 样 进 行, 先 将 多 边 形 变 换 到 屏 幕 坐 标 后, 以 扫 描 线 的 方 式 处 理 多 边 形 覆 盖 的 每 个 像 素, 如 图 6 唱 8,P 1 P 2 P 3 是 多 边 形 顶 点, 其 法 矢 量 视 为 已 知, 等 于 共 该 点 的 所 有 多 边 形 法 矢 量 的 平 均 值 由 P 1 P 2 的 法 矢 量 可 以 线 性 插 值 计 算 出 A 点 的 法 矢 量, 由 P 1 P 3 的 法 矢 量 可 以 线 性 插 值 计 算 出 B 点 的 法 矢 量, 于 是 P 点 的 法 矢 量 可 以 由 A B 点 处 的 法 矢 量 线 性 插 值 计 算 出, 计 算 出 P 的 法 矢 量 后 应 用 简 单 光 照 模 型 可 以 计 算 出 P 点 的 光 亮 度 这 种 处 理 方 法 通 常 称 之 为 多 边 形 Phong 明 暗 处 理 由 于 每 个 像 素 点 需 要 插 值 计 算 出 法 向 量, 并 进 行 光 照 计 算, 图 6 唱 8 对 P 点 进 行 双 线 性 插 值 Phong 明 暗 处 理 需 要 较 大 的 计 算 量, 一 种 简 化 的 处 理 方 法 是 先 利 用 光 照 模 型 计 算 出 多 边 形 顶 点 处 亮 度, 当 然 光 照 计 算 时 多 边 形 顶 点 的 法 矢 量 仍 然 采 用 共 顶 点 的 所 有 多 边 形 面 法 矢 平 均 值, 然 后 在 以 扫 描 线 的 方 式 处 理 多 边 形 覆 盖

167 计 算 机 图 形 学 154 的 每 个 像 素 时, 不 是 对 法 向 量 进 行 双 线 性 插 值, 而 是 对 亮 度 进 行 双 线 性 插 值, 直 接 获 得 像 素 的 颜 色, 如 图 6 唱 8,P 1 P 2 P 3 是 多 边 形 顶 点, 其 亮 度 已 经 计 算 出 可 视 为 已 知 而 A 点 的 亮 度 可 以 由 P 1 P 2 点 的 亮 度 线 性 插 值 计 算 出,B 点 的 亮 度 可 以 由 P 1 P 3 点 的 亮 度 线 性 插 值 计 算 出, 于 是 P 点 的 亮 度 可 以 由 A B 点 的 亮 度 线 性 插 值 计 算 出, 这 种 处 理 方 法 通 常 称 之 为 多 边 形 Gouraud 明 暗 处 理, 如 图 6 唱 7(b) 以 上 两 种 多 边 形 处 理 方 法 都 可 以 克 服 用 多 边 形 表 示 的 曲 面 光 亮 度 不 连 续 的 现 象 Gouraud 明 暗 处 理 计 算 量 小, 但 是 因 为 颜 色 线 性 插 值 的 缘 故, 镜 面 反 射 形 成 的 高 光 区 域 和 表 达 曲 面 的 多 边 形 密 切 相 关, 导 致 不 容 易 产 生 正 确 的 高 光, 因 此 Gouraud 明 暗 处 理 比 较 适 用 于 兰 伯 特 反 射 光 照 模 型 Phong 明 暗 处 理 可 以 对 曲 面 进 行 更 好 的 局 部 逼 近, 因 而 绘 制 的 图 像 更 逼 真, 特 别 是 具 有 真 实 的 高 光 效 果 光 线 跟 踪 与 辐 射 度 方 法 介 绍 1. 光 线 跟 踪 前 面 介 绍 的 简 单 光 照 模 型 中, 在 考 察 物 体 表 面 的 入 射 光 时, 主 要 考 察 了 光 源 直 接 入 射 的 光, 而 将 光 在 物 体 间 往 复 反 射 折 射 引 起 的 照 明 效 果 简 化 为 环 境 光 形 式 的 入 射 光 由 于 没 有 很 好 地 模 拟 光 的 折 射 反 射, 没 有 特 别 考 察 物 体 间 的 相 互 照 明 影 响, 这 使 得 简 单 光 照 模 型 在 某 些 情 况 下 绘 制 效 果 并 不 理 想 Whitted 特 别 考 察 了 光 在 物 体 间 往 复 反 射 折 射 引 起 的 照 明 效 果 Whitted 认 为 物 体 表 面 向 空 间 某 方 向 V 辐 射 的 光 亮 度 I 由 3 个 部 分 组 成, 如 图 6 唱 9 所 示 (1) 光 源 直 接 入 射 的 光 引 起 的 反 射 光 亮 度 I c, 即 简 单 光 照 模 型 计 算 结 果 ( 参 见 6 畅 2 畅 1 节 ) (2) 沿 V 的 镜 面 反 射 方 向 r 来 的 源 自 其 他 物 体 反 射 的 光 I s 投 射 在 光 滑 表 面 引 起 的 镜 面 反 射 光 (3) 沿 V 的 规 则 透 射 方 向 t 来 的 源 自 其 他 物 图 6 唱 9 Whitted 光 照 模 型 示 意 图 体 反 射 的 光 I t 投 射 在 透 明 体 表 面 引 起 的 规 则 透 射 光 即 : I =I c +K s I s +K t I t (6 唱 8) 其 中, K s K t 分 别 为 物 体 表 面 的 镜 面 反 射 系 数 和 透 射 系 数 由 于 (2) (3) 项 与 周 围 环 境 物 体 的 相 互 位 置 材 质 有 关, 因 此 这 种 光 照 模 型 称 为 整 体 光 照 模 型 Whitted 将 光 线 投 射 技 术 发 展 为 光 线 跟 踪 技 术 用 于 求 解 整 体 光 照 模 型 (6 唱 8) 光 线 投 射 技 术 的 基 本 原 理 很 简 单, 为 计 算 屏 幕 像 素 e 的 颜 色, 从 视 点 V 向 投 影 面 上 与

168 真 实 感 图 形 的 生 成 技 术 像 素 e 对 应 的 点 投 射 一 光 线, 该 光 线 将 依 次 与 场 景 中 的 物 体 交 于 P 1,P 2,,P n, 其 中 离 视 点 最 近 的 点 P 1 就 是 像 素 e 所 对 应 的 场 景 中 的 可 见 点,P 1 点 向 P 1 V 方 向 辐 射 的 光 亮 度 就 是 像 素 e 的 光 亮 度 采 用 简 单 光 照 模 型 ( 如 Phong 模 型 ) 即 可 计 算 出 P 1 点 向 P 1 V 方 向 辐 射 的 光 亮 度, 按 照 这 种 方 法 可 以 计 算 出 屏 幕 上 每 个 像 素 所 对 应 的 光 亮 度 从 而 生 成 真 实 感 图 像, 并 且 隐 藏 面 已 经 被 消 除 注 意 到 在 光 线 投 射 技 术 中, 按 照 简 单 光 照 模 型 计 算 出 来 的 P 1 点 向 P 1 V 方 向 辐 射 的 光 亮 度 只 包 括 光 源 直 接 入 射 的 光 引 起 的 反 射 光 亮 度 I c, 如 果 按 照 Whitted 整 体 光 照 模 型 (6 唱 8),P 1 点 向 P 1 V 方 向 辐 射 的 光 亮 度 还 应 该 包 括 (2),(3) 项, 即, 沿 P 1 V 的 镜 面 反 射 方 向 r 来 的 源 自 其 他 物 体 反 射 的 光 I s 投 射 在 光 滑 表 面 引 起 的 镜 面 反 射 光 K s I s, 沿 P 1 V 的 规 则 透 射 方 向 t 来 的 源 自 其 他 物 体 反 射 的 光 I t 投 射 在 透 明 体 表 面 引 起 的 规 则 透 射 光 K t I t, 这 里 关 键 在 于 求 出 沿 镜 面 反 射 方 向 和 沿 透 射 方 向 入 射 的 其 他 物 体 的 反 射 光 强 度 I s I t 为 此, 从 P 1 点 处 沿 VP 1 的 镜 面 反 射 方 向 r 发 出 一 根 光 线 与 景 物 首 先 交 于 P 2, 从 P 1 点 处 沿 VP 1 的 规 则 透 射 方 向 t 发 出 一 根 光 线 与 景 物 首 先 交 于 P 3 ( 见 图 6 唱 10), 则 P 2 向 P 1 反 射 的 光 强 就 是 I s,p 3 向 P 1 反 射 的 光 强 就 是 I t 如 果 能 计 算 出 P 2 向 P 1 反 射 的 光 强 I s P 3 向 P 1 反 射 的 光 强 I t, 则 P 1 点 向 P 1 V 方 向 辐 射 的 光 亮 度 就 迎 刃 而 解 第 6 章 155 图 6 唱 10 Whitted 光 照 模 型 求 解 示 意 图 ( 光 线 追 踪 ) 在 求 解 P 2 向 P 1 反 射 的 光 强 I s 和 P 3 向 P 1 反 射 的 光 强 I t 时, 按 照 Whitted 整 体 光 照 模 型 (6 唱 8), 它 们 也 分 别 包 括 3 项 分 量, 求 解 的 关 键 在 于 求 出 沿 相 应 镜 面 反 射 方 向 规 则 透 射 方 向 入 射 到 P 2 P 3 处 其 他 物 体 的 反 射 光 亮 度, 因 此 和 求 解 P 1 点 向 P 1 V 方 向 反 射 的 光 亮 度 类 似, 在 P 2 P 3 点 分 别 沿 相 应 镜 面 反 射 方 向 规 则 透 射 方 向 发 出 一 条 光 线 与 景 物 求 交, 欲 求 出 交 点 处 对 P 2 P 3 的 反 射 光 亮 度, 如 此 追 踪 下 去, 形 成 一 个 以 交 点 为 结 点 的 二 叉 树, 每 个 结 点 处 的 反 射 光 亮 度 不 仅 取 决 于 光 源 对 它 的 直 接 入 射, 还 取 决 于 两 个 子 结 点 处 的 反 射 光 亮 度 根 结 点 处 的 反 射 光 亮 度 即 为 P 1 点 向 P 1 V 方 向 辐 射 的 光 亮 度 上 述 追 踪 过 程 实 际 上 是 自 然 界 光 照 明 物 理 过 程 的 近 似 逆 过 程, 光 线 跟 踪 故 此 得 名

169 计 算 机 图 形 学 156 光 线 跟 踪 的 过 程 不 可 能 也 不 应 该 无 限 进 行 下 去, 这 是 因 为, 其 一, 发 出 的 光 线 有 可 能 与 所 有 的 景 物 无 交 点 ; 其 二, 考 虑 被 跟 踪 光 线 经 多 次 反 射 和 透 射 后 会 衰 减 ( 由 于 K s K t 的 作 用 ), 跟 踪 到 一 定 程 度 后, 当 前 被 跟 踪 光 线 的 亮 度 对 显 示 像 素 的 亮 度 贡 献 已 经 非 常 小, 可 以 忽 略 不 计, 继 续 跟 踪 下 去 毫 无 意 义, 只 会 耗 费 计 算 资 源 因 此, 在 实 际 进 行 光 线 追 踪 时 可 以 规 定 以 下 3 种 中 止 条 件 :1 如 果 发 出 的 光 线 与 所 有 的 景 物 无 交 点, 则 来 自 这 条 光 线 方 向 上 的 亮 度 视 为 0, 不 再 细 究 2 如 果 发 出 的 光 线 所 处 的 追 踪 深 度 已 经 超 出 预 先 指 定 的 追 踪 深 度, 则 来 自 这 条 光 线 方 向 上 的 亮 度 视 为 0, 不 再 深 究 下 去 3 考 察 来 自 发 出 的 光 线 方 向 上 的 亮 度 对 显 示 像 素 亮 度 的 贡 献 系 数 ( 通 常 取 当 前 光 线 的 起 点 及 其 所 有 父 结 点 处 景 物 表 面 的 镜 面 反 射 系 数 透 射 系 数 的 累 积 ), 如 果 贡 献 系 数 小 于 预 先 指 定 的 贡 献 系 数 阈 值, 则 来 自 这 条 光 线 方 向 上 的 亮 度 视 为 0, 不 再 深 究 其 中 2 和 3 是 对 上 面 情 形 二 的 处 理,2 的 方 式 相 对 简 单 些 光 线 跟 踪 过 程 实 际 上 是 一 个 递 归 的 过 程, 上 述 光 线 跟 踪 中 止 的 条 件 就 是 递 归 中 止 的 条 件, 下 面 给 出 了 光 线 跟 踪 的 递 归 函 数 实 现 Ray 唱 Tracing() 作 为 Ray 唱 Tracing() 函 数 的 使 用 示 例, 还 给 出 了 DrawImage() 函 数, 该 函 数 为 每 个 像 素 调 用 光 线 跟 踪 函 数 Ray 唱 Tracing () 以 计 算 像 素 的 颜 色, 从 而 生 成 真 实 感 图 形 DrawImage() { for( 帧 缓 冲 区 中 的 每 一 个 像 素 e) { 计 算 像 素 e 所 对 应 的 投 影 平 面 上 的 点 e, 从 视 点 V 向 e 发 出 一 条 光 线, 方 向 记 为 direction Ray 唱 Tracing(e,direction, 1.0,1,&I); 将 像 素 e 的 颜 色 设 置 为 (I r,i g,i b ); } } Ray 唱 Tracing(startPoint,direction, weight,depth,i) / 倡 startpoint 为 光 线 的 起 点 倡 / / 倡 direction 为 光 线 的 方 向 倡 / / 倡 weight 为 当 前 被 追 踪 光 线 对 最 终 总 光 强 度 的 贡 献 系 数 倡 / / 倡 depth 为 当 前 被 追 踪 光 线 处 在 光 线 追 踪 树 中 的 深 度 倡 / / 倡 I 是 指 针 变 量, 它 所 指 向 的 内 存 单 元 将 存 放 计 算 出 来 的 当 前 被 追 踪 光 线 的 强 度, 返 回 给 调 用 者 倡 / { / 倡 TREE_MAX_DEPTH 为 预 先 指 定 的 最 大 光 线 追 踪 树 的 深 度 倡 / / 倡 CONTRIBUTE_COEFFICIENT_THRESHOLD 为 预 先 指 定 的 光 线 强 度 贡 献 系 数 阈 值 倡 /

170 真 实 感 图 形 的 生 成 技 术 if ((depth >TREE _ MAX _ DEPTH ) ( weight < CONTRIBUTE _ COEFFICIENT _ THRESHOLD)) { 倡 I =0; return; } 将 起 点 为 startpoint 方 向 为 direction 的 光 线 与 场 景 中 的 所 有 物 体 表 面 求 交 ; 如 有 交 点, 记 距 离 startpoint 最 近 的 交 点 P 1, 记 光 线 在 相 交 物 体 上 P 1 处 的 反 射 方 向 和 透 射 方 向 分 别 为 direction_r direction_t 相 交 物 体 表 面 的 镜 面 反 射 系 数 和 透 射 系 数 分 别 为 K s K t if( 无 交 点 ) { 倡 I =0; return; } else { 根 据 简 单 光 照 模 型 计 算 P 1 处 因 光 源 直 接 照 射 引 起 的 ( 唱 1 倡 direction) 方 向 的 反 射 光 强 度 I c ; Ray 唱 Tracing(P 1, direction_r, weight 倡 K s,depth +1,&I s ); Ray 唱 Tracing(P 1, direction_t, weight 倡 K t,depth +1,&I t ); 第 6 章 157 } } 倡 I =I c +K s I s +K t I t return; 光 线 跟 踪 算 法 生 成 的 图 形 逼 真 程 度 高, 适 合 绘 制 表 面 光 洁 度 高 或 具 有 透 明 表 面 和 镜 面 的 场 景 光 线 跟 踪 算 法 的 两 个 主 要 缺 点 是, 耗 时 多 和 容 易 引 起 图 形 走 样 耗 时 多 是 因 为 它 在 计 算 每 个 像 素 的 光 亮 度 时, 需 要 进 行 多 次 的 不 同 光 线 与 所 有 景 物 求 交 计 算 光 线 在 物 体 表 面 的 反 射 方 向 和 透 射 方 向 计 算 交 点 处 的 光 源 直 接 入 射 下 的 反 射 光 亮 度 I c, 这 些 计 算 都 是 比 较 费 时 的 图 形 走 样 源 于 计 算 像 素 亮 度 时, 算 法 只 从 像 素 中 心 发 出 光 线 进 行 跟 踪, 计 算 出 来 的 亮 度 只 能 是 物 体 表 面 特 定 点 的 亮 度 事 实 上, 一 个 像 素 区 域 对 应 投 影 面 上 一 个 区 域, 进 一 步 讲 就 是 对 应 物 体 表 面 某 个 区 域 用 物 体 表 面 某 区 域 中 的 一 个 特 定 点 的 亮 度 来 表 示 该 区 域 的 亮 度, 即 点 采 样, 当 然 有 可 能 造 成 图 形 走 样 有 关 克 服 图 形 走 样 的 技 术 在 6.5 节 中 介 绍 2. 辐 射 度 方 法 辐 射 度 方 法 是 继 光 线 跟 踪 算 法 后, 真 实 感 图 形 绘 制 技 术 的 一 个 重 要 进 展 尽 管 光 线 跟 踪 算 法 成 功 地 模 拟 了 景 物 表 面 间 的 镜 面 反 射 规 则 透 射 及 阴 影 等 整 体 光 照 效 果, 但 由 于

171 计 算 机 图 形 学 158 光 线 跟 踪 算 法 的 采 样 特 性, 和 简 单 光 照 模 型 的 不 完 善 性, 该 方 法 难 于 模 拟 景 物 表 面 之 间 的 多 重 漫 反 射 效 果, 因 而 不 能 反 映 色 彩 渗 透 现 象 1984 年, 美 国 Cornell 大 学 和 日 本 广 岛 大 学 的 学 者 分 别 将 热 辐 射 工 程 中 的 辐 射 度 方 法 引 入 到 计 算 机 图 形 学 中, 用 辐 射 度 方 法 成 功 地 模 拟 了 理 想 漫 反 射 表 面 间 的 多 重 漫 反 射 效 果 经 过 二 十 多 年 的 发 展, 辐 射 度 方 法 模 拟 的 场 景 越 来 越 复 杂, 图 形 效 果 越 来 越 真 实 辐 射 度 方 法 基 于 物 理 学 的 能 量 平 衡 原 理, 它 采 用 数 值 求 解 技 术 来 近 似 每 一 个 景 物 表 面 的 辐 射 度 分 布 由 于 场 景 中 景 物 表 面 的 辐 射 度 分 布 与 视 点 选 取 无 关, 辐 射 度 方 法 是 一 个 视 点 独 立 (view independent) 的 算 法, 使 之 可 广 泛 应 用 于 虚 拟 环 境 的 漫 游 ( walkthrough) 系 统 中 在 这 里, 限 于 篇 幅 和 教 学 的 深 度, 就 不 再 详 细 介 绍 该 方 法 了, 有 兴 趣 的 读 者 可 以 查 阅 相 关 的 文 献 6.3 物 体 表 面 细 节 的 模 拟 利 用 前 面 介 绍 的 消 隐 技 术 光 照 技 术 绘 制 出 的 场 景 图 像, 由 于 视 线 方 向 上 被 其 他 物 体 遮 挡 的 物 体 不 予 绘 制, 并 且 较 好 地 模 拟 了 自 然 界 中 的 光 照 现 象, 因 而 具 有 较 强 的 立 体 效 果 和 光 照 效 果 在 不 考 虑 额 外 的 技 术 手 段 下, 这 时 生 成 的 图 像 能 否 较 好 地 反 映 实 际 物 体 表 面 细 节, 主 要 取 决 于 在 计 算 机 中 物 体 表 面 的 几 何 描 述 和 材 质 属 性 描 述 物 体 表 面 的 细 节 可 以 分 为 两 类 一 类 是 由 物 体 表 面 颜 色 色 彩 明 暗 变 化 体 现 出 来 的 细 节, 如 光 滑 瓷 砖 表 面 上 装 饰 图 案, 它 主 要 取 决 于 物 体 表 面 的 材 质 属 性 另 一 类 是 由 物 体 表 面 不 规 则 的 细 小 凹 凸 造 成 的 细 节, 如 桔 子 表 面 的 皱 纹, 它 主 要 取 决 于 物 体 本 身 的 几 何 形 状 要 在 计 算 机 中 对 引 起 上 述 细 节 的 材 质 属 性 几 何 形 状 进 行 描 述 不 是 一 件 容 易 的 事 如 果 只 是 追 求 看 起 来 像 就 可 以 了, 在 计 算 机 图 形 学 中, 物 体 表 面 细 节 可 以 通 过 纹 理 映 射 的 方 式 生 成 根 据 将 要 生 成 的 物 体 表 面 细 节 的 分 类 不 同, 纹 理 映 射 可 以 分 为 颜 色 纹 理 映 射 和 几 何 纹 理 映 射 颜 色 纹 理 映 射 用 来 在 光 滑 表 面 上 产 生 花 纹 图 案 的 效 果, 几 何 纹 理 映 射 用 来 使 物 体 表 面 产 生 凹 凸 不 平 的 效 果 一 般 地 讲, 利 用 纹 理 映 射 可 以 在 不 增 加 场 景 描 述 复 杂 度, 不 显 著 增 加 计 算 量 的 前 提 下, 大 幅 度 地 提 高 图 形 的 真 实 感 颜 色 纹 理 映 射 技 术 颜 色 纹 理 映 射 要 达 到 的 目 的 是 使 绘 制 出 来 的 物 体 表 面 具 有 花 纹 图 案 效 果 它 的 基 本 思 想 是, 首 先 给 出 期 望 在 物 体 表 面 出 现 的 花 纹 图 案 样 式, 这 可 以 通 过 纹 理 函 数 予 以 刻 画 纹 理 函 数 的 定 义 域 称 为 纹 理 定 义 域, 这 个 定 义 域 一 般 可 以 取 为 一 维 二 维 三 维, 则 相 应 的 纹 理 函 数 称 为 一 维 纹 理 函 数 二 维 纹 理 函 数 三 维 纹 理 函 数 纹 理 函 数 值 一 般 可 以 理 解 为 亮 度 值, 可 以 转 换 为 RGB 表 示 的 颜 色 值 形 象 地 讲, 纹 理 函 数 定 义 了 空 间 中 沿 直 线 分 布 的 线 纹 理, 沿 平 面 分 布 的 面 纹 理, 或 者 是 沿 空 间 分 布 的 体 纹 理 其 次, 为

172 真 实 感 图 形 的 生 成 技 术 了 物 体 表 面 出 现 上 述 花 纹 图 案 样 式, 需 要 在 物 体 表 面 和 花 纹 图 案 样 式 之 间 建 立 一 种 对 应 关 系, 这 种 对 应 关 系 可 以 通 过 纹 理 函 数 的 定 义 域 与 物 体 表 面 的 定 义 域 之 间 定 义 一 种 映 射 关 系 ( 即 映 射 函 数 ) 建 立 这 种 对 应 关 系 一 旦 建 立, 物 体 表 面 任 何 一 点 的 花 纹 图 案 属 性 都 可 以 通 过 纹 理 定 义 域 中 相 应 点 的 纹 理 函 数 值 获 得 最 后, 在 绘 制 物 体 表 面 可 见 点 时, 通 过 前 面 定 义 的 对 应 关 系 可 以 获 得 该 可 见 点 处 代 表 花 纹 图 案 属 性 的 相 应 纹 理 函 数 值, 适 当 地 使 用 该 纹 理 函 数 值 就 可 以 使 最 终 绘 制 出 来 的 物 体 表 面 具 有 花 纹 图 案 的 效 果, 比 如, 不 考 虑 光 照 计 算 的 情 况 下, 可 以 简 单 地 将 表 示 亮 度 的 纹 理 函 数 值 作 为 物 体 可 见 点 的 亮 度, 即 颜 色 在 考 虑 光 照 计 算 的 情 况 下, 可 以 将 表 示 亮 度 的 纹 理 函 数 值 ( 转 化 为 颜 色 值 后 有 3 个 分 量 ) 作 为 光 照 模 型 中 该 点 处 物 体 的 漫 反 射 系 数, 然 后 再 通 过 光 照 模 型 计 算 出 该 可 见 点 的 亮 度 接 下 来, 以 二 维 纹 理 映 射 为 例, 对 颜 色 纹 理 映 射 的 上 述 3 个 主 要 步 骤 : 纹 理 函 数 定 义 映 射 函 数 定 义 纹 理 映 射 的 实 施 进 行 进 一 步 的 讨 论 1. 纹 理 函 数 定 义 假 设 二 维 纹 理 函 数 定 义 在 ( u,v) 平 面 上 二 维 纹 理 函 数 的 定 义 域 可 以 是 整 个 uv 平 面 但 由 于 物 体 表 面 的 范 围 总 是 有 限 的, 因 而 使 用 到 的 纹 理 范 围 也 是 有 限 的 基 于 此, 并 且 考 虑 到 规 范 性, 一 般 地 二 维 纹 理 函 数 的 定 义 域 是 单 位 正 方 形 (0 u 1,0 v 1) 如 果 考 虑 到 后 面 进 行 映 射 时, 物 体 表 面 上 某 点 可 能 会 对 应 到 二 维 纹 理 函 数 定 义 平 面 上 单 位 正 方 形 (0 u 1,0 v 1) 外 的 某 点, 则 可 以 对 纹 理 定 义 函 数 进 行 如 下 技 术 处 理, 一 种 方 法 是 将 纹 理 定 义 函 数 在 uv 平 面 进 行 周 期 延 拓, 使 得 单 位 正 方 形 (0 u 1,0 v 1) 内 的 花 纹 图 案 在 uv 平 面 上 重 复 出 现, 另 一 种 方 法 就 是 截 止,uv 平 面 上 单 位 正 方 形 (0 u 1, 0 v 1) 外 的 点 的 纹 理 函 数 值 简 单 地 取 为 单 位 正 方 形 相 应 边 界 上 的 纹 理 函 数 值 理 论 上 讲 任 何 定 义 在 单 位 正 方 形 (0 u 1,0 v 1) 上 的 函 数 都 可 以 作 为 纹 理 函 数 比 如 : g(u,v) = 0, u 8 + v 8 为 偶 数 (0 u 1,0 v 1) 1, u 8 + v 8 为 奇 数 x 表 示 不 大 于 x 的 最 大 整 数, 可 以 表 示 黑 白 相 间 的 几 何 图 案, 如 图 6 唱 11 所 示 除 了 以 函 数 表 达 式 的 形 式 给 出 纹 理 函 数, 更 多 的 是 以 数 字 图 像 的 形 式 给 出 纹 理 函 数, 这 实 际 上 是 纹 理 函 数 的 离 散 形 式 比 如 一 幅 m n 的 数 字 图 像, 可 以 理 解 为 纹 理 函 数 在 单 位 正 方 形 (0 u 1,0 v 1) 内 的 m n 个 点 的 均 匀 采 样 而 来, 单 位 正 方 形 (0 u 1,0 v 1) 内 非 采 样 点 的 纹 理 函 数 值 可 以 通 过 周 围 4 个 采 样 点 的 纹 理 函 数 值 双 线 性 插 值 获 得 一 般 地 讲 以 函 数 形 式 给 出 的 纹 理 函 数 长 处 在 于 对 花 纹 图 案 的 几 何 特 性 进 行 刻 画, 又 其 函 数 值 的 单 分 量 特 性, 因 此 常 常 用 于 灰 度 显 示 下 的 纹 理 映 射 以 数 字 图 像 形 式 给 出 的 纹 理 函 数 长 处 在 于 数 字 图 像 易 获 取, 且 数 字 图 像 可 以 表 达 具 有 丰 富 色 彩 信 息 的 花 纹 图 案, 又 其 函 数 值 可 以 蕴 含 3 个 颜 色 分 量, 因 此 常 常 用 于 彩 色 显 示 下 的 纹 理 映 射 第 6 章 159

173 计 算 机 图 形 学 映 射 函 数 定 义 假 设 二 维 纹 理 函 数 定 义 在 (u,v) 平 面 上, 物 体 表 面 定 义 在 正 交 坐 标 系 ( x,y,z) 中, 见 图 6 唱 12, 经 参 数 化 后, 物 体 表 面 可 以 用 参 数 方 程 x =x(θ, 矱 ) y =y(θ, 矱 ) 表 示 z =z(θ, 矱 ) 映 射 函 数 要 解 决 的 问 题 是, 在 物 体 表 面 和 花 纹 图 案 样 式 之 间 建 立 一 种 对 应 关 系, 也 就 是 在 物 体 表 面 的 参 数 空 间 (θ, 矱 ) 和 纹 理 空 间 ( u, v) 间 建 立 一 种 映 射 关 系 这 个 映 射 的 逆 映 射 u =r(θ, 矱 ) v =s(θ, 矱 ), 通 常 要 求 θ=f( u,v) 也 是 存 在 的 矱 =g(u,v) 图 6 唱 11 黑 白 相 间 的 几 何 图 案 图 图 6 唱 12 映 射 函 数 的 建 立 一 种 方 便 建 立 映 射 的 方 法 是 将 上 述 映 射 关 系 假 设 为 线 性 关 系, 如 : θ =Au +B 矱 =Cv +D 然 后 利 用 预 先 指 定 的 参 数 空 间 (θ, 矱 ) 和 纹 理 空 间 ( u,v) 的 若 干 个 对 应 点 对 信 息 就 可 以 将 常 量 A B C D 求 出 作 为 一 个 例 子, 假 设 图 6 唱 12( b) 中 物 体 的 表 面 用 参 数 方 程 表 示 为 : x =sinθsin 矱 0 θ π 2 y =cos 矱 z =cosθsin 矱 π 4 矱 π 2

174 真 实 感 图 形 的 生 成 技 术 这 实 际 上 是 球 面 在 第 Ⅰ 象 限 内 曲 面 片 的 一 部 分 现 在 假 定 物 体 表 面 的 参 数 空 间 (θ, 矱 ) 和 纹 理 空 间 (u,v) 间 的 映 射 关 系 为 : θ=au +B 矱 =Cv +D, 并 且 假 定 纹 理 定 义 域 (0 u 1,0 v 1) 的 4 个 角 点 映 射 到 物 体 表 面 曲 面 片 的 相 应 角 点, 见 图 6 唱 12, 这 相 当 已 知 了 4 组 (θ, 矱 ) 和 (u,v) 的 对 应 关 系, 比 如 其 中 一 组 是 u =0,v =0 对 应 θ=0, 矱 = π 2, 将 这 几 组 对 应 关 系 代 入 假 定 的 映 射 关 系 式 θ=au +B 中, 即 可 求 出 A = π 矱 =Cv +D 2,B =0,C =-π 4,D =π 2, 至 此, 纹 理 空 间 ( u,v) 到 物 体 第 6 章 161 表 面 的 参 数 空 间 (θ, 矱 ) 的 映 射 确 定 为 θ= π 2 u 矱 =- π 4 v +π 2, 作 为 逆 映 射, 物 体 表 面 的 参 数 空 间 (θ, 矱 ) 到 纹 理 空 间 (u,v) 的 映 射 为 u = θ π/2 v = π/2- 矱 π/4 3. 纹 理 映 射 的 实 施 以 纹 理 映 射 的 方 式 实 现 物 体 表 面 细 节 的 绘 制, 必 然 要 涉 及 到 3 个 空 间 : 纹 理 空 间 物 空 间 图 像 空 间, 以 及 两 种 映 射 : 纹 理 空 间 与 物 空 间 之 间 的 映 射 物 空 间 与 图 像 空 间 之 间 的 映 射 但 是 以 何 种 方 式 来 组 织 这 两 种 映 射 也 反 映 了 纹 理 映 射 实 施 技 术 手 段 不 同, 由 此 产 生 的 效 果 也 有 可 能 不 同 Catmull 最 早 考 虑 光 滑 曲 面 片 上 的 纹 理 映 射 问 题, 他 采 用 递 归 分 割 参 数 曲 面 片 的 方 式 对 参 数 曲 面 进 行 子 分, 直 到 每 个 子 曲 面 片 在 屏 幕 上 的 投 影 区 域 只 覆 盖 一 个 像 素 中 心, 这 时 子 曲 面 片 中 心 处 的 参 数 值 或 像 素 中 心 处 的 参 数 值 ( 可 在 屏 幕 上 采 用 双 线 性 插 值 计 算 出 ) 将 被 映 射 到 纹 理 空 间, 纹 理 空 间 中 相 应 点 处 的 纹 理 函 数 值 将 被 用 作 决 定 像 素 的 亮 度 考 虑 子 曲 面 片 实 际 上 对 应 纹 理 空 间 中 的 一 个 小 区 域, 上 述 以 子 曲 面 片 中 心 点 处 的 纹 理 值 来 描 述 整 个 子 曲 面 片 的 纹 理 值, 即 点 采 样, 极 有 可 能 导 致 严 重 的 走 样, 因 此 Catmull 在 进 行 曲 面 子 分 的 同 时 也 对 纹 理 空 间 进 行 相 应 的 子 分, 每 个 子 曲 面 片 在 纹 理 空 间 中 总 存 在 相 应 的 纹 理 子 区 域, 当 某 个 子 曲 面 片 在 屏 幕 上 的 投 影 区 域 只 覆 盖 一 个 像 素 中 心 时, 该 子 曲 面 片 上 的 纹 理 属 性 值 将 取 为 纹 理 空 间 中 对 应 纹 理 子 区 域 的 平 均 纹 理 值 纵 观 Catmull 纹 理 映 射 方 法, 其 实 就 是 先 将 纹 理 从 纹 理 空 间 映 射 到 物 空 间 ( 曲 面 表 面 ), 然 后 再 将 物 体 从 物 空 间 映 射 到 图 像 空 间, 在 这 种 方 法 中 无 需 使 用 从 图 像 空 间 到 物 空 间 的 变 换, 因 此 Catmull 纹 理 映 射 方 法 被 认 为 是 一 种 正 向 纹 理 映 射 技 术 在 实 现 Catmull 纹 理 映 射 方 法 时 还 应 注 意 到 细 分 生 成 的 子 曲 面 片 在 屏 幕 上 的 投 影 通 常 并 不 能 精 确 地 覆 盖 整 个 像 素 区 域, 一 般 地 一

175 计 算 机 图 形 学 162 个 像 素 区 域 将 被 多 个 子 曲 面 片 不 重 叠 的 投 影 覆 盖, 因 此 像 素 的 亮 度 应 该 由 这 几 个 子 曲 面 片 对 该 像 素 的 亮 度 贡 献 共 同 决 定 与 正 向 纹 理 映 射 技 术 不 同 的, 逆 向 纹 理 映 射 技 术 考 虑 将 屏 幕 上 的 像 素 映 射 到 物 空 间 中 物 体 表 面 上 某 点, 再 从 物 空 间 映 射 到 纹 理 空 间, 从 而 获 得 像 素 所 对 应 的 物 体 表 面 上 点 的 纹 理 属 性, 然 后 将 纹 理 属 性 值 作 为 光 照 模 型 中 的 漫 反 射 系 数 计 算 出 物 体 表 面 上 该 点 的 亮 度 作 为 像 素 的 亮 度 将 屏 幕 上 的 像 素 映 射 到 物 空 间 中 物 体 表 面 上 某 点 可 以 这 样 进 行, 在 视 坐 标 系 下, 从 视 点 ( 即 视 坐 标 系 原 点 ) 向 投 影 平 面 上 对 应 于 屏 幕 特 定 像 素 的 点 引 射 线, 然 后 将 此 射 线 与 变 换 到 视 坐 标 系 下 的 物 体 表 面 求 交, 得 视 坐 标 系 下 的 交 点 P, 如 果 像 素 具 有 消 除 隐 藏 面 Z 缓 冲 器 算 法 中 的 深 度 信 息 ( 即 视 坐 标 系 下 的 Z 值 ) 则 P 点 的 计 算 更 简 单, 只 要 沿 射 线 进 行 线 性 运 算 最 后 将 P 点 从 视 坐 标 系 变 换 到 物 空 间 即 求 出 了 屏 幕 上 的 像 素 所 对 应 的 物 空 间 中 物 体 表 面 上 的 点 同 样, 注 意 到 屏 幕 上 的 像 素 实 际 上 对 应 物 体 表 面 的 一 个 小 区 域, 而 不 是 一 个 点, 物 体 表 面 上 的 这 个 小 区 域 将 对 应 于 纹 理 空 间 中 的 一 个 纹 理 子 区 域, 因 而 以 纹 理 子 区 域 的 平 均 纹 理 属 性 值 作 为 物 体 表 面 小 区 域 的 纹 理 属 性 值 要 比 之 前 以 点 采 样 的 方 式 获 得 的 纹 理 属 性 值 更 合 理 多 边 形 表 达 的 物 体 采 用 Z 缓 存 器 消 隐 算 法 简 单 光 照 模 型 逆 向 纹 理 映 射 技 术 可 以 比 较 方 便 地 实 现 具 有 立 体 效 果 光 感 表 面 细 节 的 真 实 感 图 形 绘 制, 其 过 程 可 以 描 述 为 : 首 先 将 多 边 形 投 影 到 屏 幕 上, 对 多 边 形 占 据 的 像 素 按 行 扫 描, 对 扫 描 到 的 每 个 像 素 按 Z 缓 冲 器 消 隐 算 法 决 定 是 否 需 要 绘 制, 如 果 需 要 绘 制 则 利 用 消 隐 时 计 算 出 来 的 像 素 深 度 值 计 算 当 前 像 素 对 应 多 边 形 上 点 M 的 坐 标 值, 并 将 M 的 坐 标 值 由 视 坐 标 系 转 换 成 物 空 间 下 表 达, 此 后 利 用 纹 理 映 射 函 数 求 出 多 边 形 上 点 M 的 纹 理 属 性 值, 然 后 将 纹 理 属 性 值 作 为 简 单 光 照 模 型 中 的 漫 反 射 系 数, 利 用 简 单 光 照 模 型 计 算 出 物 体 表 面 上 该 M 点 的 亮 度 作 为 像 素 的 亮 度 以 上 的 讨 论 是 以 二 维 纹 理 映 射 为 例, 也 就 是 纹 理 函 数 定 义 在 二 维 平 面 上, 当 纹 理 函 数 定 义 在 三 维 空 间 中, 即 通 常 所 说 的 三 维 纹 理 或 体 纹 理, 上 面 的 讨 论 稍 加 推 广 也 是 适 用 的 从 某 个 角 度 看, 三 维 纹 理 可 以 理 解 为 直 接 定 义 在 景 物 空 间 中, 物 体 表 面 上 的 纹 理 就 是 它 和 三 维 体 纹 理 的 交 因 为 体 纹 理 本 身 的 连 续 性, 因 此 由 三 维 纹 理 映 射 产 生 物 体 表 面 纹 理 可 以 较 好 地 解 决 表 达 复 杂 曲 面 的 相 邻 曲 面 片 之 间 的 纹 理 衔 接 问 题 三 维 纹 理 映 射 研 究 的 重 点 是 如 何 构 造 三 维 纹 理 即 纹 理 函 数 几 何 纹 理 映 射 技 术 前 面 介 绍 的 颜 色 纹 理 映 射 技 术 主 要 用 来 在 光 滑 表 面 上 绘 制 指 定 的 花 纹 图 案 如 果 试 图 采 用 颜 色 纹 理 映 射 的 技 术, 即 对 现 实 生 活 中 的 某 个 表 面 粗 糙 存 在 细 小 凹 凸 的 物 体 拍 摄 一 幅 数 字 图 像, 然 后 将 它 映 射 到 指 定 的 光 滑 物 体 表 面 上, 期 望 由 此 绘 制 出 来 的 图 像 可 以 产 生 被 映 射 表 面 的 粗 糙 凹 凸 不 平 效 果, 最 后 会 发 现 结 果 并 不 能 令 人 满 意, 物 体 表 面 只 是 被 绘 制 上 了 粗 糙 的 花 纹 图 案, 但 看 起 来 感 觉 仍 然 是 光 滑 的

176 真 实 感 图 形 的 生 成 技 术 事 实 上, 粗 糙 表 面 不 同 于 光 滑 表 面 之 处 在 于 粗 糙 表 面 的 法 矢 量 具 有 一 个 比 较 小 的 随 机 分 量, 这 使 得 其 上 的 光 线 反 射 方 向 也 具 有 一 定 的 随 机 分 量 Blinn 注 意 到 这 个 问 题, 于 是 想 了 一 种 办 法 用 来 扰 动 表 面 法 矢, 表 面 法 矢 量 的 扰 动 导 致 表 面 光 亮 度 的 突 变, 从 而 产 生 表 面 凹 凸 不 平 的 真 实 感 效 果 Blinn 对 表 面 法 矢 进 行 扰 动 的 方 法 是, 在 表 面 任 一 点 处 沿 其 法 向 附 加 一 微 小 增 量, 从 而 生 成 一 张 新 的 表 面, 计 算 新 生 成 的 表 面 上 点 的 法 矢 量 以 取 代 原 表 面 上 相 应 点 的 法 矢 量 设 表 面 的 参 数 方 程 为 P =P ( u, v), 表 面 上 任 何 一 点 的 单 位 法 矢 量 为 N ( u, v), N(u,v) = P u P v P u P v 纹 理 函 数 F(u,v) 给 出 表 面 上 每 一 点 沿 其 法 向 的 位 移 量, 则 新 生 成 的 表 面 为 : P (u,v) =P(u,v) +F(u,v) N(u,v) 新 表 面 的 法 向 量 可 以 由 P (u,v) 的 两 个 偏 导 数 叉 乘 得 到 : N (u,v) =P u P v 其 中, 抄 P (u,v) P u = 抄 u 抄 P (u,v) P v = 抄 v =P u =P v +F u N +F N u +F v N +F N v 由 于 纹 理 函 数 F(u,v) 给 出 的 位 移 量 非 常 小, 所 以 上 述 两 式 的 最 后 一 项 可 略 去 这 样 新 表 面 的 法 向 量 可 近 似 地 表 示 为 : N (u,v) =P u P v =(P u +F u N) (P v +F v N) =P u P v +F v (P u N) +F u (N P v )+F u F v (N N) (6 唱 9) = P u P v N +F v (P u N) +F u (N P v ) 上 面 最 后 一 式 中, P u P v N 是 表 面 P( u,v) 法 向 量, 第 二 项 F v ( P u N) 第 三 项 F u (N P v ) 所 表 示 的 向 量 均 位 于 表 面 P(u,v) 在 ( u,v) 处 的 切 平 面 上, 将 这 两 项 先 行 加 起 来 得 到 的 向 量 仍 然 位 于 表 面 P(u,v) 在 (u,v) 处 的 切 平 面 上, 因 此 上 面 这 个 式 子 的 几 何 意 义 是 非 常 明 显 的, 即 新 表 面 P (u,v) 上 (u,v) 处 的 法 向 量 是 由 于 表 面 P( u,v) 在 (u,v) 处 的 法 向 量 受 到 在 该 点 处 切 平 面 上 一 个 向 量 作 用 ( 扰 动 ) 而 来 的 Blinn 将 计 算 出 来 的 新 表 面 P (u,v) 上 (u,v) 处 的 法 矢 量 作 为 表 面 P(u,v) 上 ( u,v) 处 的 法 矢 量, 单 位 化 后 用 于 表 面 P(u,v) 的 光 照 计 算, 因 为 这 时 表 面 P(u,v) 的 法 向 量 已 经 被 扰 动 过, 因 此 绘 制 出 来 的 表 面 P(u,v) 一 般 会 呈 现 凹 凸 不 平 的 真 实 感 效 果 可 以 看 出, 几 何 纹 理 映 射 和 颜 色 纹 理 映 射 除 了 对 纹 理 属 性 值 的 使 用 方 式 不 同 外, 其 他 的 概 念 如 纹 理 函 数 的 定 义 映 射 函 数 的 定 义 纹 理 映 射 的 实 施 技 术 都 是 相 通 的 比 如, 在 这 里, 纹 理 函 数 也 可 理 解 为 定 义 在 [0,1] [0,1] 上 可 以 是 以 函 数 表 达 式 的 形 式 给 出 第 6 章 163

177 计 算 机 图 形 学 164 也 可 以 是 以 m n 数 字 图 像 的 形 式 给 出, 这 时 可 以 认 为 给 出 了 纹 理 函 数 在 [0,1] [0,1] 内 的 m n 个 点 的 均 匀 采 样,[0,1] [0,1] 内 非 采 样 点 的 纹 理 函 数 值 可 以 以 双 线 性 插 值 的 方 法 得 到 当 纹 理 函 数 以 数 字 图 像 的 形 式 给 出, 这 时 可 以 认 为 图 像 中 较 暗 的 颜 色 表 示 较 小 的 位 移 量, 而 较 亮 的 颜 色 表 示 较 大 的 位 移 量 式 (6 唱 9) 指 出 在 应 用 纹 理 属 性 值 F( u,v) 计 算 物 体 表 面 上 点 的 扰 动 后 法 矢 量 N (u,v) 时 需 要 用 到 F( u,v) 的 两 个 偏 导 数 F u,f v, 这 时 可 采 用 有 限 差 分 法 来 确 定 环 境 映 射 技 术 环 境 映 射 技 术 首 先 由 Blinn 和 Newell 在 1976 年 提 出 这 种 技 术 的 提 出 是 为 了 模 拟 光 线 追 踪 的 效 果, 确 切 地 讲 是 模 拟 景 物 镜 面 反 射 效 果, 现 在 看 来, 虽 然 环 境 映 射 技 术 与 光 线 追 踪 技 术 相 比 能 力 很 有 限, 但 是 相 比 而 言 需 要 非 常 少 的 计 算 花 费, 使 得 环 境 映 射 技 术 还 是 一 种 很 有 用 的 技 术, 在 计 算 机 图 形 学 中 广 为 应 用 环 境 映 射 技 术 从 本 质 上 讲 是 一 种 颜 色 映 射 技 术 它 适 用 于 这 样 的 场 景 绘 制, 其 他 的 物 体 和 光 源 离 当 前 被 绘 制 的 物 体 比 较 远 它 使 用 的 纹 理 图 像 是 当 前 被 绘 制 物 体 周 边 的 景 物 图 像, 这 可 以 通 过 对 真 实 场 景 拍 照 或 由 真 实 感 图 形 绘 制 系 统 绘 制 而 成 为 实 现 物 体 和 纹 理 图 像 之 间 的 对 应 关 系, 环 境 映 射 采 取 两 个 阶 段 的 纹 理 映 射, 首 先 将 纹 理 图 像 映 射 到 一 个 简 单 的 三 维 面 上, 如 平 面 球 面 圆 柱 面 立 方 体 表 面, 这 个 三 维 面 称 为 中 介 面, 然 后 再 将 结 果 映 射 到 最 终 的 三 维 物 体 表 面 在 具 体 实 现 上 可 以 采 取 逆 向 纹 理 映 射 技 术, 从 视 点 向 像 素 所 对 应 投 影 面 上 的 点 发 出 一 根 光 线, 该 光 线 与 被 绘 制 物 体 表 面 交 于 一 点 并 反 射 出 去, 反 射 出 去 的 光 线 将 与 一 个 假 想 的 中 介 面 相 交, 比 如 说 该 中 介 面 是 一 个 很 大 的 球 面, 并 且 球 面 的 放 置 使 得 被 绘 制 物 体 在 球 心 处, 由 于 之 前 已 经 将 纹 理 图 像 映 射 到 这 个 球 面 的 内 表 面, 由 此 可 以 获 得 像 素 所 对 应 物 体 表 面 上 点 的 纹 理 属 性 值 一 般 地, 环 境 映 射 技 术 难 以 获 得 物 体 表 面 各 入 射 点 处 精 确 的 环 境 映 照, 环 境 映 射 对 远 距 离 物 体 镜 面 反 射 的 模 拟 比 较 有 效 6.4 阴 影 的 生 成 阴 影 是 现 实 生 活 中 一 个 很 常 见 的 光 照 现 象, 在 真 实 感 图 形 学 中, 通 过 阴 影 可 以 反 映 出 物 体 之 间 的 相 互 位 置 关 系, 增 加 图 形 图 像 的 立 体 效 果, 极 大 地 增 强 真 实 感 阴 影 可 以 分 为 本 影 和 半 影 本 影 是 指 物 体 表 面 上 那 些 没 有 被 任 何 光 源 直 接 照 射 到 的 部 分, 半 影 是 指 物 体 表 面 上 那 些 被 某 些 特 定 光 源 或 特 定 光 源 的 一 部 分 直 接 照 射 到, 但 不 是 被 所 有 光 源 直 接 照 射 到 的 部 分 如 图 6 唱 13 所 示, 显 然 单 个 点 光 源 照 明 只 能 形 成 本 影, 线 面 光 源 或 多 个 点 光 源 照 明 才 能 形 成 半 影

178 真 实 感 图 形 的 生 成 技 术 第 6 章 165 图 6 唱 13 面 光 源 照 明 形 成 本 影 和 半 影 物 体 表 面 上 阴 影 区 域 的 形 成 实 际 上 是 因 为 其 他 物 体 对 光 源 的 遮 挡, 使 得 物 体 表 面 上 某 些 区 域 不 能 被 光 源 直 接 照 射 或 者 这 些 区 域 只 能 被 光 源 的 少 量 光 线 照 射 到, 从 而 物 体 表 面 上 这 些 区 域 显 得 比 较 暗, 因 此 可 以 说 物 体 表 面 上 的 阴 影 区 域 只 不 过 是 物 体 表 面 上 亮 度 比 较 暗 的 区 域 而 已 由 于 在 视 线 方 向 可 能 存 在 物 体 相 互 遮 挡, 因 此 物 体 表 面 上 的 阴 影 区 域 可 能 可 见, 也 可 能 不 可 见, 还 可 能 是 部 分 可 见 在 进 行 场 景 绘 制 时, 往 往 是 先 利 用 消 隐 技 术 确 定 物 体 表 面 的 可 见 部 分 或 者 是 像 素 所 对 应 的 物 体 表 面 上 的 可 见 点, 然 后 应 用 光 照 模 型 计 算 物 体 表 面 上 可 见 点 的 亮 度, 这 时 如 果 根 据 光 源 是 否 可 以 直 接 照 射 到 物 体 表 面 上 当 前 可 见 点 来 取 舍 光 源 的 照 明 效 果, 则 绘 制 出 来 的 图 像 具 有 阴 影 的 效 果 判 断 光 源 是 否 可 以 直 接 照 射 到 物 体 表 面 上 当 前 可 见 点 只 需 要 从 该 点 出 发 向 光 源 发 一 射 线, 如 果 射 线 抵 达 光 源 前 与 场 景 中 其 他 物 体 表 面 相 交, 则 光 源 不 能 直 接 照 射 到 当 前 点 按 照 这 种 思 路, 光 线 投 射 算 法 和 光 线 追 踪 算 法 都 可 以 用 于 阴 影 的 生 成 对 光 线 投 射 算 法 而 言, 如 果 光 源 不 能 直 接 照 射 到 像 素 所 对 应 的 物 体 表 面 上 的 可 见 点, 则 物 体 表 面 上 当 前 可 见 点 的 亮 度 只 包 含 环 境 光 反 射 项 对 光 线 追 踪 算 法 而 言, 如 果 光 源 不 能 直 接 照 射 到 当 前 追 踪 到 的 物 体 表 面 上 的 点, 则 该 点 反 射 的 光 亮 度 只 包 括 简 单 光 照 模 型 中 的 环 境 光 反 射 项 来 自 其 他 物 体 经 当 前 表 面 镜 面 反 射 的 光 亮 度 以 及 来 自 其 他 物 体 经 当 前 表 面 规 则 透 射 的 光 亮 度 由 于 计 算 的 复 杂 性, 一 般 应 用 中 只 考 虑 单 个 光 源 下 本 影 生 成 下 面 介 绍 的 两 种 阴 影 生 成 算 法 都 是 在 相 应 消 隐 算 法 基 础 上, 以 不 同 的 策 略 来 判 断 光 源 是 否 可 以 直 接 照 射 像 素 所 对 应 的 物 体 上 的 可 见 点, 以 便 合 适 地 计 算 该 可 见 点 亮 度 使 最 终 绘 制 出 来 的 图 像 具 有 阴 影 的 效 果 影 域 多 边 形 方 法 以 下 的 讨 论 假 设 物 体 以 多 边 形 的 形 式 表 达 在 物 空 间 中, 按 照 阴 影 的 定 义, 若 光 源 照 射 到 的 物 体 表 面 是 不 透 明 的, 那 么 在 该 表 面 后 面 就 会 形 成 一 个 三 维 的 阴 影 区 域, 任 何 包 含 于 阴 影 区 域 内 的 物 体 表 面 必 然 是 阴 影 区 域 用 视 景 体 ( 四 棱 台 或 长 方 体 ) 对 上 述 三 维 阴

179 计 算 机 图 形 学 166 影 区 域 进 行 裁 剪, 那 么 裁 剪 后 得 到 的 三 维 阴 影 域 就 会 变 成 封 闭 多 面 体, 称 之 为 影 域 多 面 体 组 成 影 域 多 面 体 的 多 边 形 称 为 影 域 多 边 形 通 过 这 种 方 法 得 到 物 体 的 影 域 多 面 体 后, 可 以 利 用 它 们 来 确 定 场 景 中 的 阴 影 区 域, 对 于 场 景 中 的 物 体, 只 要 与 这 些 影 域 多 面 体 进 行 三 维 布 尔 交 运 算, 计 算 出 的 交 集 就 可 以 被 定 为 物 体 表 面 的 阴 影 区 域 该 算 法 中 涉 及 大 量 的 复 杂 三 维 布 尔 运 算, 物 体 必 须 与 场 景 中 的 每 一 个 相 对 光 源 可 见 的 面 的 影 域 多 面 体 进 行 求 交 运 算, 算 法 的 计 算 复 杂 度 是 相 当 可 观 的 如 何 有 效 地 判 定 一 个 物 体 表 面 是 否 包 含 在 影 域 多 面 体 之 内 是 算 法 实 施 的 关 键 Crow 于 1977 年 提 出 了 基 于 扫 描 线 隐 藏 面 消 除 的 算 法 来 生 成 阴 影 他 的 做 法 是 将 影 域 多 边 形 作 为 假 想 的 面 和 景 物 多 边 形 一 起 参 加 扫 描 和 排 序, 对 于 每 一 条 扫 描 线, 可 以 计 算 出 扫 描 水 平 面 和 影 域 多 面 体 及 景 物 多 边 形 的 交 线, 其 中 与 影 域 多 面 体 的 交 线 是 封 闭 多 边 形, 与 景 物 多 边 形 的 交 线 是 一 条 线 段, 利 用 该 线 段 和 封 闭 多 边 形 在 视 线 方 向 上 的 相 互 遮 挡 关 系, 可 以 很 方 便 地 确 定 在 该 扫 描 线 上 景 物 表 面 是 否 是 阴 影 区 域 由 于 这 个 阴 影 生 成 算 法 只 要 在 传 统 的 扫 描 线 隐 藏 面 消 除 算 法 基 础 上 对 扫 描 线 内 循 环 部 分 稍 加 改 进 即 可 实 现, 因 而 它 获 得 了 广 泛 的 应 用 Z 缓 冲 方 法 众 所 周 知,Z 缓 冲 器 消 除 隐 藏 面 算 法 中 有 两 个 缓 冲 器, 一 是 帧 缓 冲 器, 另 一 是 Z 缓 冲 器 消 隐 完 成 时,Z 缓 冲 器 中 存 放 的 是 离 视 点 最 近 的 景 物 点 的 深 度 值 如 果 这 时 的 视 点 恰 好 在 光 源 处, 则 Z 缓 冲 器 中 存 放 的 就 是 离 光 源 最 近 的 景 物 点 的 深 度 值 这 时 对 场 景 中 任 何 一 个 景 物 点, 要 判 断 光 源 是 否 可 以 直 接 照 射 到 它, 等 价 于 视 点 能 否 看 到 它 这 只 需 进 行 深 度 测 试, 即 将 景 物 点 在 上 述 观 察 坐 标 系 下 的 Z 值 和 Z 缓 冲 器 中 相 应 的 深 度 值 进 行 比 较, 如 果 前 者 小 则 说 明 光 源 不 能 直 接 照 射 到 景 物 点 上 面 说 明 的 是 一 种 特 殊 位 置 ( 即 视 点 在 光 源 位 置 处 ) 下 的 Z 缓 冲 器 中 的 深 度 信 息 用 来 判 断 光 源 是 否 可 以 直 接 照 射 到 景 物 点 而 一 般 情 况 下 进 行 场 景 的 绘 制, 视 点 并 不 在 光 源 处, 为 了 采 用 上 述 方 法 判 断 光 源 是 否 可 以 直 接 照 射 到 景 物 点, 进 而 绘 制 出 具 有 阴 影 效 果 的 图 形, 可 以 采 取 以 下 两 个 步 骤 予 以 实 现 : 第 一 步, 以 光 源 为 视 点, 场 景 中 心 为 观 察 参 考 点 建 立 光 源 坐 标 系, 利 用 Z 缓 冲 器 消 隐 算 法 对 景 物 进 行 消 隐, 在 消 隐 过 程 中 无 须 考 虑 帧 缓 冲 区 的 赋 值, 消 隐 完 成 后,Z 缓 冲 器 ( 称 为 阴 影 缓 冲 器 ) 中 存 储 的 是 离 光 源 最 近 的 景 物 点 的 深 度 值 第 二 步, 按 照 真 正 需 要 的 视 点 视 线 方 向 用 Z 缓 冲 器 消 隐 算 法 计 算 画 面 在 计 算 每 一 个 像 素 所 对 应 景 物 点 的 亮 度 时, 为 生 成 阴 影 效 果, 需 要 判 断 光 源 是 否 可 以 直 接 照 射 到 该 景 物 点 这 时 将 景 物 点 变 换 到 光 源 坐 标 系, 并 求 出 与 景 物 点 相 对 应 的 阴 影 缓 冲 器 单 元, 比 较 景 物 点 在 光 源 坐 标 系 下 的 Z 值 和 相 应 阴 影 缓 冲 器 单 元 中 的 深 度 值, 如 果 前 者 小, 则 说 明 光 源 不 能 直 接 照 射 到 景 物 点, 该 景 物 点 处 于 阴 影 中, 此 后 在 景 物 点 的 光 亮 度 计 算 中 舍 去 光 源 的 照 明 效 果 如 果 场 景 中 存 在 多 个 光 源, 上 述 Z 缓 冲 器 方 法 用 于 阴 影 的 生 成 仍 是 可 行 的, 只 需 要

180 真 实 感 图 形 的 生 成 技 术 为 每 个 光 源 建 立 一 个 阴 影 缓 冲 器, 然 后 在 计 算 景 物 点 亮 度 时 逐 一 判 断 各 个 光 源 是 否 可 以 直 接 照 射 到 该 景 物 点, 从 而 取 舍 各 个 光 源 的 照 明 效 果 第 6 章 6.5 图 形 反 走 样 技 术 167 在 光 栅 显 示 器 上 显 示 直 线 段 或 曲 线 段 时, 显 示 出 来 的 直 线 段 曲 线 段 总 是 或 多 或 少 地 呈 现 锯 齿 状 究 其 原 因 在 于 直 线 段 曲 线 段 本 身 是 连 续 的, 而 光 栅 设 备 是 离 散 的, 即 它 只 有 有 限 个 像 素, 为 了 用 这 有 限 个 像 素 表 示 连 续 的 直 线 段 曲 线 段 就 必 须 对 直 线 段 曲 线 段 进 行 采 样, 最 终 在 光 栅 显 示 器 上 表 示 直 线 段 或 曲 线 段 的 只 是 一 个 个 离 散 的 有 一 定 面 积 的 像 素 这 种 用 离 散 量 表 示 连 续 量 引 起 的 失 真 现 象 称 之 为 走 样 ( aliasing) 用 于 减 少 或 消 除 这 种 失 真 现 象 的 技 术 称 为 反 走 样 ( antialiasing) 光 栅 图 形 的 走 样 现 象 除 了 锯 齿 状 的 边 界 外, 还 有 图 形 细 节 失 真 ( 图 形 中 的 那 些 比 像 素 更 窄 的 细 节 变 宽 ), 狭 小 图 形 遗 失 等 现 象 一 般 地, 只 要 在 生 成 图 形 时 采 用 点 采 样 技 术, 都 会 导 致 图 形 走 样 现 象 发 生 因 此 从 根 本 上 说, 反 走 样 的 方 法 有 两 种, 一 种 是 提 高 采 样 率, 也 即 提 高 屏 幕 分 辨 率 由 于 屏 幕 分 辨 率 的 提 高 受 光 栅 显 示 器 硬 件 条 件 的 诸 多 限 制, 因 此 通 常 的 办 法 是 以 高 于 显 示 分 辨 率 的 精 度 对 画 面 进 行 计 算, 然 后 以 某 种 方 式 取 平 均 获 得 低 分 辨 率 的 显 示 图 像 另 一 种 方 法 是 把 像 素 看 成 一 个 区 域, 而 不 是 一 个 点, 进 行 区 域 采 样 下 面 对 真 实 感 图 形 生 成 过 程 中 可 能 遇 到 的 图 形 走 样 问 题 进 行 简 单 的 讨 论 Z 缓 冲 器 消 隐 算 法 的 基 本 思 想 是 在 像 素 级 上 以 近 物 取 代 远 物 它 首 先 对 多 边 形 进 行 扫 描 转 换, 然 后 对 多 边 形 所 覆 盖 的 每 个 像 素 进 行 深 度 测 试, 这 时 像 素 的 深 度 一 般 取 的 是 像 素 中 心 所 对 应 多 边 形 上 点 在 观 察 坐 标 系 下 的 Z 值, 即 点 采 样 然 而 像 素 实 际 上 是 一 块 屏 幕 区 域, 它 对 应 投 影 平 面 上 一 块 区 域, 进 而 对 应 场 景 中 的 一 个 区 域, 如 果 场 景 在 这 个 区 域 中 包 含 多 边 形 A 的 边 界 以 及 比 多 边 形 A 相 距 视 点 稍 远 的 另 一 个 多 边 形 B 的 内 部 区 域, 此 时 像 素 的 内 容 为 图 6 唱 14, 在 对 多 边 形 A 扫 描 转 换 时,Z 缓 冲 器 中 该 像 素 的 深 度 记 为 像 素 中 心 对 应 多 边 形 A 上 点 在 观 察 坐 标 系 下 的 Z 值, 在 对 多 边 形 B 扫 描 转 换 时, 该 像 素 中 心 对 应 多 边 形 B 上 点 在 观 察 坐 标 系 下 的 Z 值 小 于 Z 缓 冲 器 中 该 像 素 的 深 度, 因 而 该 像 素 的 颜 色 完 全 由 像 素 中 心 对 应 多 边 形 A 上 点 的 颜 色 决 定 当 多 边 形 A B 落 在 该 像 素 区 域 内 的 部 分 实 际 亮 度 不 一 致 时, 仅 用 像 素 中 心 对 应 多 边 形 A 上 点 处 的 亮 度 来 代 替 整 个 像 素 的 亮 度 就 会 产 生 图 形 走 样 现 象 解 决 上 述 问 题, 一 个 理 想 的 办 法 是 求 出 像 素 内 各 可 见 物 体 所 占 据 的 面 积, 然 后 对 这 些 物 体 的 光 亮 度 进 行 面 积 加 权 平 均 比 如 图 6 唱 14 中,B 占 据 约 3/5 的 面 积, 而 A 占 据 2/5 的 面 积, 则 像 素 的 颜 色 应 取 为 C = 3 5 C B C A 为 求 出 像 素 内 各 可 见 物 体 所 占 据 的 面 积 和 进 行 最 终 的 对 这 些 物 体 的 光 亮 度 进 行 面 积 加 权 平 均, 必 须 在 对 每 个 多 边 形 扫 描 转 换 时, 在 所 覆 盖 的 像 素 上 不 应 该 笼 统 地 记 录 像 素 的 深 度 值 和 颜 色 值, 而 是

181 计 算 机 图 形 学 168 应 该 更 细 化 地 记 录 如 当 前 多 边 形 在 像 素 内 实 际 覆 盖 位 置 多 边 形 颜 色 多 边 形 标 志 多 边 形 在 像 素 内 的 最 大 和 最 小 深 度 值 等 信 息, 由 于 一 个 像 素 将 会 被 多 个 多 边 形 扫 描 转 换 时 遇 到, 因 此 每 个 像 素 将 对 应 一 个 由 保 存 上 述 信 息 的 节 点 构 成 的 链 表 Z 缓 冲 器 算 法 就 是 一 个 基 于 上 述 思 路 设 计 的 用 于 减 少 消 隐 时 图 像 失 真 的 反 走 样 算 法 关 于 Z 缓 冲 器 算 法 详 细 的 技 术 细 节 请 参 考 更 深 入 的 图 形 学 著 作 前 面 介 绍 的 光 线 追 踪 算 法 是 一 种 典 型 的 点 采 样 技 术, 它 从 视 点 向 像 素 中 心 对 应 投 影 平 面 上 的 点 发 出 采 样 光 线, 忽 略 了 像 素 实 际 对 应 物 体 表 面 上 一 个 区 域, 更 糟 糕 的 是 有 可 能 对 应 场 景 中 多 个 物 体 表 面 的 一 部 分, 当 物 体 表 面 上 这 个 区 域 的 亮 度 变 化 大, 或 多 个 物 体 表 面 的 相 应 部 分 的 亮 度 不 一 致, 仅 以 用 像 素 中 心 发 出 的 光 线 采 样 获 得 的 亮 度 来 代 图 6 唱 14 点 采 样 的 图 形 走 样 替 整 个 像 素 的 亮 度 ( 或 者 说 像 素 所 对 应 场 景 区 域 的 亮 度 ) 就 会 产 生 图 形 走 样 现 象 为 改 善 点 采 样 时 造 成 的 图 形 走 样 现 象, 可 以 使 用 像 素 递 归 细 分 技 术 先 将 像 素 细 分 为 4 个 子 像 素, 分 别 对 4 个 子 像 素 进 行 光 线 追 踪, 如 果 4 个 子 像 素 上 追 踪 得 到 的 光 亮 度 大 致 相 等, 则 对 4 个 子 像 素 的 光 亮 度 取 平 均 作 为 原 像 素 的 光 亮 度, 否 则, 对 每 个 子 像 素 进 一 步 细 分 为 4 个 更 小 的 子 像 素, 对 更 小 的 子 像 素 进 行 光 线 追 踪, 继 续 下 去, 直 至 在 某 一 级 别 上 的 4 个 子 像 素 光 亮 度 大 致 相 等, 然 后 求 4 个 子 像 素 光 亮 度 的 平 均 值 作 为 上 一 级 别 相 应 子 像 素 的 亮 度, 如 此 回 溯 下 去, 可 以 求 得 最 初 像 素 的 光 亮 度 这 实 质 上 就 是 以 高 于 显 示 分 辨 率 的 精 度 对 画 面 进 行 计 算, 然 后 以 某 种 方 式 取 平 均 获 得 低 分 辨 率 的 显 示 图 像 在 实 际 应 用 时 可 以 从 像 素 的 4 个 角 点 发 出 光 线 计 算 出 光 亮 度 作 为 子 像 素 的 光 亮 度, 这 时 在 像 素 递 归 细 分 过 程 中 由 于 许 多 的 采 样 光 线 是 相 同 的, 因 而 可 以 节 省 很 大 的 计 算 量 纹 理 映 射 过 程 中 出 现 的 图 形 走 样 主 要 是 指 在 获 取 像 素 所 对 应 物 体 表 面 上 区 域 的 纹 理 属 性 值 时 采 取 点 采 样 的 方 式 造 成 的 图 形 走 样, 即 简 单 地 以 像 素 中 心 所 对 应 的 物 体 表 面 上 的 位 置 作 为 纹 理 检 索 条 件, 以 检 索 到 的 该 位 置 处 的 纹 理 属 性 值 作 为 像 素 所 对 应 物 体 表 面 上 区 域 的 纹 理 属 性 值 事 实 上 按 照 纹 理 映 射 关 系, 像 素 所 对 应 物 体 表 面 上 的 区 域 映 射 到 纹 理 空 间 中 也 应 该 是 一 个 区 域, 而 不 是 一 个 点, 因 此 以 纹 理 空 间 中 对 应 的 纹 理 子 区 域 中 的 平 均 纹 理 属 性 值 作 为 像 素 所 对 应 物 体 表 面 区 域 的 纹 理 属 性 值 有 助 于 减 轻 图 形 走 样 6.6 用 OpenGL 生 成 真 实 感 图 形 利 用 OpenGL 提 供 的 函 数 可 以 方 便 地 实 现 图 形 绘 制 过 程 中 的 隐 藏 面 消 除, 以 及 物 体 表 面 亮 度 的 光 照 计 算, 还 可 以 实 现 纹 理 映 射, 从 而 生 成 具 有 真 实 感 的 图 形

182 真 实 感 图 形 的 生 成 技 术 OpenGL 中 隐 藏 面 的 消 除 采 用 的 是 Z 缓 冲 器 算 法 OpenGL 在 实 现 基 本 图 元 ( 如 点 线 段 三 角 形 多 边 形 ) 的 绘 制 时, 图 元 所 覆 盖 的 每 个 像 素 的 颜 色 是 否 由 当 前 图 元 决 定, 取 决 于 当 前 图 元 在 像 素 处 的 深 度 和 Z 缓 冲 器 中 相 应 位 置 处 深 度 值 的 比 较 OpenGL 提 供 glenable(gl_depth_test ) 和 gldisable(gl_depth_test ) 形 式 的 函 数 调 用 来 打 开 和 禁 止 深 度 测 试 当 深 度 测 试 表 明 像 素 的 颜 色 应 该 由 当 前 图 元 决 定, 为 了 获 得 真 实 感 图 形, 此 时 就 要 根 据 场 景 中 的 光 照 条 件 计 算 像 素 所 对 应 的 当 前 图 元 上 点 的 亮 度 OpenGL 提 供 glenable(gl _LIGHTING) 和 gldisable(gl_lighting) 形 式 的 函 数 调 用 来 打 开 和 禁 止 光 照 计 算, 如 果 光 照 计 算 被 禁 止, 则 像 素 的 颜 色 简 单 地 取 为 指 定 的 前 景 色 如 果 允 许 进 行 光 照 计 算, 则 OpenGL 内 部 将 根 据 场 景 中 的 光 源 物 体 视 点 的 位 置, 按 照 一 定 的 光 照 模 型, 计 算 出 像 素 所 对 应 的 当 前 图 元 上 点 的 亮 度 只 有 对 OpenGL 所 采 用 的 光 照 模 型 有 所 了 解, 才 能 在 利 用 OpenGL 相 关 函 数 设 置 光 源 物 体 材 质 等 属 性 时 有 的 放 矢, 使 OpenGL 渲 染 出 来 的 图 像 具 有 期 望 的 效 果 OpenGL 进 行 光 照 计 算 时 采 用 的 光 照 模 型 属 于 简 单 光 照 模 型, 它 只 考 虑 光 源 直 接 照 射 下 物 体 表 面 的 反 射, 不 考 虑 光 在 物 体 间 的 反 射 和 光 的 透 射 OpenGL 进 行 光 照 计 算 时 不 考 虑 物 体 对 光 的 可 能 遮 挡, 因 此 阴 影 不 会 自 动 产 生 OpenGL 认 为 物 体 表 面 的 反 射 光 包 含 3 个 分 量 : 物 体 本 身 发 出 的 光, 对 环 境 光 的 反 射, 对 特 定 光 源 的 反 射 1 物 体 本 身 发 出 的 光 OpenGL 认 为 物 体 本 身 是 可 以 发 光 的, 但 是 这 种 光 只 会 对 物 体 本 身 的 亮 度 产 生 影 响, 它 不 能 像 光 源 那 样 影 响 其 他 物 体 的 光 亮 度 物 体 本 身 发 出 的 光 记 为 I emit 2 对 环 境 光 的 反 射 这 里 的 环 境 光 指 的 是 全 局 环 境 光, 它 不 依 赖 于 任 何 特 定 光 源 全 局 环 境 光 概 念 的 提 出 使 得 即 使 场 景 中 没 有 任 何 光 源, 观 察 者 也 可 以 看 到 物 体 假 设 全 局 环 境 光 亮 度 I global, 物 体 表 面 的 环 境 光 反 射 系 数 为 K a, 则 物 体 对 全 局 环 境 光 的 反 射 为 K a I global 3 对 特 定 光 源 的 反 射 OpenGL 认 为 特 定 光 源 的 存 在 会 或 多 或 少 的 增 强 场 景 中 环 境 光 的 亮 度, 使 得 物 体 即 使 不 能 被 特 定 光 源 照 射 到, 如 物 体 背 向 光 源, 看 起 来 也 将 比 无 特 定 光 源 时 亮 些 又 由 于 特 定 光 源 的 存 在, 物 体 表 面 将 会 产 生 漫 反 射 和 镜 面 反 射 因 此 OpenGL 根 据 光 源 对 场 景 照 明 起 到 的 几 种 贡 献, 将 特 定 光 源 的 光 亮 度 分 为 3 种 分 量, 分 别 是 环 境 光 分 量 I a, 漫 反 射 光 分 量 I d, 镜 面 光 分 量 I s, 物 体 表 面 对 特 定 光 源 的 反 射 光 亮 度 可 以 用 下 式 表 示 : I =K a I a +K d I d cos(θ) +K s I s cos n (α) (6 唱 10) 等 号 右 边 的 3 项 依 次 是 物 体 表 面 对 特 定 光 源 的 环 境 光 反 射 项 漫 反 射 项 镜 面 反 射 项 K a K d K s 分 别 是 物 体 表 面 的 环 境 光 反 射 系 数 漫 反 射 系 数 镜 面 反 射 系 数 θ,α 的 含 义 见 图 6 唱 15 n 为 物 体 表 面 对 镜 面 反 射 光 的 会 聚 指 数 第 6 章 169

183 计 算 机 图 形 学 D:\10-24\ 新 建 文 件 夹 \ 计 算 机 图 形 学 ( 普 通 高 等 院 校 计 算 机 专 业 ( 本 科 ) 实 用 教 程 系 列 )\0 170 图 6 唱 15 入 射 角 θ 视 线 和 反 射 光 线 夹 角 α 示 意 图 6 唱 16 聚 光 灯 在 OpenGL 中, 光 源 被 定 义 为 聚 光 灯, 如 图 6 唱 16, 定 义 一 个 聚 光 灯 需 要 指 定 光 源 的 位 置 ( 即 锥 顶 ), 聚 光 灯 的 方 向 ( 即 圆 锥 轴 的 方 向 ), 聚 光 灯 的 散 射 角 ( 即 圆 锥 中 轴 和 边 的 夹 角 0, π 2 ) 聚 光 灯 将 光 的 发 射 形 状 调 整 为 圆 锥 形, 此 时 空 间 光 强 度 分 布 可 以 用 聚 光 灯 光 强 分 布 系 数 C spotlight 乘 以 锥 顶 处 聚 光 灯 光 强 给 出, 其 中 0 如 果 空 间 点 不 在 聚 光 灯 的 光 锥 内 C spotlight = cos k 矱 如 果 空 间 点 在 聚 光 灯 的 光 锥 内 ( 其 中 k 是 聚 光 指 数, 矱 为 光 锥 顶 点 向 空 间 点 连 线 与 光 锥 中 轴 夹 角 ) 1 特 别 地, 如 果 把 点 光 源 看 成 聚 光 灯 另 外, 光 沿 直 线 传 播 时 能 量 会 衰 减,OpenGL 实 现 中 将 光 沿 直 线 传 播 时 的 衰 减 因 子 定 义 为 1, 其 中 K K c +K l d +K q d 2 c K l K q 分 别 为 常 量 线 性 二 次 的 衰 减 系 数,d 为 光 的 传 播 距 离 前 面 提 到 的 环 境 光 分 量 I a 漫 反 射 光 分 量 I d 和 镜 面 光 分 量 I s 是 聚 光 灯 ( 点 光 源 作 为 聚 光 灯 特 例 ) 在 光 源 处 的 光 亮 度 分 解, 考 虑 到 聚 光 灯 光 强 度 空 间 分 布 和 光 沿 直 线 传 播 的 衰 减 性, 物 体 表 面 对 特 定 光 源 的 反 射 光 亮 度 可 在 式 (6 唱 10) 的 基 础 上 修 改 为 : 1 I = C spotlight (K K c +K ld +K q d 2 a I a +K d I d cosθ +K s I s cos n α) (6 唱 11) 这 里 d 为 光 源 到 物 体 表 面 的 距 离 综 合 以 上 3 个 分 量, 在 OpenGL 中, 物 体 表 面 的 反 射 光 亮 度 为 : I =I emit +K a I global 1 + C spotlight ( K K c +K l d +K q d 2 a I a +K d I d cosθ +K si scos n α) (6 唱 12) 如 果 场 景 中 存 在 多 个 聚 光 灯, 则 物 体 表 面 的 反 射 光 亮 度 为 : 1 I =I emit +K a I global + C spotlight (K 所 有 聚 光 灯 K c +K l d +K q d 2 a I a +K d I d cosθ +K s I s cos n α) (6 唱 13)

184 真 实 感 图 形 的 生 成 技 术 为 减 小 计 算 量 同 时 又 保 证 物 体 表 面 光 亮 度 连 续, OpenGL 在 绘 制 多 边 形 时 采 用 Gouraud 明 暗 处 理 方 法, 即, 利 用 式 (6 唱 13) 计 算 出 多 边 形 顶 点 的 光 亮 度, 多 边 形 内 部 点 的 光 亮 度 由 顶 点 的 光 亮 度 插 值 计 算 出 如 果 追 求 最 小 的 计 算 量,OpenGL 还 可 以 将 整 个 多 边 形 的 亮 度 简 单 地 取 为 某 个 特 定 顶 点 的 光 亮 度 以 上 两 种 多 边 形 亮 度 计 算 方 式 可 以 分 别 通 过 glshademodel(gl_smooth) 和 glshademodel(gl_ FLAT) 形 式 的 函 数 调 用 来 设 置 OpenGL 实 现 光 照 计 算 时 将 在 R G B 这 3 个 颜 色 分 量 上 分 别 进 行, 此 时 式 (6 唱 13) 可 以 写 成 : r g b = r emit g emit b emit +K a r global g global b global + 所 有 聚 光 灯 K c 1 C +K l d +K q d 2 spotlight 第 6 章 171 K a g a r a +K d r d g d cosθ +K s r s g s n cos α (6 唱 14) b a b d b s OpenGL 实 现 中 认 为 K a K d K s 作 为 物 体 表 面 的 环 境 光 反 射 系 数 漫 反 射 系 数 镜 面 反 射 系 k a r k d r k sr 数, 可 以 分 别 用 3 个 分 量 表 示, 如 K a = k a g k a b,k d = k d g k d b,k s = k s g k s b, 此 时 式 (6 唱 14) 进 一 步 写 成 : r g b = r emit g emit b emit + k a r k a g k a b 磗 r global g global b global + 所 有 聚 光 灯 K c 1 C +K l d +K q d 2 spotlight k a r r a k d r r d k s r r s k a g 磗 g a + k d g 磗 g d cosθ + k s g 磗 g s n cos α (6 唱 15) k a b b a k d b b d k s b b s a 1 b 1 a 1 b 1 这 里 磗 运 算 符 定 义 为 两 个 向 量 的 对 应 分 量 相 乘, 即 a 2 磗 b 2 = a 2 b 2 式 (6 唱 15) 就 a 3 b 3 a 3 b 3 是 OpenGL 实 现 时 采 用 的 光 照 计 算 公 式 OpenGL 的 光 照 环 境 设 置 方 法 根 据 式 (6 唱 15), 知 道 OpenGL 在 进 行 光 照 计 算 时 需 要 用 到 特 定 光 源 ( 聚 光 灯 ) 的 如 下

185 计 算 机 图 形 学 属 性 : r a r d r s 172 光 源 的 环 境 光 分 量 g a b a, 光 源 漫 反 射 光 分 量 g d b d, 光 源 的 镜 面 光 分 量 g s b s, 以 及 聚 光 灯 的 位 置 方 向 散 射 角 聚 光 指 数 k, 还 有 光 线 沿 直 线 传 播 时 的 常 量 线 性 二 次 的 衰 减 系 数 K c K l K q 因 此 OpenGL 提 供 了 一 组 函 数 用 于 设 置 光 源 的 上 述 各 个 属 性 这 组 函 数 具 有 统 一 的 函 数 声 明 : void gllight 倡 (GLenum light, GLenum pname, TYPE param), 其 中,light 表 示 当 前 被 设 置 的 光 源 的 标 识, 可 以 取 符 号 常 量 GL_LIGHT0 GL_LIGHT1 GL_LIGHT7;pname 表 示 将 要 对 光 源 的 哪 个 属 性 进 行 设 置, 可 以 取 代 表 光 源 属 性 的 相 应 符 号 常 量, 见 表 6 唱 1;Param 是 pname 所 标 识 属 性 项 的 期 望 值 gllight 倡 实 际 上 可 以 是 gllighti gllightf gllightiv gllightfv, 与 此 对 应, 函 数 声 明 中 的 参 数 类 型 TYPE 应 为 int float int 倡 float 倡 表 6 唱 1 代 表 光 源 属 性 的 符 号 常 量 及 其 含 义 符 号 常 量 GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_POSITION GL_SPOT_DIRECTION GL_SPOT_CUTOFF GL_SPOT_EXPONENT GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION 符 号 常 量 所 代 表 的 光 源 属 性 项 光 源 的 环 境 光 分 量 光 源 的 漫 反 射 光 分 量 光 源 的 镜 面 光 分 量 光 源 的 位 置 聚 光 灯 方 向 聚 光 灯 的 散 射 角 聚 光 灯 的 聚 光 指 数 光 源 沿 直 线 传 播 时 的 常 量 衰 减 系 数 K c 光 源 沿 直 线 传 播 时 的 线 性 衰 减 系 数 K l 光 源 沿 直 线 传 播 时 的 二 次 衰 减 系 数 K q 下 面 的 代 码 展 示 了 如 何 使 用 gllight 倡 () 来 定 义 光 源 GL_LIGHT0 的 各 个 属 性 : GLfloat light_ambient[] ={ 0.2, 0.2, 0.2, 1.0 }; GLfloat light_diffuse[] ={ 1.0, 1.0, 1.0, 1.0 }; GLfloat light_specular[] ={ 1.0, 1.0, 1.0, 1.0 }; GLfloat light_position[] ={ -2.0, 2.0, 1.0, 1.0 }; GLfloat spot_direction[] ={ -1.0, -1.0, 0.0 };

186 真 实 感 图 形 的 生 成 技 术 gllightfv(gl_light0, GL_AMBIENT, light_ambient); gllightfv(gl_light0, GL_DIFFUSE, light_diffuse); gllightfv(gl_light0, GL_SPECULAR, light_specular); gllightfv(gl_light0, GL_POSITION, light_position); gllightfv(gl_light0, GL_SPOT_DIRECTION, spot_direction); gllightf(gl_light0, GL_SPOT_CUTOFF, 45.0); gllightf(gl_light0, GL_SPOT_EXPONENT, 2.0); 第 6 章 173 gllightf(gl_light0, GL_CONSTANT_ATTENUATION, 1.5); gllightf(gl_light0, GL_LINEAR_ATTENUATION, 0.5); gllightf(gl_light0, GL_QUADRATIC_ATTENUATION, 0.2); 根 据 式 (6 唱 15), 知 道 OpenGL 在 进 行 光 照 计 算 时 还 需 要 用 到 全 局 环 境 光 r global g global, 因 b global 此 OpenGL 也 提 供 相 应 的 函 数 用 于 设 置 这 个 属 性 下 面 的 代 码 展 示 了 全 局 环 境 光 的 设 置 方 法 : GLfloat lmodel_ambient[] ={ 0.2, 0.2, 0.2, 1.0 }; gllightmodelfv(gl_light_model_ambient, lmodel_ambient);/ 倡 设 置 全 局 环 境 光 倡 / 通 过 上 述 介 绍 的 函 数 可 以 设 置 特 定 光 源 的 各 个 属 性 以 及 全 局 环 境 光, 但 是 要 使 OpenGL 真 正 进 行 光 照 计 算 还 必 须 使 用 命 令 glenable(gl_lighting) 显 式 启 用 光 照 计 算, 相 对 应 的,glDisable(GL_LIGHTING) 是 取 消 光 照 计 算 启 用 光 照 计 算 后, 要 使 已 经 定 义 好 的 某 个 光 源 GL_LIGHTi 真 正 参 与 光 照 计 算, 还 必 须 使 用 命 令 glenable( GL_LIGHTi) 显 式 打 开 它, 与 此 对 应 的,glDisable ( GL_LITHTi) 表 示 将 光 源 GL_LIGHTi 关 闭, 不 参 与 光 照 计 算 OpenGL 的 物 体 材 料 特 性 的 设 置 根 据 式 (6 唱 15), 知 道 OpenGL 在 进 行 光 照 计 算 时 需 要 用 到 物 体 表 面 材 质 的 环 境 光 反 k a r k d r k s r 射 系 数 k a g 漫 反 射 系 数 k d g 镜 面 反 射 系 数 k sg 镜 面 反 射 光 的 会 聚 指 数 n, 以 及 物 k a b k d b k sb r emit 体 表 面 材 质 的 发 射 光 g emit 因 此 OpenGL 提 供 了 一 组 函 数 用 于 设 置 物 体 表 面 材 质 的 上 b emit

187 计 算 机 图 形 学 174 述 各 个 属 性 这 组 函 数 具 有 统 一 的 函 数 声 明 : void glmaterial 倡 (GLenum face, GLenum pname, TYPE param); 其 中,face 表 示 材 质 应 该 贴 到 物 体 的 哪 个 表 面, 可 以 取 符 号 常 量 GL_FRONT GL_BACK 或 GL_FRONT_AND_BACK;pname 表 示 材 质 特 性, 可 以 取 标 识 材 质 特 性 的 符 号 常 量, 见 表 6 唱 2;Param 是 pname 所 标 识 材 质 特 性 的 期 望 值 glmaterial 倡 实 际 上 可 以 是 glmateriali glmaterialf glmaterialiv glmaterialfv, 与 此 对 应, 函 数 声 明 中 的 参 数 类 型 TYPE 应 为 int float int 倡 float 倡 表 6 唱 2 标 识 材 质 特 性 的 符 号 常 量 及 其 含 义 符 号 常 量 GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_SHININESS GL_EMISSION 符 号 常 量 所 对 应 的 材 质 特 性 环 境 光 反 射 系 数 漫 反 射 系 数 镜 面 反 射 系 数 镜 面 反 射 光 的 会 聚 指 数 材 质 的 发 射 光 下 面 的 代 码 展 示 了 如 何 使 用 glmaterial 倡 () 来 定 义 材 质 的 各 个 属 性 : GLfloat mat_ambient[] ={ 0.7, 0.7, 0.7, 1.0 }; GLfloat mat_diffuse[] ={ 0.1, 0.5, 0.8, 1.0 }; GLfloat mat_specular[] ={ 1.0, 1.0, 1.0, 1.0 }; GLfloat high_shininess[] ={ }; GLfloat mat_emission[] ={0.3, 0.2, 0.2, 0.0}; glmaterialfv(gl_front, GL_AMBIENT, mat_ambient); glmaterialfv(gl_front, GL_DIFFUSE, mat_diffuse); glmaterialfv(gl_front, GL_SPECULAR, mat_specular); glmaterialfv(gl_front, GL_SHININESS, high_shininess); glmaterialfv(gl_front, GL_EMISSION, mat_emission); OpenGL 的 纹 理 映 射 方 法 OpenGL 支 持 一 维 二 维 颜 色 纹 理 映 射, 某 些 特 定 的 OpenGL 实 现 还 支 持 三 维 四 维 纹 理 映 射 在 6 畅 3 节 中 指 出, 实 现 纹 理 映 射 的 两 个 基 础 工 作 是 定 义 纹 理 函 数 和 定 义 映 射 函 数, 这 两 个 工 作 的 完 成 意 味 着 在 数 学 上 保 证 了 物 体 表 面 上 任 何 一 点 都 对 应 着 一 个 纹 理 属 性 值, 余 下 的 工 作 就 是 如 何 具 体 应 用 映 射 函 数 实 现 纹 理 映 射 一 般 地,OpenGL 支 持 一 维 和 二 维 纹 理 函 数 的 定 义 在 OpenGL 中 纹 理 函 数 是 以 数 字 图 像 的 形 式 定 义 的, 这 实 际 上 是 纹 理 函 数 的 离 散 表 达 一 幅 m n 的 数 字 图 像 可 以 理 解

188 真 实 感 图 形 的 生 成 技 术 为 纹 理 函 数 在 其 定 义 域 [0,1] [0,1] 内 进 行 m n 个 点 的 均 匀 采 样 而 来 用 户 可 以 通 过 glteximage2d() 命 令 来 定 义 二 维 纹 理 ( 函 数 ), 用 glteximage1d() 来 定 义 一 维 纹 理 ( 函 数 ) 定 义 二 维 纹 理 的 函 数 声 明 为 : void glteximage2d ( GLenum target, GLint level, GLint components, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid 倡 pixels) 简 要 说 明 如 下,target 必 须 取 为 GL_TEXTURE_2D, 这 个 参 数 实 际 上 是 为 OpenGL 将 来 扩 展 预 留 的 ; level 表 示 纹 理 图 像 多 分 辨 率 层 数, 通 常 取 为 0;components 可 以 取 为 1 至 4 的 整 数, 用 来 确 定 每 个 纹 理 元 素 的 RGBA 分 量 中 哪 几 个 将 在 纹 理 映 射 中 真 正 被 使 用, 之 所 以 可 以 这 样 统 一 处 理, 是 因 为 无 论 用 户 最 初 提 供 何 种 格 式 ( 由 format 参 数 决 定 ) 的 图 像 数 据,OpenGL 内 部 都 将 转 化 为 RGBA 的 格 式 来 表 示 每 个 纹 理 元 素 这 里 1 的 含 义 是 使 用 R 分 量,2 表 示 使 用 R 和 A 分 量,3 表 示 使 用 R G B 分 量,4 表 示 使 用 RGBA 全 部 分 量 ; width 用 于 指 定 图 像 的 宽 ; height 用 于 指 定 图 像 的 高 ; border 表 示 图 像 的 边 界, 必 须 是 0 或 1 OpenGL 要 求 图 像 的 宽 高 都 必 须 是 2 k +2 border 形 式 的 数 pixels 指 向 内 存 中 用 户 给 出 的 图 像 数 据,type 表 示 pixels 所 指 向 的 用 户 图 像 数 据 在 内 存 中 的 格 式 format 表 示 用 户 给 出 的 图 像 数 据 本 身 的 逻 辑 格 式 format 和 type 只 能 是 OpenGL 可 以 识 别 的 格 式, 因 此 它 们 的 取 值 是 OpenGL 规 定 的 常 量 值 OpenGL 将 按 照 type 所 标 识 的 格 式 去 读 取 pixels 所 指 向 的 存 放 用 户 图 像 数 据 的 内 存 区 域, 并 按 照 format 所 标 识 的 逻 辑 格 式 去 理 解 这 些 数 据, 数 据 解 读 出 来 后,OpenGL 还 要 将 每 个 图 像 像 素 的 数 据 转 化 为 RGBA 形 式, 由 此 定 义 了 一 个 二 维 纹 理 更 详 细 的 说 明 参 见 相 关 的 OpenGL 技 术 文 档 OpenGL 提 供 了 两 种 方 式 来 建 立 物 体 表 面 上 点 和 纹 理 空 间 的 对 应 关 系, 一 种 方 式 是 在 绘 制 OpenGL 基 本 图 元 ( 如 线 段 三 角 形 多 边 形 ) 时 在 glvertex 倡 命 令 之 前 调 用 gltexcoord 倡 命 令 明 确 地 给 出 当 前 顶 点 所 对 应 的 纹 理 坐 标, 如 : glbegin(gl_polygon); gltexcoord2f(0.0, 0.0); glvertex3f( -2.0, -1.0, 0.0); gltexcoord2f(0.0, 3.0); glvertex3f( -2.0, 1.0, 0.0); gltexcoord2f(3.0, 3.0); glvertex3f(0.0, 1.0, 0.0); gltexcoord2f(3.0, 0.0); glvertex3f(0.0, -1.0, 0.0); glend(); 而 图 元 内 部 点 的 纹 理 坐 标 则 利 用 顶 点 处 的 纹 理 坐 标 采 用 线 性 插 值 的 方 法 计 算 出 来, 这 一 点 和 多 边 形 Gouraud 明 暗 处 理 时 内 部 点 的 颜 色 由 顶 点 的 颜 色 线 性 插 值 出 用 的 方 法 是 一 样 的 以 这 种 方 式 定 义 物 体 表 面 上 点 和 纹 理 空 间 的 对 应 关 系 实 际 上 是 以 离 散 的 形 式 给 出 了 映 射 函 数 另 一 种 方 式 是 OpenGL 内 部 定 义 了 几 种 类 型 的 纹 理 映 射 函 数, 用 户 可 以 通 过 第 6 章 175

189 计 算 机 图 形 学 176 gltexgen 倡 () 函 数 来 选 择 希 望 使 用 的 纹 理 映 射 函 数 类 型, 并 且 可 以 为 所 选 类 型 的 纹 理 映 射 函 数 指 定 系 数 由 于 二 维 纹 理 有 两 个 坐 标, 分 别 称 为 s 方 向 和 t 方 向, 因 此 用 户 可 以 分 别 为 这 两 个 方 向 指 定 不 同 的 纹 理 映 射 函 数 的 类 型 和 纹 理 映 射 函 数 的 系 数 以 这 种 方 式 定 义 物 体 表 面 上 点 和 纹 理 空 间 的 对 应 关 系 实 际 上 就 是 直 接 给 出 了 连 续 形 式 的 纹 理 映 射 函 数 由 于 无 须 为 基 本 图 元 的 每 个 顶 点 指 定 纹 理 坐 标, 在 OpenGL 中 这 种 方 式 也 称 为 自 动 纹 理 坐 标 生 成 至 于 希 望 OpenGL 采 用 哪 种 方 式 实 现 物 体 表 面 上 点 和 纹 理 空 间 的 对 应 关 系, 用 户 可 以 明 确 地 指 示 采 用 自 动 纹 理 坐 标 生 成 : glenable(gl_texture_gen_s) glenable(gl_texture_gen_t), 或 者 是 不 采 用 自 动 纹 理 坐 标 生 成 : gldisable(gl_texture_gen_s) gldisable (GL_TEXTURE_GEN_T) OpenGL 采 用 逆 向 纹 理 映 射 技 术 来 具 体 实 现 纹 理 映 射 当 一 个 基 本 的 OpenGL 图 元 ( 如 线 段 三 角 形 多 边 形 ) 被 光 栅 化 时,OpenGL 将 为 它 所 占 据 的 每 个 像 素 计 算 纹 理 坐 标, 由 于 二 维 纹 理 是 定 义 在 [0,1] [0,1] 上 的, 换 句 话 说, 每 个 方 向 (t 方 向 或 s 方 向 ) 上 的 纹 理 坐 标 是 限 制 在 [0,1] 上 的, 在 应 用 前 面 指 定 的 映 射 函 数 计 算 纹 理 坐 标 时, 很 有 可 能 得 到 的 纹 理 坐 标 的 某 分 量 不 在 [0,1] 上,OpenGL 提 供 了 两 种 方 式 处 理 纹 理 坐 标 值 不 在 [0,1] 内 的 情 形, 一 种 是 截 断, 另 一 种 是 重 复 截 断 是 指 如 果 纹 理 坐 标 值 不 在 [0,1] 内, 则 简 单 地 将 其 截 断, 即 如 果 s >1, 则 令 s =1, 如 果 s <0, 则 令 s =0, 这 样 使 得 纹 理 图 像 的 边 界 值 扩 展 到 图 元 中 那 些 纹 理 坐 标 不 在 [0,1] 范 围 内 的 区 域 中 ; 重 复 是 指 如 果 纹 理 坐 标 值 不 在 [0,1] 内, 则 将 纹 理 坐 标 值 的 整 数 部 分 舍 弃, 只 使 用 小 数 部 分, 这 样 使 得 纹 理 图 像 在 图 元 表 面 重 复 出 现 用 户 可 以 用 如 下 的 函 数 调 用 形 式 来 指 示 OpenGL 采 用 何 种 方 式 来 处 理 纹 理 坐 标 越 界 的 问 题 : gltexparameterf(gl_texture_2d,gl_texture_wrap_s, GL_ CLAMP); gltexparameterf(gl_texture_2d,gl_texture_wrap_s, GL_ REPEAT); 上 述 函 数 调 用 分 别 是 指 定 纹 理 坐 标 中 s 坐 标 采 取 截 断 处 理 方 式 和 采 取 重 复 处 理 方 式, 第 二 个 参 数 也 可 以 取 GL_TEXTURE_WRAP_T, 则 表 示 指 定 纹 理 坐 标 t 的 处 理 方 式 OpenGL 考 虑 到, 在 对 一 个 基 本 图 元 如 多 边 形 进 行 光 栅 化 时, 一 个 屏 幕 像 素 实 际 上 对 应 物 体 表 面 上 一 个 区 域, 而 不 是 一 个 点, 进 而 对 应 于 纹 理 空 间 中 一 个 区 域, 这 个 区 域 可 能 只 是 纹 理 空 间 中 某 个 纹 素 的 一 部 分, 称 为 放 大 的 情 形, 如 图 6 唱 17( a); 也 有 可 能 是 占 据 纹 理 空 间 中 多 个 纹 素, 称 为 缩 小 的 情 形, 如 图 6 唱 17(b) 针 对 这 些 情 况,OpenGL 提 供 了 多 种 滤 波 方 法 来 计 算 像 素 对 应 的 纹 理 属 性 值, 而 且 对 放 大 和 缩 小 情 形 可 以 设 置 不 同 的 滤 波 方 法 最 简 单 的 滤 波 方 法 是 点 采 样, 即 选 择 离 纹 理 坐 标 最 近 的 纹 素 的 属 性 值 通 常 点 采 样 的 方 法 很 难 给 出 满 意 的 结 果, 因 此 OpenGL 又 提 供 了 插 值 的 方 法, 对 于 放 大 的 情 形,

190 真 实 感 图 形 的 生 成 技 术 OpenGL 1.1 只 支 持 线 性 插 值 ; 对 于 缩 小 的 情 形,OpenGL 1.1 支 持 多 种 滤 波 方 法 用 户 可 以 用 如 下 的 函 数 调 用 形 式 来 分 别 指 示 OpenGL 在 处 理 放 大 和 缩 小 情 形 时 采 取 何 种 滤 波 方 式 来 计 算 纹 理 属 性 值 : gltexparameteri(gl_texture_2d,gl_texture_mag_filter,gl_nearest); gltexparameteri(gl_texture_2d,gl_texture_min_filter,gl_nearest); 第 6 章 177 其 中, 第 三 个 参 数 还 可 以 是 OpenGL 允 许 的 用 于 标 识 滤 波 方 法 的 其 他 符 号 常 量 图 6 唱 17 像 素 和 它 所 对 应 的 纹 理 区 域 在 6.3 节 中 指 出, 获 得 物 体 表 面 点 的 纹 理 属 性 值 后, 可 以 将 纹 理 属 性 值 看 成 亮 度 值 直 接 作 为 物 体 表 面 上 该 点 的 亮 度, 也 可 以 将 纹 理 属 性 值 作 为 简 单 光 照 模 型 中 物 体 该 点 处 的 漫 反 射 系 数 用 于 该 点 处 的 光 照 计 算 在 OpenGL 中 又 是 如 何 利 用 检 索 到 的 纹 理 属 性 值 ( 颜 色 ) 计 算 出 像 素 最 终 的 颜 色 呢? 实 际 上,OpenGL 提 供 了 多 种 方 式 利 用 检 索 到 的 纹 理 属 性 值 计 算 像 素 最 终 的 颜 色, 每 一 种 方 式 都 可 以 用 于 产 生 特 定 的 效 果 最 为 常 用 的 是 调 制 (modulate) 方 式, 这 时 纹 理 属 性 值 起 一 个 调 制 作 用, 它 将 用 于 调 制 ( 通 常 是 分 量 相 乘 ) 像 素 最 初 的 颜 色 ( 不 使 用 纹 理 时 像 素 应 有 的 颜 色 ) 以 产 生 最 终 的 颜 色 比 如 多 边 形 是 以 白 光 照 射, 白 光 照 射 产 生 的 物 体 表 面 的 亮 度 接 着 由 相 应 纹 理 属 性 值 调 制, 通 常 这 样 可 以 绘 制 出 一 个 具 有 光 照 效 果 贴 有 纹 理 的 表 面 还 有 几 种 其 他 的 方 式, 分 别 是 贴 花 ( decal) 方 式 融 合 ( blend) 方 式 替 代 ( replace) 方 式 用 户 可 以 通 过 如 下 的 函 数 调 用 形 式 来 指 示 OpenGL 采 用 上 述 哪 种 方 式 来 利 用 检 索 到 的 纹 理 属 性 值 计 算 像 素 最 终 的 颜 色 : gltexenvf(gl_texture_env,gl_texture_env_mode,gl_ MODULATE); 这 个 函 数 的 最 后 一 个 参 数 正 是 用 于 指 定 期 望 的 处 理 方 式, 它 还 可 以 是 GL _ DECAL, GL_BLEND, 或 GL_REPLACE 最 后 需 要 指 出, 由 于 OpenGL 是 基 于 状 态 机 模 型 的, 因 此 要 利 用 OpenGL 实 现 物 体 表 面 ( 比 如 多 边 形 ) 上 的 纹 理 映 射, 必 须 在 绘 制 物 体 之 前, 先 利 用 OpenGL 命 令 定 义 以 上 提 到 的 相 应 的 参 数 或 设 置 相 应 的 属 性, 比 如 定 义 纹 理 函 数 定 义 映 射 关 系 指 定 纹 理 坐 标 的 截

191 计 算 机 图 形 学 断 还 是 重 复 处 理 方 式 等 等 还 有 一 点 需 要 注 意 的 就 是 在 绘 制 物 体 前 应 该 调 用 glenable (GL_TEXTURE_2D) 打 开 纹 理 映 射 开 关, 使 OpenGL 在 绘 制 物 体 时 真 正 进 行 纹 理 映 射 178 习 题 6.1 采 用 Z 缓 冲 算 法 实 现 两 个 三 角 形 之 间 的 消 隐, 第 一 个 三 角 形 的 顶 点 为 : (1,0,0), (0,2,0) 和 (0,0,1); 第 二 个 三 角 形 的 顶 点 为 : (0,0,0),(1,0,1) 和 (0,2,1) 6.2 用 Gouraud 明 暗 处 理 方 法 生 成 一 个 圆 球 的 真 实 感 显 示 图 6.3 使 用 OpenGL 绘 制 4 个 茶 壶 ( 调 用 OpenGL 函 数 生 成 ), 通 过 设 置 OpenGL 材 质, 使 4 个 茶 壶 分 别 呈 现 出 塑 料 金 属 石 膏 和 瓷 器 的 特 性 6.4 使 用 OpenGL 绘 制 一 个 各 个 面 都 贴 有 不 同 纹 理 图 形 的 正 方 体 6.5 使 用 OpenGL 绘 制 一 个 圆 柱 形 的 罐 头 盒, 罐 头 盒 柱 面 上 贴 有 彩 色 包 装 纸 纹 理, 顶 底 不 用 贴 纹 理 要 求 设 置 材 质 特 性, 使 罐 头 盒 柱 面 呈 现 包 装 纸 的 光 反 射 特 性, 顶 底 呈 现 金 属 反 光 特 性

192 第 7 章 曲 线 与 曲 面 曲 线 曲 面 的 计 算 机 辅 助 设 计 源 于 20 世 纪 60 年 代 的 飞 机 和 汽 车 工 业 较 早 出 现 的 有 美 国 波 音 公 司 的 Ferguson 于 1963 年 提 出 的 用 于 飞 机 设 计 的 参 数 三 次 方 程, 法 国 雷 诺 汽 车 公 司 的 Bézier 于 1962 年 提 出 的 以 逼 近 为 基 础 的 曲 线 曲 面 设 计 系 统 UNISURF, 此 前 de Casteljau 大 约 于 1959 年 在 法 国 另 一 家 汽 车 公 司 雪 铁 龙 的 CAD 系 统 中 有 同 样 的 设 计, 但 因 为 保 密 的 原 因 而 没 有 公 布 Coons 于 1964 年 提 出 了 一 类 布 尔 和 形 式 的 曲 面 这 些 早 期 的 曲 线 曲 面 设 计 方 法 在 计 算 效 率 局 部 可 修 改 性 绘 图 过 程 的 几 何 意 义 等 方 面 不 理 想 Bézier 方 法 出 现 以 后,Forrest Gordon 等 人 对 Bézier 方 法 作 了 深 入 研 究, 揭 示 了 Bézier 方 法 与 Bernstein 多 项 式 的 关 系 Bézier 方 法 具 有 明 确 的 几 何 意 义, 在 设 计 过 程 中 具 有 很 强 的 可 操 作 性, 至 今 仍 有 CAD 软 件 中 保 留 Bézier 曲 线 曲 面 功 能 但 Bézier 方 法 是 整 体 计 算, 修 改 一 点 会 影 响 到 整 体 20 世 纪 70 年 代 出 现 了 B 样 条 曲 线 曲 面 1972 年,deBoor 和 Cox 分 别 给 出 B 样 条 的 标 准 算 法 B 样 条 曲 线 曲 面 具 有 Bézier 方 法 的 优 点, 克 服 了 Bézier 方 法 的 缺 点 但 均 匀 B 样 条 曲 线 曲 面 未 考 虑 型 值 点 的 分 布 对 参 数 化 的 影 响, 当 弦 长 差 异 较 大 时, 弦 长 较 长 的 曲 线 段 比 较 平 坦, 而 弦 长 较 短 的 曲 线 段 则 臌 涨, 甚 至 于 因 过 冲 而 产 生 扭 结 于 是 1975 年 以 后,Riesenfeld 等 人 研 究 了 非 均 匀 B 样 条 曲 线 曲 面, 美 国 锡 拉 丘 兹 大 学 的 Versprille 研 究 了 有 理 B 样 条 曲 线 曲 面,20 世 纪 80 年 代 末 90 年 代 初,Piegl 和 Tiller 等 人 对 有 理 B 样 条 曲 线 曲 面 进 行 了 深 入 的 研 究, 并 形 成 非 均 匀 有 理 B 样 条 ( non 唱 uniform rational b 唱 spline,nurbs) 1991 年 国 际 标 准 组 织 (ISO) 正 式 颁 布 了 产 品 数 据 交 换 的 国 际 标 准 STEP,NURBS 是 工 业 产 品 几 何 定 义 惟 一 的 一 种 自 由 型 曲 线 曲 面 整 个 曲 线 曲 面 设 计 方 法 的 发 展 史 表 明 了 曲 线 曲 面 设 计 方 法 的 要 求 : (1) 避 免 高 次 多 项 式 函 数 可 能 引 起 的 过 多 拐 点, 曲 线 曲 面 设 计 宜 采 用 低 次 多 项 式 函 数 进 行 组 合 ; 组 合 曲 线 曲 面 在 公 共 连 接 处 满 足 一 定 的 连 续 性 ; (2) 绘 图 过 程 具 有 明 确 的 几 何 意 义, 且 操 作 方 便 ; (3) 具 有 几 何 不 变 性 ; (4) 具 有 局 部 修 改 性, 修 改 其 中 一 点, 不 影 响 全 局, 只 有 很 小 范 围 内 的 形 状 受 到 影 响

193 计 算 机 图 形 学 7.1 曲 线 曲 面 入 门 曲 线 曲 面 的 表 示 形 式 1. 曲 线 的 表 示 形 式 平 面 曲 线 的 直 角 坐 标 表 示 形 式 为 : y =f(x) 或 F(x,y) =0 其 参 数 方 程 则 为 : x =x( t) y =y( t) (7 唱 1) 平 面 上 一 点 的 位 置 可 用 自 原 点 到 该 点 的 矢 量 表 示 : r =r(t) (7 唱 2) 式 (7 唱 2) 称 为 曲 线 的 矢 量 方 程, 其 坐 标 分 量 表 示 式 (7 唱 1) 是 曲 线 的 参 数 方 程 三 维 空 间 曲 线 的 参 数 方 程 为 : x =x( t) y =y( t) (7 唱 3) z =z( t) 矢 量 方 程 为 : r =r(t) =r(x(t),y(t),z(t)) (7 唱 4) 如 图 7 唱 1, 三 维 空 间 曲 线 可 理 解 为 一 个 动 点 的 轨 迹, 位 置 矢 量 r 随 时 间 t 变 化 的 关 系 就 是 一 条 空 间 曲 线 用 s 表 示 曲 线 的 弧 长, 以 弧 长 为 参 数 的 曲 线 方 程 称 为 自 然 参 数 方 程 以 弧 长 为 参 数 的 曲 线, 其 切 矢 为 单 位 矢 量, 记 为 t(s) 切 矢 t( s) 对 弧 长 s 求 导, 所 得 导 矢 dt( s)/ds 与 切 矢 相 垂 直, 称 为 曲 率 矢 量, 如 图 7 唱 2, 其 单 位 矢 量 称 为 曲 线 的 单 位 主 法 矢, 记 为 n( s), 其 模 长 称 为 曲 线 的 曲 率, 记 为 k( s) 曲 率 的 倒 数 称 为 曲 线 的 曲 率 半 径, 记 为 ρ( s) 与 t 和 n 相 互 垂 直 的 单 位 矢 量 称 为 副 法 矢, 记 为 b(s) 图 7 唱 1 空 间 曲 线 由 t 和 n 张 成 的 平 面 称 为 密 切 平 面 ; 由 n 和 b 张 成 的 平 面 称 为 法 平 面 ; 由 t 和 b 张 成 的 平 面 称 为 从 切 面

194 曲 线 与 曲 面 第 7 章 181 图 7 唱 2 曲 线 特 性 分 析 2. 曲 面 的 表 示 形 式 一 般 曲 面 可 表 示 为 : 其 参 数 表 达 式 为 : z =f(x,y) 或 F(x,y,z) =0 x =x( u,v) y =y( u,v) z =z( u,v) 曲 面 的 矢 量 方 程 为 : r =r(u,v) =r(x(u,v),y(u,v),z(u,v)) (7 唱 5) 参 数 u v 的 变 化 区 间 常 取 为 单 位 正 方 形, 即 u,v [0,1] x,y,z 都 是 u 和 v 二 元 可 微 函 数 当 (u,v) 在 区 间 [0,1] 之 间 变 化 时, 与 其 对 应 的 点 ( x,y,z) 就 在 空 间 形 成 一 张 曲 面 ( 见 图 7 唱 3) 由 微 分 学 可 知,r 对 u 和 v 的 一 阶 偏 导 数 为 : 抄 r 抄 u =r r(u +Δu,v) -r(u,v) u (u,v) =lim Δu 0 Δu 抄 r 抄 v =r r(u,v +Δv) -r(u,v) v(u,v) =lim Δv 0 Δv 一 阶 偏 导 数 r u (u,v) 和 r v(u,v) 继 续 对 u,v 求 偏 导 数, 得 到 4 个 二 阶 偏 导 数 : 抄 抄 u 抄 抄 v 抄 r 抄 u 抄 r 抄 u 2 = 抄 r 抄 u 2 =r uu 2 = 抄 r 抄 u 抄 v =r uv

195 计 算 机 图 形 学 182 图 7 唱 3 空 间 曲 面 抄 抄 u 抄 抄 v 抄 r 抄 v 抄 r 抄 v 2 抄 r = 抄 v 抄 u =r vu 2 抄 r = 抄 v 2 其 中, r uv 和 r vu 称 为 二 阶 混 合 偏 导 数, 在 二 阶 连 续 时, 两 者 相 同 如 图 7 唱 3, 曲 面 上 一 点 的 切 矢 r u 和 r v 所 张 成 的 平 面 称 为 曲 面 在 该 点 的 切 平 面 曲 面 上 所 有 过 该 点 的 曲 线 在 此 点 的 切 矢 都 位 于 切 平 面 内 切 平 面 的 法 矢 就 是 曲 面 在 该 点 的 法 矢 曲 线 曲 面 的 光 滑 连 接 给 定 一 段 曲 线, 如 在 整 个 参 数 定 义 域 内 处 处 k 次 连 续 可 微, 则 称 该 曲 线 为 C k 参 数 连 续 给 定 两 段 内 部 C k 连 续 的 参 数 曲 线 r 1 ( u 1 ),u 1 [0,1] 和 r 2 ( u 2 ),u 2 [0,1], 两 段 曲 线 在 公 共 连 接 点 处 不 同 阶 次 的 连 续 性 对 应 于 不 同 的 要 求 1. 位 置 连 续 曲 线 段 r 1 (u 1 ) 的 末 端 与 曲 线 段 r 2 (u 2 ) 的 首 端 达 到 位 置 连 续 的 条 件 为 : r 1 (1) =r 2 (0) =r vv 位 置 连 续 是 C 0 连 续 2. 斜 率 连 续 曲 线 段 r 1 (u 1 ) 的 末 端 与 曲 线 段 r 2 (u 2 ) 的 首 端 达 到 斜 率 连 续 的 条 件 为 : r 1 (1) =k r 2 (0) 若 k =1, 说 明 曲 线 段 r 1 (u 1 ) 的 末 端 切 矢 与 曲 线 段 r 2 ( u 2 ) 的 首 端 切 矢 方 向 相 同 模 长 相 等, 称 为 C 1 连 续 若 k 1, 则 说 明 两 段 曲 线 在 公 共 连 接 点 处 切 矢 方 向 相 同, 但 模 长 不 相 等, 这 种 情 况 是 几 何 连 续 的, 称 为 G 1 连 续

196 曲 线 与 曲 面 3. 曲 率 连 续 两 曲 线 段 曲 率 连 续 应 满 足 :(1) 位 置 连 续 ; (2) 斜 率 连 续 ;(3) 曲 率 相 等 且 主 法 线 方 向 一 致 曲 率 连 续 的 条 件 为 : r 2 (0) =αr 1 (1) +βr 1 (1), 满 足 该 条 件, 称 为 G 2 连 续 ; 几 何 意 义 是 : 曲 线 段 r 2 (u 2 ) 首 端 的 二 阶 导 矢 应 处 在 由 曲 线 段 r 1 (u 1 ) 末 端 的 二 阶 导 矢 和 一 阶 导 矢 所 张 成 的 平 面 内 若 r 2 (0) =r 1 (1), 称 为 C 2 连 续 对 于 曲 面 片, 若 两 个 曲 面 片 在 公 共 连 接 线 上 处 处 满 足 上 述 各 类 连 续 性 条 件, 则 两 个 曲 面 片 之 间 有 同 样 的 结 论 三 次 样 条 函 数 1. 物 理 背 景 7.2 三 次 样 条 曲 线 曲 面 样 条 (spline) 函 数 是 Schoenberg 于 1946 年 提 出 的, 国 外 20 世 纪 60 年 代 广 泛 研 究, 国 内 20 世 纪 70 年 代 开 始 样 条 是 富 有 弹 性 的 细 木 条 或 有 机 玻 璃 条 早 期 船 舶 汽 车 飞 机 放 样 时 用 压 铁 压 在 样 条 的 一 系 列 型 值 点 上, 调 整 压 铁 达 到 设 计 要 求 后 绘 制 其 曲 线, 称 为 样 条 曲 线 y(x) 由 材 料 力 学 可 知, 1 R(x) = d 2 y /dx 2 M( x) = [1 +(dy /dx) 2 ] 3/2 EI R( x) 为 梁 的 曲 率 半 径,M(x) 为 作 用 在 梁 上 的 弯 矩,E 为 材 料 的 弹 性 模 量,I 为 梁 横 截 面 的 惯 性 矩 在 梁 弯 曲 不 大 的 情 况 下,y 虫 1, 上 式 简 化 为 : y (x) ~M(x),y(x) 是 x 的 三 次 多 项 式, 这 就 是 插 值 三 次 样 条 函 数 的 物 理 背 景 物 理 样 条 的 性 质 : (1) 样 条 是 物 质 连 续 的, 相 当 于 函 数 C 0 连 续 ; (2) 样 条 在 压 铁 两 侧 斜 率 相 同, 相 当 于 函 数 C 1 连 续 ; (3) 样 条 在 压 铁 两 侧 曲 率 相 同, 相 当 于 函 数 C 2 连 续 2. 三 次 样 条 函 数 的 数 学 定 义 在 区 间 [a,b] 上 给 定 一 个 分 割 Δ: a =x 1 <x 2 < <x n =b, 则 称 在 区 间 [a,b] 上 满 足 下 列 条 件 的 函 数 S(x) 为 三 次 样 条 函 数 : 第 7 章 183

197 计 算 机 图 形 学 184 (1) 在 每 个 子 区 间 [x i -1,x i ](i =1,2,,n) 上 为 三 次 多 项 式 ; (2) 在 整 个 区 间 [a,b] 上 具 有 直 到 二 阶 连 续 的 导 数, 即 在 内 节 点 x i 处, S ( k) (x - i ) =S ( k) (x + i ) i =2,3,,n -1, k =0,1,2 对 于 给 定 的 一 组 型 值 点 ( x i,y i )(i =1,2,,n), 若 上 述 S( x) 为 三 次 样 条 函 数,S( x) 还 满 足 插 值 条 件 : S(x i ) =y i 则 称 S(x) 为 插 值 三 次 样 条 函 数 插 值 三 次 样 条 函 数 有 两 种 常 用 的 表 达 方 式, 一 种 是 用 型 值 点 处 的 一 阶 导 数 表 示 的 m 关 系 式 ; 一 种 是 用 型 值 点 处 二 阶 导 数 表 示 的 M 关 系 式 本 书 重 点 介 绍 m 关 系 式 3. 用 型 值 点 处 的 一 阶 导 数 表 示 插 值 三 次 样 条 函 数 m 关 系 式 如 图 7 唱 4, 给 定 一 组 型 值 点 (x i,y i )(i =1, 2,,n),m i 为 ( x i,y i ) 处 的 斜 率 第 i 段 样 条 函 数 可 表 示 为 : y i (x) =a i +b i x +c i x 2 +d i x 3 i =1,2,,n (7 唱 6) 图 7 唱 4 型 值 点 和 斜 率 该 段 曲 线 的 首 端 通 过 (x i -1,y i -1 ), 斜 率 为 m i -1, 末 端 通 过 ( x i,y i ), 斜 率 为 m i, 这 些 条 件 可 表 达 为 : y(x i -1 ) =y i -1 y(x i ) =y i y (x i -1 ) =m i -1 (7 唱 7) 式 中, i =1,2,,n 将 式 (7 唱 7) 展 开 得 : y (x i ) =m i y(x i -1 ) =a i +b i x i -1 +c i x 2 i -1 +d i x 3 i -1 =y i -1 y(x i ) =a i +b i x i +c i x 2 i +d i x 3 i =y i y (x i -1 ) =b i +2 c i x i d i x 2 i -1 =m i -1 (7 唱 8) 式 中, i =1,2,,n y (x i ) =b i +2 c i x i +3 d i x 2 i =m i

198 令 h i =x i -x i -1, 解 方 程 组 得 : ( m ixi -1 +m i -1 xi )xi xi -1 a i =- h 2 i m i -1 xi(xi +2 xi -1 ) +m ixi -1 (2xi +xi -1 ) b i = h 2 i c i =- m i (x i +2 x i -1 ) +m i -1 (2x i +x i -1 ) h 2 i d i = m i +m i -1 h 2 i 其 中, i =1,2,,n - 2(y i -y i -1 ) h 3 i 将 所 求 系 数 代 入 样 条 函 数 表 达 式, 并 计 算 得 : y(x) =m i -1 (x i -x) 2 (x -x i -1 ) h 2 i +y i -1 ( x i -x) 2 [2(x -x i -1 ) +h i ] h 3 i y (x) =m i -1 (x i -x)(2x i -1 +x i -3 x) h 2 i + yi x2 i -1 (3x i -x i -1 ) +y i -1 x 2 i (x i -3 x i -1 ) h 3 i 6(yi -yi -1 )xi x i -1 - h 3 i + 3(y i -y i -1 )(x i +x i -1 ) h 3 i -m i (x -x i -1 ) 2 ( x i -x) h 2 i 曲 线 与 曲 面 (x -x i -1 ) 2 [2(x i -x) +h i ] +y i h 3 i (7 唱 9) -m i (x -x i -1 )(2x i +x i -1-3 x) h 2 i + 6(y i -y i -1 ) (x h 3 i -x)(x -x i -1 ) (7 唱 10) i 2x i +x i -1-3 x 2x i -1 +x i -3 x y (x) =-2m i -1-2 m h 2 i i h 2 i 6(y i -y i -1 ) + (x i +x i -1-2 x) (7 唱 11) h 3 i 其 中, x i -1 x x i (i =1,2,,n) 式 (7 唱 9) 至 (7 唱 11) 为 插 值 三 次 样 条 函 数 的 基 本 公 式 只 要 求 解 出 型 值 点 处 的 斜 率 m i(i =0,1,2,,n), 就 可 以 应 用 上 述 公 式 计 算 插 值 三 次 样 条 函 数 的 函 数 值 一 阶 导 数 和 二 阶 导 数 对 于 式 (7 唱 9), 以 (x i -1 +h i ) 代 替 x i, 并 按 (x -x i -1 ) 的 幂 次 整 理 成 如 下 矩 阵 表 达 式 : 第 7 章 185

199 计 算 机 图 形 学 y i y(x) =[1 (x -x i -1 ) (x -x i -1 ) 2 (x -x i -1 ) 3 ] - 3 h 2 i 3 h 2 i - 2 h i - 1 h i y i m i -1 2 h 3 i - 2 h 3 i 1 h 2 i 1 h 2 i m i 其 中, x i -1 x x i (i =1,2,,n) 若 令 h i =1, t =x -x i -1,0 t 1, 则 得 到 均 匀 参 数 插 值 三 次 样 条 美 国 波 音 公 司 的 Ferguson 于 1963 年 用 于 飞 机 设 计 的 参 数 三 次 方 程 即 是 均 匀 参 数 插 值 三 次 样 条 曲 线, 见 下 式 p(0) p(1) p(t) =[1 t t 2 t 3 ] p (0) p (1) 其 中, p(t) 表 示 位 置 矢 量,p (t) 表 示 切 矢 由 上 述 样 条 函 数 公 式 可 以 看 出, 构 造 插 值 三 次 样 条 时 除 已 经 给 定 的 型 值 点 外, 还 必 须 得 到 型 值 点 处 的 切 矢 为 了 计 算 型 值 点 处 的 切 矢 m i (i =0,1,2,,n), 可 以 利 用 前 后 二 曲 线 在 型 值 点 处 的 二 阶 导 数 连 续 的 条 件 : y i (x - i ) =y i +1 (x + i ) i =1,2,,n -1 对 式 (7 唱 11) 作 相 应 的 运 算 并 简 化, 得 到 : h i +1 h i +h i +1 m i m i + h i h i +h i +1 m i +1 =3 h i +1 h i +h i +1 y i -y i -1 h i + h i h i +h i +1 y i +1 -y i h i +1 (7 唱 12) 其 中, i =1,2,,n -1 令 λ i = h i +1 h i +h i +1 μ i =1 -λ i y C i =3 i -y i -1 y i +1 -y i λ i +μ i h i h i +1 i =1,2,,n -1 则 式 (7 唱 12) 变 为 : λ i m i m i +μ i m i +1 =C i 其 中 i =1,2,,n -1 ( 7 唱 13) 式 (7 唱 13) 称 为 三 次 样 条 函 数 的 m 连 续 性 方 程

200 曲 线 与 曲 面 今 欲 求 n +1 个 未 知 量 m i (i =0,1,2,,n), 但 只 有 n -1 个 方 程, 需 要 补 充 两 个 方 程 才 能 求 解 可 在 整 条 曲 线 的 首 末 端 点 指 定 端 点 条 件 (1) 在 首 末 端 指 定 一 阶 导 数 在 两 端 指 定 一 阶 导 数 y 0 和 y n, 补 充 方 程 为 : (2) 在 首 末 端 指 定 二 阶 导 数 在 两 端 指 定 二 阶 导 数 y 0 和 y n, 补 充 方 程 为 : 将 式 (7 唱 15) 展 开 并 整 理, 得 : y 1 (x 0 ) =m 0 =y 0 y n (x n ) =m n =y n (7 唱 14) y 1 (x 0 ) =y 0 y n (x n ) =y n (7 唱 15) 2m 0 +m 1 = 3(y 1 -y 0 ) h 1 - h 1 2 y 0 m n m n = 3(y n -y n -1 ) h n + h n 2 y n (7 唱 16) 当 曲 线 两 端 比 较 平 坦 时, 可 以 取 二 阶 导 数 y 0 和 y n 为 0, 亦 即 自 由 端 点 条 件, 此 时 式 (7 唱 16) 简 化 为 : 2m 0 +m 1 = 3(y 1 -y 0 ) h 1 m n m n = 3(y (7 唱 17) n -y n -1 ) h n 式 中 (3) 综 合 两 类 端 点 条 件 的 补 充 方 程 为 了 综 合 考 虑 上 述 两 类 端 点 条 件, 可 利 用 如 下 的 表 达 式 : 2m 0 +μ 0 m 1 =C 0 λ n m n m n =C n (7 唱 18) 第 7 章 187 C 0 =(4 -μ 0 )μ 0 y 1 -y 0 h 1 - h1 6 y 0 +2 ( 1 -μ 0 )y 0 C n =(4 -λ n )μ n y n -y n -1 h n 当 μ 0 =λn =1, 相 当 于 在 两 端 指 定 二 阶 导 数 ; μ 0 =λn =0, 相 当 于 在 两 端 指 定 一 阶 导 数 ; + h n 6 y n +2(1 -λ n )y n

201 计 算 机 图 形 学 188 μ 0 =1,λn =0, 相 当 于 在 首 端 指 定 二 阶 导 数, 末 端 指 定 一 阶 导 数 ; μ 0 =0,λn =1, 相 当 于 在 首 端 指 定 一 阶 导 数, 末 端 指 定 二 阶 导 数 综 合 式 (7 唱 13) 和 式 (7 唱 18), 得 如 下 方 程 组 : 2 μ 0 m 0 C 0 λ 1 2 μ 1 m 1 C 1 λ 2 2 μ 2 筹 m 2 = C 2 (7 唱 19) λ n -1 2 μ n -1 λ n 2 m n -1 m n C n -1 式 (7 唱 19) 的 系 数 矩 阵 为 三 对 角 带 状 矩 阵, 可 用 追 赶 法 求 解 插 值 三 次 样 条 函 数 的 计 算 步 骤 : 1 获 得 型 值 点 ; 2 指 定 端 点 条 件 ; 3 计 算 μ i,λ i,c i ; 4 追 赶 法 求 解 切 矢 ; 5 用 式 (7 唱 19) 逐 段 逐 点 计 算 插 值 三 次 样 条 曲 线 一 阶 导 数 和 二 阶 导 数 三 次 样 条 曲 线 应 用 三 次 样 条 函 数 方 法, 可 以 构 造 三 次 参 数 样 条 曲 线 给 定 一 组 型 值 点 P i (x i, y i, z i ), i =0,1,,n, 构 造 3 个 关 于 参 数 u 的 插 值 三 次 样 条 函 数 : x =x(u), y =y(u), z =z(u) 它 们 插 值 于 点 集 (u i,x i),(u i,y i) 和 (u i,z i ), 三 者 合 并 得 到 三 次 参 数 样 条 曲 线 : P(u) =[x(u) y(u) z(u)] 参 数 u 有 多 种 选 择, 采 用 累 加 弧 长 是 最 直 观 的 但 由 于 在 得 到 曲 线 之 前, 无 法 计 算 弧 长 因 此 实 际 应 用 中 多 采 用 累 加 弦 长 作 为 参 数 构 造 样 条 曲 线, 并 称 其 为 累 加 弦 长 参 数 样 条 曲 线, 简 称 参 数 样 条 曲 线 用 u i 代 表 各 型 值 点 的 弦 长 参 数, 则 : =0 u 0 u k k = i =1 其 中, k =1,2,,n 由 此, 得 到 参 数 及 型 值 点 的 数 据 表 : (x i -x i -1 ) 2 +( y i -y i -1 ) 2 +( z i -z i -1 ) 2 C n

202 u u 0 u 1 u 2 u n x x 0 x 1 x 2 x n y y 0 y 1 y 2 y n 曲 线 与 曲 面 第 7 章 189 z z 0 z 1 z 2 z n 分 别 构 造 3 个 插 值 样 条 函 数 : x =x(u),y =y(u),z =z(u), 得 到 分 段 三 次 多 项 式 函 数 组 合 的 参 数 样 条 曲 线, 该 曲 线 是 二 阶 连 续 的, 具 有 连 续 的 斜 率 和 曲 率 三 次 插 值 样 条 函 数 在 实 际 应 用 中 很 难 给 出 数 据 点 处 的 切 矢 采 用 不 同 的 方 法 计 算 切 矢, 生 成 的 曲 线 不 相 同 这 说 明 该 方 法 还 不 是 纯 几 何 的 方 法, 根 据 给 定 的 数 据 点, 还 没 有 惟 一 地 确 定 曲 线 绘 图 过 程 中 几 何 意 义 还 不 够 明 显 而 且 切 矢 计 算 是 整 体 求 解, 改 变 一 点, 所 有 切 矢 计 算 结 果 都 跟 着 变 化, 正 所 谓 牵 一 发 而 动 全 身, 不 具 备 局 部 修 改 性 所 以,CAGD(computer aided geometry design) 后 来 又 发 展 出 若 干 种 更 优 化 的 曲 线 三 次 样 条 曲 面 参 数 样 条 曲 面 是 参 数 样 条 曲 线 方 法 向 曲 面 的 直 接 推 广 但 参 数 样 条 曲 面 与 参 数 样 条 曲 线 不 完 全 一 致, 单 条 曲 线 不 论 型 值 点 是 否 匀 称, 均 可 用 参 数 样 条 方 法 构 造 较 好 的 插 值 曲 线 而 参 数 样 条 曲 面 不 同, 因 为 同 一 方 向 的 所 有 曲 线 的 参 数 化 需 综 合 考 虑, 型 值 点 分 布 匀 称 时 ( 图 7 唱 5) 易 于 实 现 ; 当 型 值 点 分 布 不 匀 称 ( 图 7 唱 6) 时, 难 于 参 数 化, 参 数 样 条 曲 面 不 适 宜 必 须 寻 找 其 他 几 何 意 义 明 确 局 部 修 改 性 良 好 的 曲 线 曲 面 构 造 方 法 图 7 唱 5 型 值 点 分 布 匀 称 情 形 图 7 唱 6 型 值 点 分 布 不 匀 称 情 形 Bézier 曲 线 7.3 Bézier 曲 线 和 曲 面 Bézier 曲 线 是 法 国 雷 诺 汽 车 公 司 的 工 程 师 Bézier 于 1962 年 提 出,1972 年 在 UNISURF 系 统 中 正 式 投 入 使 用 Bézier 曲 线 采 用 一 组 特 殊 的 基 函 数, 使 得 基 函 数 的 系 数 具 有 明 确 的 几 何 意 义 其 曲 线 方 程 为 :

203 计 算 机 图 形 学 190 n p(t) = a i f i (t) 0 t 1 i =0 其 中 从 a 0 到 a n 首 尾 相 连 的 折 线 称 为 Bézier 控 制 多 边 形 ( 图 7 唱 7) n f i (t) = (-1) i +j C j C i -1 n j -1 tj j =i 当 n =3 时,Bézier 基 函 数 为 : f 0 (t) =1 i =0,1,,n f 1 (t) =3t -3 t 2 +t 3 f 2 (t) =3t 2-2 t 3 图 7 唱 7 边 矢 量 定 义 的 控 制 多 边 形 及 生 成 Bézier 曲 线 f 3 (t) =t 3 英 国 的 Forest 于 1972 年 将 上 述 Bézier 曲 线 中 的 控 制 多 边 形 顶 点 改 为 绝 对 矢 量 的 Bernstein 基 表 示 形 式 : n p(t) = d i B i,n (t) i =1 0 t 1 当 n =3 时, B i,n (t) =C i n t i (1 -t) n -i B 0,3(t) =(1 -t) 3 i =0,1,,n B 1,3(t) =3t(1 -t) 2 B 2,3 (t) =3t 2 (1 -t) B 3,3(t) =t 3 Bézier 基 函 数 曲 线 如 图 7 唱 8 所 示, 而 Bernstein 基 函 数 曲 线 如 图 7 唱 9 所 示 D:\10-24\ 新 建 文 件 夹 \ 计 算 机 图 形 学 ( 普 通 高 等 院 校 计 算 机 专 业 ( 本 科 ) 实 用 图 7 唱 8 Bézier 基 函 数 (n =3) 图 7 唱 9 Bernstein 基 函 数 (n =3)

204 曲 线 与 曲 面 三 次 Bézier 曲 线 的 矩 阵 表 示 形 式 为 : p(t) =[1 t t 2 t 3 ] d 0 d 1 d 2 d 3 第 7 章 191 单 一 的 Bézier 曲 线 不 能 满 足 描 述 复 杂 形 状 的 要 求, 必 须 采 用 组 合 的 Bézier 曲 线 Bézier 曲 线 的 优 点 是 具 有 明 确 的 几 何 意 义, 给 定 数 据 点 的 控 制 多 边 形 确 定 曲 线 的 形 状, 在 设 计 过 程 中 具 有 很 强 的 可 操 作 性 但 Bézier 曲 线 是 整 体 计 算, 修 改 一 点 会 影 响 到 整 体, 这 是 Bézier 曲 线 的 不 足 之 处 对 于 局 部 参 数 的 Bézier 曲 线, 当 弦 长 差 异 较 大 时, 同 样 存 在 Ferguson 曲 线 的 问 题 连 接 点 处 的 公 共 切 矢 可 能 使 得 弦 长 较 长 的 那 段 曲 线 过 分 平 坦, 弦 长 较 短 的 那 段 曲 线 则 鼓 得 厉 害, 甚 至 出 现 尖 点 或 二 重 点 在 参 数 连 续 的 前 提 下, 可 采 用 整 体 参 数 的 方 法, 采 用 非 均 匀 的 参 数 分 割, 为 曲 线 形 状 控 制 提 供 了 额 外 的 手 段 参 数 连 续 是 对 曲 线 光 顺 性 的 过 分 要 求, 在 组 合 曲 线 的 连 接 点 处, 参 数 连 续 不 仅 要 求 切 矢 具 有 共 同 的 切 矢 方 向, 而 且 要 求 切 矢 模 长 相 等 几 何 连 续 只 要 求 在 连 接 点 处 切 矢 方 向 相 同, 切 矢 模 长 可 以 不 相 等, 由 此 产 生 了 不 同 控 制 手 段 的 多 种 曲 线, 如 Gamma(γ) 样 条 曲 线 Beta(β) 样 条 曲 线 等, 给 曲 线 设 计 提 供 了 更 大 的 灵 活 性 Bézier 曲 面 1.Bézier 曲 面 片 的 定 义 如 图 7 唱 10,r ij 表 示 要 生 成 Bézier 曲 面 片 的 控 制 顶 点 的 位 置 矢 量 根 据 线 动 成 面 的 思 想, 首 先 生 成 4 条 v 向 的 三 次 Bezier 曲 线 : 3 r i ( v) = r ij B j,3 (v) i =0,1,2,3 j =0 再 沿 u 向 生 成 三 次 Bézier 曲 线 : 3 倡 r( u) = r i (v )B i,3 ( u) i =0 倡 r i(v ) 表 示 v 向 曲 线 参 数 v 取 一 定 值 时 曲 线 上 点 的 位 置 矢 量 将 u,v 向 曲 线 方 程 合 并 得 : 匙 r 3 (u,v) = i =0 图 7 唱 r i (v)b i,3 (u) = B i,3 (u)r(i,j)b j,3 (v) i =0 j =0 Bézier 曲 面 片

205 计 算 机 图 形 学 匙 r 匙 00 r 匙 01 r 匙 02 r 03 B 0,3(v) 192 =( B 0,3 (u) B 1,3 (u) B 2,3 (u) B 3,3 (u)) 匙 r 匙 r 匙 r 匙 10 r 匙 20 r 匙 30 r 匙 11 r 匙 21 r 匙 31 r 匙 12 r 13 匙 22 r 23 匙 32 r 33 B 1,3 (v) B 2,3 (v) B 3,3 (v) =( 1 uu 2 u 3 ) 匙 r 匙 r 匙 r 匙 r 匙 00 r 匙 10 r 匙 20 r 匙 30 r 匙 01 r 匙 11 r 匙 21 r 匙 31 r 匙 02 r 03 匙 12 r 13 匙 22 r 23 匙 32 r C 0 连 续 的 Bézier 组 合 曲 面 ( 位 置 连 续 ) 用 Bézier 曲 面 片 组 合 曲 面 时, 曲 面 拼 合 处 位 置 连 续, 即 要 求 : r 1 (1,v) =r 2 (0,v) ( 其 中 上 标 表 示 曲 面 片 1 或 曲 面 片 2) [1111]AM 1 A T =[ ]AM 2 A T [ ] 匙 r 匙 r 匙 r 匙 r 匙 00 r 匙 10 r 匙 20 r 匙 30 r 匙 01 r 匙 11 r 匙 21 r 匙 31 r 匙 02 r 03 匙 12 r 13 匙 22 r 23 匙 32 r v v 2 v 3 =[ ] 匙 r 匙 r 匙 r 匙 r 匙 00 r 匙 10 r 匙 20 r 匙 30 r 匙 01 r 匙 11 r 匙 21 r 匙 31 r 匙 02 r 03 匙 12 r 13 匙 22 r 23 匙 32 r 33 2 匙 r 匙 00 r 匙 01 r 匙 02 r 03 1 [ ] 匙 r 匙 r 匙 10 r 匙 20 r 匙 11 r 匙 21 r 匙 12 r 13 匙 22 r 23 匙 r 匙 30 r 匙 31 r 匙 32 r 33 匙 r 匙 00 r 匙 01 r 匙 02 r 03 2 =[ ] 匙 r 匙 r 匙 10 r 匙 20 r 匙 11 r 匙 21 r 匙 12 r 13 匙 22 r 23 匙 r 匙 30 r 匙 31 r 匙 32 r 33 即 : r 1 3 i =r 2 0 i, 图 7 唱 11 为 两 张 Bézier 曲 面 片 C 0 连 续 的 示 意 图

206 曲 线 与 曲 面 第 7 章 193 图 7 唱 11 两 张 Bézier 曲 面 片 C 0 连 续 的 示 意 图 3.C 1 连 续 的 Bézier 组 合 曲 面 ( 导 矢 连 续 ) 若 要 得 到 跨 界 一 阶 导 矢 的 连 续 性, 对 于 0 v 1, 曲 面 片 1 在 u =1 的 切 平 面 和 曲 面 片 2 在 u =0 处 的 切 平 面 重 合, 曲 面 的 法 矢 在 跨 界 处 连 续, 即 : r 2 u (0,v) r 2 v (0,v) =λ(v)r 1 u (1,v) r 1 v (1,v) 其 中,λ(v) 是 考 虑 法 矢 模 长 的 不 连 续 因 为 r 2 v (0,v) =r 1 v (1,v), 令 r 2 u (0,v) =λ(v)r 1 u (1,v), 组 合 曲 面 所 有 等 v 线 的 梯 度 连 续 用 矩 阵 表 示 为 : [ ]Ar 2 A T [V] =λ(v)[ ]Ar 1 A T [V] 取 λ(v) =λ, 得 :(r 2 1 i -r 2 0 i )=λ( r 1 3 i -r 1 2 i ), 表 明 跨 界 的 四 对 棱 边 必 须 共 线 图 7 唱 12 为 两 张 Bézier 曲 面 片 C 1 连 续 的 示 意 图 图 7 唱 12 两 张 Bézier 曲 面 片 C 1 连 续 的 示 意 图 要 求 跨 界 切 矢 的 比 值 不 变 是 非 常 苛 刻 的 限 制, 为 了 更 自 由 地 进 行 曲 面 的 拼 合, 可 采 用 如 下 的 较 宽 松 的 条 件 : r 2 u (0,v) =λ(v)r 1 u (1,v) +μ(v) r 1 v (1,v) 要 求 r 2 u (0,v) 位 于 r 1 u (1,v) 和 r 1 v (1,v) 的 平 面 内 矩 阵 表 示 为 :

207 计 算 机 图 形 学 v [ ] AM 2 A T v 2 v 3 1 =λ(v)[ ]AM 1 A T v +μ(v)[ ]AMA T v 2 v 3 要 求 两 边 都 展 开 为 v 的 三 次 多 项 式, 则 λ(v) =λ( 任 意 正 常 数 )μ(v) =μ 0 多 项 式 对 应 v 的 幂 次 的 系 数 相 等, 得 到 如 下 4 个 等 式 : r r 2 00 =λ(r r 1 20 ) +μ 0 (r r 1 30) r r 2 01 =λ(r r 1 21 ) μ 0 (2r r r 1 30) μ 1 (r r 1 30 ) 0 1 2v 3v 2 +μ 1 v r r 2 02 =λ(r r 1 22 ) μ 0 ( r r r 1 31) μ 1 (r r 1 31 ) r r 2 03 =λ(r r 1 23 ) +(μ 0 +μ 1 )(r r 1 32) 选 择 不 同 的 系 数 λ,μ 0,μ 1, 可 以 得 到 不 同 的 连 续 条 件 7.4 B 样 条 曲 线 和 曲 面 B 样 条 曲 线 具 有 Bézier 曲 线 的 一 切 优 点, 克 服 了 Bézier 曲 线 不 具 有 局 部 修 正 的 缺 点 它 是 Schocenberg 于 1946 年 提 出 的,1972 年,deBoor 和 Cox 分 别 给 出 B 样 条 的 递 推 定 义 作 为 CAGD 中 的 一 种 形 状 描 述 的 数 学 方 法 是 Gordon 和 Riesenfeld 于 1974 年 在 研 究 Bézier 曲 线 的 基 础 上 给 出 的 B 样 条 曲 线 方 程 为 : n p(u) = d i N i,k (u) (7 唱 20) i =1 其 中, d i (i =0,1,,n) 为 控 制 顶 点, 基 函 数 N i,k (u) 采 用 deboor 和 Cox 给 出 的 递 推 定 义, K 次 规 范 B 样 条 基 函 数 具 体 定 义 如 下 :

208 N i,0 (u) = 1 u i u <u i +1 0 其 他 曲 线 与 曲 面 第 7 章 N i,k (u) = u -u i N i,k -1 (u) + u i +K +1 -u N i +1,K -1 (u) u i +K -u i -u i +1 规 定 0 0 =0 u i +K +1 其 中, u i (i =0,1,,n) 是 对 应 于 给 定 数 据 点 的 节 点 参 数 均 匀 B 样 条 曲 线 (7 唱 21) 195 当 K =3, 且 采 用 均 匀 参 数 化 时, 由 式 (7 唱 20) 和 式 (7 唱 21) 得 到 三 次 均 匀 B 样 条 曲 线 段 : S( t) = 1 6 [1 t t2 t 3 ] d i d i +1 d i +2 d i +3 其 中,0 t = u -u i 1, i =0,1,,n -3 u i +1 -u i 在 分 段 连 接 点 处 B 样 条 曲 线 的 值 和 导 矢 量 为 : S i -1 (1) =S i (0) = 1 6 (d i +4 d i +1 +d i +2 ) S i -1 (1) =S i (0) = 1 2 (d i +2 -d i ) (7 唱 22) S i -1 (1) =S i (0) =d i +2-2 d i +1 +d i 式 (7 唱 22) 所 描 述 的 B 样 条 曲 线 段 的 几 何 特 性 如 图 7 唱 13 所 示 图 7 唱 13 三 次 均 匀 B 样 条 曲 线 段 的 几 何 特 性 曲 线 段 首 点 位 于 以 d i d i +1 和 d i +1 d i +2 为 邻 边 的 平 行 四 边 形 的 1/6 处 ; 其 切 矢 与 d i d i +2

209 计 算 机 图 形 学 196 平 行, 模 为 长 度 的 1/2; 首 点 二 阶 导 矢 是 以 d i +1 d i 和 d i +1 d i +2 为 邻 边 的 平 行 四 边 形 的 对 角 线 曲 线 段 末 点 有 类 似 的 结 论 由 图 7 唱 13 可 以 看 出 : (1) 当 d i,d i +1 和 d i +2 三 点 共 线 时, 曲 线 段 起 点 S i (0) 处 二 阶 导 数 S i (0) 为 0,S i (0) 可 能 为 拐 点 ( 如 图 7 唱 14); 图 7 唱 14 三 顶 点 共 线 情 形 图 7 唱 15 二 顶 点 重 合 情 形 (2) 当 d i,d i +1,d i +2 和 d i +3 四 点 共 线 时, 其 所 定 义 的 曲 线 段 退 化 为 直 线 段 ; (3) 当 d i +1 和 d i +2 二 顶 点 重 合 时, 曲 线 段 起 点 S i (0) 和 末 点 S i (1) 分 别 与 d i d i +1 和 d i +1 d i +2 相 切, 且 端 点 曲 率 为 0( 如 图 7 唱 15); (4) 当 d i +1, d i +2 和 d i +3 三 顶 点 重 合 时, 则 曲 线 段 在 重 点 处 出 现 尖 点, 重 点 与 前 点 和 后 点 在 尖 点 前 后 各 形 成 一 段 直 线 段 ( 如 图 7 唱 16) 曲 线 的 上 述 退 化 情 形 在 实 际 设 计 中 很 有 用, 如 图 7 唱 17 是 应 用 曲 线 退 化 情 形 设 计 的 尖 点 和 直 线 段 对 于 三 次 均 匀 B 样 条 曲 线, 计 算 对 应 于 参 数 [ u i, u i +1 ] 这 段 曲 线 上 的 一 点, 要 用 到 N i -3, 3 (u) N i -2, 3 (u) N i -1, 3 (u) N i,3 (u) 4 个 基 函 数, 涉 及 u i -3 到 u i +4 共 8 个 节 点 的 参 数 值 ( 如 图 7 唱 18) B 样 条 曲 线 的 基 函 数 是 局 部 支 撑 的, 修 改 一 个 数 据 点, 在 修 改 处 影 响 最 大, 对 其 两 侧 的 影 响 快 速 衰 减, 其 影 响 范 围 只 有 前 后 各 K 段 曲 线, 对 曲 线 的 其 他 部 分 没 有 影 响 这 是 计 算 机 辅 助 几 何 设 计 所 需 要 的 局 部 修 改 性 均 匀 B 样 条 曲 线 未 考 虑 曲 线 数 据 点 的 分 布 对 参 数 化 的 影 响, 当 曲 线 弦 长 差 异 较 大 时, 弦 长 较 长 的 曲 线 段 比 较 平 坦 ( 如 图 7 唱 19( a)), 而 弦 长 较 短 的 曲 线 段 则 鼓 胀, 甚 至 于 因 过 冲 而 产 生 扭 结 ( 如 图 7 唱 19(b)) 这 些 问 题 在 后 面 讲 述 的 非 均 匀 B 样 条 曲 线 会 有 所 改 善 均 匀 B 样 条 曲 面 B 样 条 曲 线 是 由 一 个 特 征 多 边 形 定 义 的,B 样 条 曲 面 则 由 一 组 特 征 多 边 形 构 成 的 网 格 定 义 的 如 图 7 唱 20, 给 定 16 个 顶 点 d ij (i =1,2,3,4, j =1,2,3,4) 构 成 的 特 征 网 格, 可 以 定 义 一 张 曲 面 片

210 曲 线 与 曲 面 第 7 章 197 图 7 唱 16 三 顶 点 重 合 情 形 图 7 唱 17 利 用 曲 线 退 化 绘 制 的 曲 线 实 例 图 7 唱 18 三 次 均 匀 B 样 条 曲 线 所 用 的 基 函 数 图 7 唱 19 均 匀 B 样 条 曲 线 生 成 的 实 例 首 先 用 d i1 d i2 d i3 d i4 ( i =1,2,3,4 ) 沿 v 向 构 建 4 条 曲 线 C 1 C 2 C 3 和 C 4 ( 图 中 虚 线 表 示 ), 然 后 让 参 数 v 在 [0,1] 之 间 取 值, 对 应 于 v k 曲 线 C 1 C 2 C 3 和 C 4 上 可 得 到 V 1 k V 2 k V 3 k 和 V 4 k 4 个 点, 该 4 个 点 构 成 u 向 的 一 个 特 征 多 边 形, 定 义 一 条 新 的 曲 线 P( u,v k ), 当 参 数 v k 在 [0,1] 之 间 取 不 同 值 时, P ( u, v k ) 沿 箭 头 方 向 扫 描, 即 得 到 由 给 定 特 征 网 格 d ij (i =1,2,3,4, j =1,2,3,4) 定 义 的 双 三 次 均 匀 B 样 条 曲 面 片 P(u,v) 双 三 次 均 匀 B 样 条 曲 面 片 P(u,v) 可 表 示 为 :

211 计 算 机 图 形 学 198 图 7 唱 20 特 征 网 格 及 其 定 义 的 双 三 次 均 匀 B 样 条 曲 面 片 P(u,v) =(1 uu 2 u 3 ) d 11 d 12 d 13 d 14 d 21 d 22 d 23 d 24 d 31 d 32 d 33 d 34 d 41 d 42 d 43 d 为 了 使 生 成 的 曲 面 片 通 过 特 征 网 格 的 4 个 角 点, 可 采 用 B 样 条 曲 线 重 节 点 的 方 法, 即 在 v 向 和 u 向 构 建 曲 线 时, 分 别 在 特 征 多 边 形 的 端 点 处 作 重 节 点 处 理, 则 生 成 的 曲 线 过 端 点, 双 向 计 算 后 得 到 的 曲 面 通 过 特 征 网 格 的 4 个 角 点 上 述 过 程 叙 述 的 是 给 定 特 征 网 格, 定 义 一 张 曲 面 实 际 应 用 中, 还 需 要 根 据 给 定 的 曲 面 反 求 特 征 网 格 的 顶 点, 以 便 进 行 新 的 设 计 这 部 分 内 容 将 在 后 面 相 关 章 节 介 绍 曲 线 反 求 控 制 多 边 形 顶 点 的 基 础 上 简 要 介 绍 v v 2 v 3

212 7.5 非 均 匀 有 理 B 样 条 曲 线 曲 面 非 均 匀 B 样 条 曲 线 曲 面 曲 线 与 曲 面 第 7 章 非 均 匀 B 样 条 基 函 数 考 虑 曲 线 弦 长 的 影 响, 则 曲 线 的 基 函 数 不 再 具 有 同 样 的 格 式, 必 须 根 据 给 定 数 据 点 进 行 弦 长 参 数 化, 然 后 根 据 基 函 数 的 定 义 式 (7 唱 21) 用 如 下 的 递 归 函 数 计 算 基 函 数 N i,k ( u) 的 值 : //k 次 规 范 B 样 条 基 函 数 //i =0,1,,n 表 示 控 制 顶 点 次 序 //U[i](i =0,1,,n) 是 对 应 于 给 定 数 据 点 的 节 点 参 数 double BsplineFunction (int i, int k,double u) { double sigama1,sigama2; if(k ==0) { if((u[i] <=u) && (u <U[i +1])) return 1; else return 0; } else { if((u[i +k] -U[i]) <1e -10) sigama1 =0.0; else sigama1 =( t -U[i])/(U[i +k] -U[i]); if((u[i +k +1] -U[i +1]) <1e -10) sigama2 =0; else sigama2 =( U[i +k +1] -u)/(u[i +k +1] -U[i +1]); return sigama1 倡 BsplineFunction ( i, k - 1, u ) + sigama2 倡 BsplineFunction (i +1,k -1,u); } } 非 均 匀 B 样 条 的 节 点 参 数 可 采 用 Hartley 唱 Judd 方 法, 即 所 画 曲 线 段 对 应 的 控 制 多 边 形 的 长 度 与 总 控 制 多 边 形 的 长 度 之 比 确 定 节 点 参 数 :

213 计 算 机 图 形 学 200 u i -u i -1 = n +1 s =K +1 i -1 l j j =i -K s -1 l j j =s -K i =k +1,k +2,,n 计 算 出 节 点 参 数 后, 就 可 以 用 上 述 递 归 函 数 计 算 基 函 数 N i,k ( u) 的 值 得 到 基 函 数 的 值, 即 可 以 用 如 下 的 曲 线 方 程 计 算 各 段 曲 线 上 的 点 : i +3 p(u) = d j N j,k (u) j =i 其 中, u [u i +3,u i +4 ] 炒 [u 3,u n +3 ], i =0,1,,n -1 非 均 匀 B 样 条 曲 线 考 虑 了 弦 长 的 影 响, 曲 线 不 会 因 为 节 点 分 布 不 均 匀 而 产 生 过 冲 和 扭 结, 如 图 7 唱 21 是 用 同 样 的 数 据 点 生 成 的 均 匀 B 样 条 曲 线 和 非 均 匀 B 样 条 曲 线 由 图 中 可 以 看 出, 非 均 匀 B 样 条 曲 线 比 均 匀 B 样 条 曲 线 具 有 更 好 的 光 顺 性 图 7 唱 21 非 均 匀 B 样 条 曲 线 比 B 样 条 曲 线 更 符 合 数 据 点 的 分 布 2. 非 均 匀 B 样 条 曲 线 的 实 现 根 据 非 均 匀 B 样 条 曲 线 方 程, 计 算 曲 线 上 的 点 需 要 对 应 参 数 区 间 上 的 基 函 数 的 值 和 控 制 多 边 形 的 顶 点 基 函 数 的 值 根 据 给 定 数 据 点 的 参 数 化 进 行 计 算 控 制 多 边 形 的 顶 点 依 据 曲 线 是 否 通 过 给 定 数 据 点 确 定, 若 生 成 的 曲 线 不 通 过 给 定 数 据 点, 则 给 定 数 据 点 就 是 控 制 多 边 形 顶 点 ; 若 生 成 的 曲 线 通 过 给 定 数 据 点, 则 首 先 必 须 根 据 给 定 数 据 点 反 求 控 制 多 边 形 的 顶 点, 然 后 再 代 入 曲 线 方 程 (1) 不 过 点 三 次 非 均 匀 B 样 条 曲 线 给 定 数 据 点 d i (i =0,1,,n -1 ) 就 是 控 制 多 边 形 的 顶 点 不 过 点 三 次 非 均 匀 B 样 条 开 口 和 闭 合 曲 线 需 分 别 处 理 1 开 口 曲 线 的 处 理 对 于 开 口 曲 线,n 个 数 据 点 只 画 n -3 段 曲 线, 需 n -2 个 节 点 参 数 而 计 算 [ U i, U i +1 ] 上 的 一 点, 要 用 到 除 它 们 之 外 的 前 3 个 和 后 3 个 节 点 参 数, 所 以 在 首 尾 各 添 加 3 个 节 点 参 数, 一 共 需 要 n +4 个 节 点 参 数 值 为 使 曲 线 过 给 定 数 据 的 首 末 点 ( 如 图 7 唱 22), 令

214 曲 线 与 曲 面 U 0 =U 1 =U 2 =0;U n +1 =U n +2 =U n +3 =1 ; 全 部 节 点 参 数 为 : U 0 =U 1 =U 2 =0 ; U K,U K +1,, U n ;U n +1 =U n +2 =U n +3 =1;U K =0;U i, i =K +1, K +2,, n 用 Hartley 唱 Judd 方 法, 即 所 画 曲 线 段 对 应 的 控 制 多 边 形 的 长 度 与 总 控 制 多 边 形 的 长 度 之 比 确 定 节 点 参 数 : i -1 l j j =i -K u i -u i -1 = n +1 s -1 i =k +1,k +2,,n l j s =K +1 j =s -K 第 7 章 201 图 7 唱 22 不 过 点 非 均 匀 B 样 条 曲 线 图 7 唱 23 不 过 点 闭 合 非 均 匀 B 样 条 曲 线 计 算 出 节 点 参 数 后, 就 可 以 用 上 述 递 归 函 数 计 算 基 函 数 N i,k ( u) 的 值, 得 到 基 函 数 的 值, 就 可 以 代 入 曲 线 方 程 计 算 各 段 曲 线 上 的 点 2 闭 合 曲 线 的 处 理 与 开 口 曲 线 不 同, 闭 合 曲 线 为 使 曲 线 首 末 点 闭 合, 控 制 多 边 形 顶 点 链 表 需 循 环 重 叠 使 用 图 7 唱 23 是 4 个 控 制 多 边 形 顶 点 的 重 叠 使 用 生 成 闭 合 曲 线 的 情 形 对 于 闭 合 曲 线,n 个 数 据 点 画 n 段 曲 线, 需 n +1 个 节 点 参 数 曲 线 ; 首 尾 通 过 循 环 重 叠 各 添 加 3 个 节 点 参 数, 共 n +7 个 节 点 参 数 由 于 不 过 点 闭 合 曲 线, 不 通 过 控 制 多 边 形 的 首 末 点, 全 部 节 点 参 数 为 : U 0 =0 <U 1 <U 2 <U K <U K +1 < <U n +3 <U n +4 <U n +5 <U n +6 =1 各 节 点 的 参 数 采 用 Hartley 唱 Judd 方 法, 从 记 录 控 制 顶 点 的 链 表 首 点 的 前 3 点 开 始 计 算 计 算 出 节 点 参 数 后, 就 可 以 计 算 基 函 数 N i,k ( u) 的 值, 然 后 用 曲 线 方 程 计 算 各 段 曲 线 上 的 点 (2) 过 点 三 次 非 均 匀 B 样 条 曲 线 过 点 三 次 非 均 匀 B 样 条 曲 线 也 分 为 开 口 和 闭 合 两 种 情 形 给 定 的 数 据 点 P i ( i =0, 1,,n -1 ) 是 曲 线 上 的 点 由 曲 线 方 程 知, 必 须 先 计 算 出 节 点 参 数, 再 计 算 基 函 数 N i,k (u) 的 值, 代 入 曲 线 方 程, 才 能 反 算 出 控 制 多 边 形 的 顶 点 1 开 口 曲 线 的 处 理 如 图 7 唱 24,n 个 曲 线 上 的 数 据 点 P i, 需 反 求 出 n +2 个 控 制 顶 点 d i, 画 n -1 段 曲 线, 需 n 个 节 点 参 数 ; 为 使 曲 线 过 首 末 点, 在 曲 线 首 端 重 3 段 曲 线 首 段 的 长 度, 在 曲 线 的 末 端 重 3

215 计 算 机 图 形 学 202 段 曲 线 末 段 的 长 度, 首 尾 各 添 加 3 个 节 点 参 数, 一 共 需 要 n +6 个 节 点 参 数 值 所 有 节 点 参 数 为 : U 0 =0 <U 1 <U 2 <U K <U K +1 < <U n +2 <U n +3 <U n +4 <U n +5 =1 U i =U i -1 + l i -1 L 图 7 唱 24 过 点 开 口 三 次 非 均 匀 B 样 条 曲 线 其 中, i =1, 2,,n +5 ; L 为 包 含 附 加 段 在 内 的 总 长 根 据 节 点 矢 量 计 算 基 函 数 N i,k (u) 的 值, 代 入 曲 线 方 程 可 以 计 算 n 个 已 知 的 曲 线 上 的 点, 得 如 下 方 程 : i +3 p(u i +3 ) = d jn j,k (u i +3 ) =p i j =i 其 中, u [u i +3,u i +4 ] 炒 [u 3,u n +2 ],i =0,1,,n -1 写 成 矩 阵 形 式 如 下 : 对 于 开 口 曲 线,d 0 =P 0, d n +1 =P n -1, 上 述 方 程 组 是 追 赶 法 能 够 求 解 的 三 对 角 方 程 求 出 d 0,d 1,,d n,d n +1 共 n +2 个 控 制 顶 点, 即 可 以 画 出 n -1 曲 线 2 闭 合 曲 线 的 处 理 如 图 7 唱 25 是 过 点 闭 合 三 次 非 均 匀 B 样 条 曲 线 示 例 给 定 n 个 曲 线 上 的 数 据 点 P i, 反 求 出 n 个 控 制 顶 点 d i, 画 n 段 曲 线, 需 n +1 个 节 点 参 数 ; 首 尾 通 过 节 点 循 环 重 叠 各 添 加 3 个 节 点 参 数, 一 共 需 要 n +7 个 节 点 参 数 值 计 算 节 点 参 数 时, 从 记 录 曲 线 上 点 的 链 表 表 头 的 前 3 点 开 始 计 算, 所 有 节 点 参 数 为 :

216 曲 线 与 曲 面 U 0 =0 <U 1 <U 2 <U K <U K +1 < <U n +3 <U n +4 <U n +5 <U n +6 =1 U i =U i -1 + l i -1 L 其 中, i =1,2,,n +6, L 为 包 含 重 叠 段 在 内 的 总 长 根 据 节 点 矢 量 计 算 基 函 数 N i,k ( u) 的 值, 代 入 曲 线 方 程 可 以 计 算 n 个 已 知 的 曲 线 上 的 点, 得 如 下 方 程 : i +3 p(u i +3 ) = d j N j,k (u i +3 ) =p i j =i 其 中,u [u i +3,u i +4 ] 炒 [u 3,u n +3 ],i =0,1,,n -1 对 于 闭 合 曲 线, 控 制 多 边 形 的 首 末 点 不 再 已 知, 所 以 图 7 唱 25 过 点 闭 合 三 次 非 上 述 方 程 组 不 是 追 赶 法 能 够 求 解 的 三 对 角 方 程 用 均 匀 B 样 条 曲 线 迭 代 法 求 出 d 0,d 1,,d n -1 共 n 个 控 制 顶 点, 通 过 链 表 循 环 画 出 n 段 曲 线 第 7 章 非 均 匀 三 次 B 样 条 曲 面 非 均 匀 三 次 B 样 条 曲 面 的 生 成 过 程 与 均 匀 B 样 条 曲 面 相 同 根 据 线 动 成 面 的 思 路, 首 先 沿 一 参 数 方 向 生 成 曲 线, 然 后 让 另 一 参 数 在 [0,1] 范 围 内 变 化, 在 已 生 成 的 曲 线 上 取 点 构 成 新 的 控 制 多 边 形, 生 成 曲 面 上 的 一 条 线, 随 着 v 的 变 化, 所 生 成 的 曲 线 构 成 一 张 曲 面 应 用 非 均 匀 B 样 条 生 成 曲 面 有 一 定 的 局 限 性, 当 同 一 参 数 方 向 各 型 值 点 的 分 布 规 律 接 近 时, 所 生 成 的 非 均 匀 B 样 条 曲 面 结 果 比 较 满 意

217 计 算 机 图 形 学 有 理 B 样 条 曲 线 204 非 均 匀 B 样 条 考 虑 节 点 分 布 不 匀 称 的 影 响, 但 与 所 有 已 介 绍 的 计 算 曲 线 一 样, 非 均 匀 B 样 条 不 能 精 确 表 达 二 次 曲 线 曲 面, 采 用 有 理 B 样 条, 可 以 统 一 表 达 自 由 曲 线 曲 面 和 二 次 曲 线 曲 面 有 理 B 样 条 曲 线 的 表 达 式 为 : P(u) = 其 中,ω i (i =0,1,,n) 称 为 权 因 子 n ω i d i N i,k (u) i =0 n ω i N i,k (u) i =0 N i,k (u) 是 式 (7 唱 21) 中 定 义 的 B 样 条 基 函 数 当 基 函 数 为 二 次 均 匀 B 样 条 基 函 数 时, 可 得 二 次 有 理 B 样 条 曲 线 表 达 式 : 令 ω = 1 2 [1 u u2 ] 达 式 : P(u) = (1 -u) 2 ω 0 d 0 +(1 +2u -2 u 2 )ω 1 d 1 +u 2 ω 2 d 2 (1 -u) 2 ω 0 +(1 +2u -2 u 2 )ω 1 +u 2 ω 2 (7 唱 23) ω 0 ω 1 ω 2 ωp(u) = 1 2 [1 u u2 ] 图 7 唱 26 所 示 为 二 次 有 理 B 样 条 曲 线 的 示 例, 则 二 次 有 理 B 样 条 曲 线 可 写 成 如 下 的 矩 阵 表 ω 0 d 0 ω 1 d 1 (7 唱 24) ω 2 d 2 图 7 唱 26 二 次 有 理 B 样 条 曲 线 及 其 控 制 多 边 形 由 式 (7 唱 24) 可 推 导 出 :

218 曲 线 与 曲 面 P 0 =P(0) = ω 0 d 0 +ω 1 d 1 ω 0 +ω 1 P 1 =P(1) = ω 1 d 1 +ω 2 d 2 ω 1 +ω 2 第 7 章 205 P 0 =P (0) = 4ω 1 ω 0 +ω 1 (V 1 -P 0 ) P 1 =P (1) = 4ω 1 ω 1 +ω 2 (P 1 -V 1 ) 由 式 中 可 以 看 出, 比 值 ω 0 /ω 1 ω 1 /ω 2 确 定 曲 线 段 首 末 点 在 d 0 d 1 和 d 1 d 2 的 位 置, 首 末 端 点 的 切 矢 与 其 所 在 的 边 的 方 向 一 致 权 因 子 可 以 调 节 曲 线 形 状, 正 权 因 子 将 曲 线 引 向 顶 点, 负 因 子 作 用 相 反 ω 0 ω 2 是 二 次 有 理 B 样 条 曲 线 的 参 数 变 换 不 变 量, 其 值 决 定 二 次 曲 线 的 分 类 : ω 2 0 ω 0 ω 2 ω 2 0 >1 =1 <1 椭 圆 抛 物 线 双 曲 线 ω 0 若 令 ω = 1 6 [1 u u2 u 3 ] ω 1 ω 2, 则 三 次 有 理 B 样 条 曲 线 可 写 成 ω 3 如 下 的 矩 阵 表 达 式 : ωp(u) = 1 6 [1 u u2 u 3 ] ω 0 d 0 ω 1 d 1 ω 2 d 2 ω 3 d 非 均 匀 有 理 B 样 条 曲 线 曲 面 有 理 B 样 条 曲 线 采 用 非 均 匀 的 基 函 数, 则 称 为 非 均 匀 有 理 B 样 条 曲 线 ( non 唱 uniform rational b 唱 spline,nurbs) 曲 线 非 均 匀 有 理 B 样 条 曲 线 的 表 达 式 为 : P(u) = 其 中,ω i(i =0,1,,n) 称 为 权 因 子 n ω i d i N i,k (u) i =0 n ω i N i,k (u) i =0

219 计 算 机 图 形 学 206 NURBS 曲 线 在 有 理 B 样 条 曲 线 的 基 础 上, 考 虑 了 节 点 分 布 不 匀 称 对 基 函 数 的 影 响, 同 时 能 够 精 确 地 描 述 二 次 圆 锥 曲 线 目 前 已 纳 入 到 产 品 形 状 定 义 的 工 业 标 准 之 中 很 多 软 件 或 程 序 具 有 生 成 NURBS 曲 线 和 曲 面 的 功 能 下 节 介 绍 用 OpenGL 生 成 NURBS 曲 线 和 曲 面 7.6 用 OpenGL 生 成 曲 线 和 曲 面 用 OpenGL 生 成 NURBS 曲 线 在 OpenGL 中,GLU 函 数 库 提 供 了 一 个 NURBS 接 口 用 户 需 要 提 供 的 数 据 包 括 控 制 点 节 点 等 数 据, 控 制 点 描 述 曲 线 的 大 致 形 状, 节 点 控 制 B 样 条 函 数 的 形 状 绘 制 一 条 NURBS 曲 线 的 步 骤 如 下 : 1 提 供 控 制 点 序 列 和 节 点 序 列 ; 2 创 建 一 个 NURBS 对 象, 设 置 NURBS 对 象 属 性 ; 3 绘 制 曲 线 创 建 一 个 NURBS 对 象, 用 如 下 两 条 语 句 : GLUnurbsObj 倡 thenurbs; thenurbs =glunewnurbsrender( ); 创 建 对 象 后, 用 如 下 函 数 设 置 NURBS 对 象 属 性 : void glunurbsproperty(glunurbsobj 倡 nobj,glenum property,glfloat value); nobj 是 glunewnurbsrender( ) 函 数 创 建 的 NURBS 对 象 property 是 OpenGL 的 常 量, 属 性 值 value 详 见 OpenGL 专 著 有 关 说 明 曲 线 的 绘 制 是 在 glubegincurve( )/gluendcurve( ) 函 数 对 中 完 成 绘 制 曲 线 的 函 数 为 : void glunurbscurve (GLUnurbsObj 倡 nobj,glint nknots,glfloat 倡 knot, GLint stride, GLfloat 倡 ctlarray, GLint order, GLenum type); 参 数 含 义 在 下 面 程 序 实 现 中 解 释 用 OpenGL 绘 制 一 条 NURBS 曲 线 : 在 视 口 类 中 添 加 成 员 函 数 DrawNurbsCurve(), 具 体 实 现 如 下 : void CView DrawNurbsCurve( ) { GLfloat controlpoints[7][3] ={{ -1.5f, -0.5f, 0.0f},{-1.0f, 1.0f, 0.

220 曲 线 与 曲 面 0f}, {-0.5f, -0.5f, 0.0f}, {0.0f, -2.0f, 0. 0f}, { 0.5f, -0.5f, 0.0f}, {1.0f, 1.0f, 0.0f}, {1.5f, -0.5f, 0.0f} };// 给 定 控 制 点 GLfloat knots[14] ={ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f }; // 节 点 glcolor3f (0.0f, 0.0f, 1.0f); GLUnurbsObj 倡 thenurb; // 创 建 NURBS 对 象 thenurb =glunewnurbsrenderer( ); 第 7 章 207 } glunurbsproperty (thenurb, GLU_SAMPLING_TOLERANCE, 10.0); // 属 性 //GLU_SAMPLING_TOLERANCE 表 示 边 缘 最 大 像 素 长 度 glnewlist(1, GL_COMPILE); glubegincurve(thenurb); glunurbscurve(thenurb, / 倡 NURBS 曲 线 对 象 倡 / 14, / 倡 参 数 区 间 节 点 数 目 = 控 制 点 数 +NURBS 曲 线 阶 数 倡 / knots, / 倡 节 点 倡 / 3, / 倡 曲 线 控 制 点 之 间 的 偏 移 量 倡 / (float 倡 )controlpoints, / 倡 控 制 点 倡 / 7, / 倡 曲 线 阶 数 倡 / GL_MAP1_VERTEX_3); / 倡 曲 线 类 型 倡 / gluendcurve(thenurb); glendlist(); glcalllist(1); 如 图 7 唱 27 是 生 成 的 NURBS 曲 线 用 OpenGL 生 成 NURBS 曲 面 NURBS 曲 面 的 绘 制 与 NURBS 曲 线 的 绘 制 过 程 是 一 致 的 但 曲 面 是 二 维 参 数 曲 面, 需 定 义 两 个 节 点 序 列 绘 制 一 张 NURBS 曲 面 的 步 骤 如 下 : 1 给 定 控 制 点 序 列 和 节 点 序 列 ; 2 给 出 或 自 动 生 成 法 矢 序 列 ; 3 创 建 NURBS 对 象 并 确 定 属 性 ; 4 进 行 光 照 ;

221 计 算 机 图 形 学 208 图 7 唱 27 OpenGL 绘 制 的 NURBS 曲 线 5 激 活 各 种 所 需 功 能 ; 6 绘 制 曲 面 ; 7 挂 起 各 种 已 用 功 能 绘 制 NURBS 曲 面 的 函 数 是 : void glunurbssurface (GLUnurbsObj 倡 nobj, GLint sknot _ count, GLint 倡 sknot, GLint tknot_count,glint 倡 tknot,glint s_stride, GLint t_stride, Glfloat 倡 ctlarray, GLint sorder, GLint torder, GLenum type); 参 数 含 义 在 下 面 程 序 实 现 中 解 释 在 视 口 类 中 添 加 成 员 函 数 DrawNurbsSurface(), 具 体 实 现 如 下 : void CView NurbsSurface() { GLfloat controlpoints[4][4][3] ={ {{ -0.5f, -1.0f,1.0f},{-0.2f, -1.0f,0.5f}, {0.2f, -1.0f,0.0f},{1.0f, - 1.0f, 0.5f}}, {{ -0.5f,-0.5f,1.0f},{ -0.2f, -0.5f,0.5f},{0.2f,-0.5f,0.0f},{1.0f, -0. 5f,0.5f}}, {{ -0.5f,0.5f,1.0f},{ -0.2f,0.5f,0.5f},{0.2f,0.5f,0.0f},{1.0f,0.5f,0. 5f}}, {{ -0.5f,1.0f,1.0f},{ -0.2f,1.0f,0.5f},{0.2f,1.0f,0.0f},{1.0f,1.0f,0.

222 曲 线 与 曲 面 5f}} };// 给 定 控 制 多 面 体 的 顶 点 GLfloat sknots[8] ={0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f}; // 参 数 s 的 节 点 GLfloat tknots[8] ={0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f}; // 参 数 t 的 节 点 Lighting(); // 光 照 函 数, 见 后 面 定 义 gldepthfunc(gl_less); glenable(gl_auto_normal); // 自 动 计 算 法 矢 glenable(gl_normalize); // 法 矢 规 范 化 GLUnurbsObj 倡 thenurb; thenurb =glunewnurbsrenderer(); // 创 建 NURBS 对 象 及 属 性 glunurbsproperty (thenurb, GLU_SAMPLING_TOLERANCE, 25.0); // 属 性 glunurbsproperty(thenurb, GLU_DISPLAY_MODE, GLU_FILL); // 绘 制 glnewlist (1, GL_COMPILE); glubeginsurface(thenurb); glunurbssurface(thenurb, 8, sknots, / 倡 s 向 节 点 数 目 与 节 点 倡 / 8, tknots, / 倡 t 向 节 点 数 目 与 节 点 倡 / 3, / 倡 倡 / 12, / 倡 倡 / (float 倡 )controlpoints, / 倡 控 制 多 面 体 的 顶 点 倡 / 4, 4, / 倡 两 参 数 方 向 曲 面 的 阶 数 倡 / GL_MAP2_VERTEX_3); / 倡 倡 / gluendsurface(thenurb); glendlist(); glpushmatrix(); glscalef(1.2f,1.2f,1.2f); glrotatef(45.0f,1.0f,0.0f,0.0f); glrotatef(30.0f, 0.0f, 0.0f, 1.0f); glcalllist (1); glpopmatrix(); gldisable(gl_auto_normal); gldisable(gl_normalize); gldisable(gl_lighting); } void CView Lighting() 第 7 章 209

223 计 算 机 图 形 学 210 { } GLfloat lightamb[] ={ 0.2f, 0.2f, 0.2f, 1.0f }; GLfloat lightpos[] ={ 1.0f, 1.0f, 2.0f, 1.0f }; GLfloat matdiffuse[] ={ 0.0f, 0.7f, 0.7f, 1.0f }; GLfloat matspecular[] ={ 1.0f, 1.0f, 1.0f, 1.0f }; GLfloat matshininess[] ={ 60.0f }; glenable(gl_lighting); glenable(gl_light0); gllightfv( GL_LIGHT0, GL_AMBIENT, lightamb); gllightfv(gl_light0, GL_POSITION, lightpos); glmaterialfv(gl_front, GL_DIFFUSE, matdiffuse); glmaterialfv(gl_front, GL_SPECULAR, matspecular); glmaterialfv(gl_front, GL_SHININESS, matshininess); 如 图 7 唱 28 是 生 成 的 NURBS 曲 面 图 7 唱 28 OpenGL 绘 制 的 NURBS 曲 面 用 OpenGL 生 成 裁 剪 NURBS 曲 面 OpenGL 提 供 了 对 曲 面 进 行 剪 切 的 功 能 利 用 这 个 功 能 可 以 生 成 包 含 空 洞 的 曲 面 剪 切 区 域 由 一 条 闭 合 曲 线 定 义 内 部 边 界 节 点 按 顺 时 针 方 向 给 出, 边 界 右 侧 是 被 剪 切 的 区 域 剪 切 曲 线 可 由 glupwlcurve( ) 和 glunurbscurve( ) 或 其 组 合 定 义 glupwlcurve( ) 的 定 义 如 下 : void glupwlcurve (GLUnurbsObj 倡 nobj,glint count,glfloat 倡 ctlarray, GLint stride, GLenum type); 参 数 含 义 在 下 面 程 序 实 现 中 解 释

224 曲 线 与 曲 面 在 视 口 类 中 添 加 成 员 函 数 NurbsSufacTrim(), 具 体 实 现 如 下 : void CView NurbsSufacTrim() { GLfloat controlpoints[4][4][3] ={ {{ -0.5f,-1.0f,1.0f},{ -0.2f, -1.0f,0.5f},{0.2f, -1.0f,0.0f},{1.0f, -1. 0f,0.5f}}, {{ -0.5f,-0.5f,1.0f},{ -0.2f, -0.5f,0.5f},{0.2f,-0.5f,0.0f},{1.0f, -0. 5f,0.5f}}, {{ -0.5f, 0.5f, 1.0f}, { -0.2f, 0.5f, 0.5f}, {0.2f, 0.5f, 0.0f}, {1.0f, 0. 5f, 0.5f}}, {{ -0.5f, 1.0f, 1.0f}, { -0.2f, 1.0f, 0.5f}, {0.2f, 1.0f, 0.0f}, {1.0f, 1. 0f, 0.5f}} };// 给 定 控 制 多 面 体 顶 点 GLfloat sknots[8] ={0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f}; 节 点 GLfloat tknots[8] ={0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f}; 节 点 GLfloat edgepoint[5][2] ={{0.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, 1.0f}, {0. 0f, 1.0f}, {0.0f, 0.0f} };// 外 边 界 : 逆 时 针 GLfloat pwlpoint[5][2] ={{0.75f, 0.75f}, {0.75f, 0.25f}, {0.25f, 0.25f},{0. 25f,0.75f}, {0.75f, 0.75f} };// 内 边 界 : 顺 时 针 Lighting(); // 光 照 gldepthfunc(gl_less); glenable(gl_auto_normal); glenable(gl_normalize); GLUnurbsObj 倡 thenurb; thenurb =glunewnurbsrenderer(); // 创 建 NURBS 对 象 及 属 性 glunurbsproperty (thenurb, GLU_SAMPLING_TOLERANCE, 25.0); // 属 性 glunurbsproperty(thenurb, GLU_DISPLAY_MODE, GLU_FILL); // 绘 制 glnewlist (1, GL_COMPILE); glubeginsurface(thenurb); glunurbssurface(thenurb, 8, sknots, 8, tknots, 3, // // 第 7 章 211

225 计 算 机 图 形 学 , (float 倡 )controlpoints, 4, 4, GL_MAP2_VERTEX_3); glubegintrim ( thenurb); glupwlcurve (thenurb, 5, / 倡 剪 切 曲 线 顶 点 数 倡 / (float 倡 )edgepoint, / 倡 剪 切 曲 线 顶 点 倡 / 2, / 倡 倡 / GLU_MAP1_TRIM_2); gluendtrim (thenurb); glubegintrim ( thenurb); glupwlcurve (thenurb, 5, (float 倡 )pwlpoint, 2, GLU_MAP1_TRIM_2); gluendtrim (thenurb); gluendsurface(thenurb); glendlist(); / 倡 倡 / } glpushmatrix(); glscalef(1.2f,1.2f,1.2f); glrotatef(10.0f,1.0f,0.0f,0.0f); glrotatef(30.0f,0.0f,0.0f,1.0f); glcalllist (1); glpopmatrix(); gldisable(gl_auto_normal); gldisable(gl_normalize); gldisable(gl_lighting); 如 图 7 唱 29 是 生 成 的 NURBS 曲 面 习 题 7.1 依 据 曲 线 曲 面 设 计 方 法 的 发 展 历 程, 分 析 曲 线 曲 面 设 计 的 要 求 7.2 图 示 三 次 均 匀 B 样 条 曲 线 控 制 顶 点 与 曲 线 首 末 点 及 一 阶 导 矢 二 阶 导 矢 的 关 系 7.3 自 行 设 计 一 个 二 次 曲 线 ( 圆 椭 圆 抛 物 线 或 双 曲 线 ) 方 程, 根 据 方 程, 不 均 匀 地 采 集 一 定 数 量 已 知 二 次 曲 线 上 的 点, 设 计 程 序 过 采 样 点 画 三 次 均 匀 B 样 条 曲 线 和 非 均 匀 B 样 条 曲 线, 并 与 已 知 曲 线 比 较

226 曲 线 与 曲 面 第 7 章 213 图 7 唱 29 OpenGL 绘 制 的 NURBS 剪 切 曲 面 7.4 自 行 设 计 一 个 椭 球 方 程, 从 椭 球 面 上 采 集 样 点 作 为 控 制 顶 点, 利 用 OpenGL 函 数 库 编 程 绘 制 NURBS 曲 面 7.5 在 VC 环 境 下, 基 于 OpenGL 编 制 交 互 式 生 成 与 编 辑 NURBS 曲 线 的 程 序 要 求 曲 线 的 编 辑 功 能 包 括 增 加 删 除 和 移 动 曲 线 控 制 点 7.6 在 VC 环 境 下, 基 于 OpenGL 编 制 交 互 式 生 成 与 编 辑 NURBS 曲 面 的 程 序 要 求 能 够 设 置 曲 面 控 制 点 阵 个 数 生 成 初 始 点 阵 编 辑 节 点 位 置 等 功 能

227 第 8 章 几 何 建 模 客 观 世 界 中 的 物 体 都 是 三 维 的, 真 实 地 描 述 和 显 示 客 观 世 界 中 的 三 维 物 体 是 计 算 机 图 形 学 研 究 的 主 要 内 容 对 于 规 则 的 人 造 物 体, 基 于 欧 氏 几 何 的 几 何 模 型 能 够 较 好 地 描 述 物 体 的 几 何 信 息 和 拓 扑 信 息 而 对 于 树 木 花 草 河 流 山 川 火 焰 云 雾 等 自 然 对 象, 采 用 传 统 的 几 何 模 型 很 难 描 述, 基 于 分 形 几 何 的 建 模 方 法 目 前 只 能 定 性 描 述 自 然 对 象, 精 确 描 述 自 然 对 象 的 建 模 方 法 尚 处 于 发 展 之 中, 本 章 重 点 介 绍 成 熟 的 规 则 几 何 建 模 方 法 8.1 概 述 几 何 模 型 描 述 物 体 的 几 何 信 息 和 拓 扑 信 息 几 何 信 息 是 指 物 体 在 欧 氏 空 间 中 的 形 状 位 置 和 大 小, 拓 扑 信 息 则 是 指 物 体 各 分 量 的 数 目 及 其 相 互 间 的 连 接 关 系 线 框 模 型 是 计 算 机 图 形 学 较 早 采 用 的 几 何 模 型 线 框 模 型 中 物 体 只 通 过 顶 点 和 棱 边 来 描 述, 虽 然 所 占 的 存 储 空 间 较 少, 但 没 有 包 含 全 部 的 信 息, 定 义 的 物 体 存 在 多 义 性 如 图 8 唱 1 所 示 的 长 方 体 可 以 理 解 为 图 8 唱 2 中 的 两 种 情 形 此 外, 线 框 模 型 不 能 处 理 物 体 的 侧 影 轮 廓 线, 也 不 能 生 成 剖 切 图 消 隐 图 明 暗 色 彩 图 等, 其 应 用 范 围 很 有 限 图 8 唱 1 线 框 模 型 表 示 的 长 方 体 图 8 唱 2 长 方 体 线 框 模 型 的 歧 义 表 面 模 型 是 用 面 的 集 合 来 表 示 物 体, 常 用 于 表 面 不 能 用 简 单 的 数 学 模 型 进 行 描 述 的 物 体, 如 汽 车 飞 机 船 舶 的 一 些 外 表 面 图 8 唱 3 和 图 8 唱 4 是 表 面 模 型 表 示 的 物 体 表 面 模 型 能 够 表 示 外 表 面 信 息, 闭 合 表 面 表 示 的 物 体 打 孔 时 会 出 现 如 图 8 唱 4 所 示 的 空 洞, 即 孔 的 四 周 没 有 内 壁 空 壳 表 示 的 物 体 模 型 无 法 计 算 和 分 析 物 体 的 整 体 性

228 几 何 建 模 第 8 章 215 图 8 唱 3 表 面 模 型 表 示 的 管 状 物 体 图 8 唱 4 表 面 模 型 表 示 的 带 孔 平 板 质, 如 体 积 重 量 转 矩 动 量 等 实 体 模 型 能 完 整 表 示 物 体 的 所 有 形 状 信 息, 并 能 够 赋 予 颜 色 材 料 等 特 性, 满 足 物 性 计 算 有 限 元 分 析 等 应 用 的 要 求 经 过 最 近 20 多 年 的 发 展, 三 维 实 体 建 模 方 法 逐 渐 成 熟, 在 CAD /CAM 影 视 动 画 游 戏 等 众 多 领 域 得 到 应 用 常 用 的 三 维 实 体 模 型 有 体 素 构 造 表 示 法 边 界 表 示 法 和 空 间 单 元 表 示 法 等 基 本 体 素 8.2 体 素 构 造 表 示 法 体 素 是 可 以 用 有 限 个 尺 寸 参 数 定 位 和 定 形 的 体, 常 用 3 种 形 式 定 义 : (1) 从 实 际 形 体 中 选 择 出 来, 可 用 一 些 确 定 的 尺 寸 参 数 控 制 最 终 位 置 和 形 状 的 一 组 单 元 如 长 方 形 圆 柱 体 圆 锥 体 圆 环 体 球 体 等 (2) 由 参 数 定 义 的 一 条 ( 或 一 组 ) 截 面 轮 廓 线 沿 一 条 ( 或 一 组 ) 空 间 参 数 曲 线 作 扫 描 运 动 而 产 生 的 形 体 (3) 用 代 数 半 空 间 定 义 的 形 体, 在 此 半 空 间 中 点 集 可 定 义 为 :{(x,y,z) f( x,y,z) 0}, 此 处 的 f 应 该 是 不 可 约 多 项 式, 多 项 式 系 数 可 以 是 形 状 参 数 半 空 间 定 义 法 只 适 用 正 则 形 体 目 前 在 一 般 的 造 型 系 统 中, 通 常 给 出 一 些 基 本 体 素, 这 些 体 素 的 大 小 形 状 位 置 和 方 位 均 由 操 作 者 给 定 几 个 参 数 来 确 定 随 后 系 统 对 有 关 的 参 数 进 行 验 证, 确 定 其 有 效 性 如 果 各 种 基 本 体 素 都 是 由 系 统 定 义 的 有 效 实 体, 并 且 组 合 算 子 也 都 是 正 则 化 的, 那 么 得 出 的 实 体 模 型 就 是 有 效 的 实 体 正 则 集 合 运 算 根 据 点 集 拓 扑 学 的 原 理,Tilove 给 出 了 正 则 集 的 定 义 正 则 的 几 何 形 体 是 由 其 内 部 点 的 闭 包 构 成, 即 由 内 部 点 和 边 界 两 部 分 组 成 对 于 几 何 造 型 中 的 形 体, 规 定 正 则 形 体 是 三 维 欧 氏 空 间 中 的 正 则 集 合, 因 此 可 以 将 正 则 几 何 体 描 述 如 下 : 假 设 G 是 三 维 欧 氏 空 间

229 计 算 机 图 形 学 216 中 的 一 个 有 界 区 域, 且 G =bg ig, 其 中 bg 是 G 的 n -1 维 边 界,iG 是 G 的 内 部 G 的 补 空 间 cg 称 为 G 的 外 部, 此 时 正 则 形 体 G 必 须 满 足 以 下 的 条 件 : (1) bg 将 ig 和 cg 分 为 两 个 互 不 连 通 的 子 空 间 ; (2) bg 中 的 任 意 一 点 可 以 使 ig 和 bg 连 通 ; (3) bg 中 任 意 一 点 存 在 切 平 面, 其 法 矢 指 向 cg 的 子 空 间 ; (4) bg 是 二 维 流 形 对 于 正 则 形 体 集 合, 可 以 定 义 正 则 集 合 算 子 假 设 <OP > 是 集 合 运 算 算 子 ( 交 并 差 ) 如 果 R 3 中 任 意 两 个 正 则 形 体 A B 作 集 合 运 算 : R =A <OP >B 运 算 结 果 R 仍 然 是 R 3 倡 中 的 正 则 形 体, 则 称 <OP > 为 正 则 集 合 算 子, 正 则 并 正 则 交 正 则 差 分 别 记 为, 倡 倡,- 几 何 建 模 中 的 集 合 运 算 实 质 上 是 对 集 合 中 的 成 员 进 行 分 类 的 问 题,Tilove 给 出 了 集 合 成 员 分 类 问 题 的 定 义 及 判 定 方 法 Tilove 对 分 类 问 题 的 定 义 为 : 设 S 为 待 分 类 元 素 组 成 的 集 合,G 是 一 正 则 集 合, 则 S 相 对 于 G 的 分 类 函 数 为 : C(S,G) ={S in G,S out G,S on G} (8 唱 1) 其 中 : S in G =S ig S out G =S cg S on G =S bg 如 果 S 是 形 体 的 表 面,G 是 一 正 则 形 体, 则 定 义 S 相 对 于 G 的 分 类 函 数 时, 需 要 考 虑 S 的 法 向 量 记 -S 为 S 的 反 向 面 形 体 表 面 S 上 一 点 P 相 对 于 外 侧 的 法 向 量 为 N p (S), 相 反 方 向 的 法 向 量 为 -N p (S), 则 式 (8 唱 1) 中 的 S on G 可 分 为 两 种 情 况 : S on G ={S shared (bg),s shared(-bg)} 其 中 : S shared (bg) ={P P S,P bg,n p (S) =N p (bg)} S shared (-bg) ={P P S,P bg,n p (S) =-N p (bg)} 于 是 S 相 对 于 G 的 分 类 函 数 C(S,G) 可 写 成 : C(S,G) ={S in G,S out G,S shared (bg), S shared (-bg)} 由 此, 正 则 集 合 运 算 定 义 的 形 体 边 界 可 表 达 为 : 倡 b(a B) ={ba out B, bb out A, ba shared (bb)} 倡 b(a B) ={ba in B, bb in A, ba shared (bb)} 倡 b(a - B) ={ba out B, -(bb in A), ba shared (-bb)} 图 8 唱 5 是 两 几 何 形 体 通 过 交 并 差 运 算 构 造 的 新 实 体

230 几 何 建 模 第 8 章 217 图 8 唱 5 几 何 形 体 的 交 并 差 运 算 物 体 的 CSG 树 表 示 在 许 多 情 况 下, 一 个 复 杂 物 体 可 由 一 些 比 较 简 单 规 则 的 物 体 经 过 布 尔 运 算 而 得 到 因 而, 这 个 复 杂 的 物 体 可 描 述 为 一 棵 树 这 棵 树 的 终 端 结 点 为 基 本 体 素 ( 如 立 方 体 圆 柱 圆 锥 ), 而 中 间 结 点 为 正 则 集 合 运 算 结 点 这 棵 树 叫 做 CSG 树, 如 图 8 唱 6 所 示 CSG 树 只 定 义 了 它 所 表 示 物 体 的 构 造 方 式, 既 不 反 映 物 体 的 面 边 顶 点 等 有 关 边 界 信 息, 也 不 显 式 说 明 三 维 点 集 与 所 表 示 的 物 体 在 实 际 空 间 的 一 一 对 应 关 系 因 此, 这 种 表 示 又 被 称 为 物 体 的 隐 式 模 型 或 过 程 模 型 用 CSG 树 表 示 一 个 复 杂 形 体 十 分 简 洁, 但 CSG 树 不 能 显 式 地 表 示 形 体 的 边 界, 无 法 直 接 显 示 CSG 树 表 示 的 形 体, 但 采 用 光 线 投 射 算 法 能 够 对 物 体 进 行 快 速 的 光 栅 处 理 图 8 唱 6 形 体 的 CSG 表 示 物 体 的 边 界 表 示 法 8.3 边 界 表 示 法 三 维 物 体 可 以 通 过 描 述 它 的 边 界 来 表 示, 如 此 表 示 三 维 物 体 的 方 法 称 为 边 界 表 示 法

231 计 算 机 图 形 学 所 谓 边 界 就 是 物 体 内 部 点 与 外 部 点 的 分 界 面 显 然, 定 义 了 物 体 的 边 界, 该 物 体 也 就 被 惟 一 地 定 义 了 图 8 唱 7 为 边 界 表 示 法 的 一 个 例 子 218 图 8 唱 7 物 体 的 边 界 表 示 要 用 实 体 的 边 界 信 息 表 示 一 个 实 体, 必 须 同 时 表 示 出 实 体 边 界 的 拓 扑 和 几 何 信 息 物 体 的 拓 扑 信 息 指 物 体 上 所 有 的 顶 点 棱 边 表 面 间 是 怎 样 连 接 的 就 多 面 体 而 言, 其 顶 点 棱 边 表 面 之 间 的 连 接 关 系 可 以 用 9 种 不 同 的 形 式 予 以 描 述 如 图 8 唱 8 所 示 其 中, 每 一 种 关 系 都 可 由 其 他 一 种 关 系 经 过 适 当 的 运 算 导 出 究 竟 采 用 哪 种 关 系 或 哪 几 种 关 系 取 决 于 边 界 表 示 所 支 持 的 各 种 运 算, 以 及 存 储 空 间 的 限 制 例 如, 若 边 界 表 示 要 支 持 从 边 查 找 共 享 该 边 的 多 边 形 的 运 算, 则 数 据 结 构 中 最 好 包 括 拓 扑 关 系 e {f} 数 据 结 构 中 保 存 的 拓 扑 关 系 越 多, 对 多 面 体 的 操 作 越 方 便, 但 是 占 用 的 存 储 空 间 也 就 越 大 因 此 要 根 据 实 际 情 况 选 择 拓 扑 关 系, 以 提 高 系 统 的 整 体 效 率 边 界 表 示 法 中 最 为 典 型 的 数 据 结 构 是 翼 边 结 构 翼 边 结 构 是 美 国 斯 坦 福 大 学 的 B.G.Baugart 等 人 于 1972 年 提 出 来 的, 它 是 一 个 多 面 体 表 达 模 式 在 表 面 棱 边 顶 点 组 成 的 形 体 三 要 素 中, 翼 边 结 构 以 边 为 核 心 来 组 织 数 据, 如 图 8 唱 9 所 示 棱 边 的 数 据 结 构 中 包 含 2 个 点 指 针, 分 别 指 向 该 边 的 起 点 和 终 点, 棱 边 被 看 作 一 个 有 向 线 段 当 一 个 形 体 正 好 是 多 面 体 时, 其 棱 边 为 直 线 段, 由 它 的 起 点 和 终 点 惟 一 确 定 ; 当 形 体 为 曲 面 体 时, 其 棱 边 可 能 为 一 曲 线 段, 这 时, 必 须 增 添 一 指 针 指 向 所 在 的 曲 线 的 数 据 在 翼 边 结 构 中 还 设 有 2 个 指 针, 分 别 指 向 棱 边 所 邻 接 的 两 个 表 面 上 的 环 由 这 种 边 环 关 系 就 能 确 定 棱 边 与 相 邻 面 之 间 的 拓 扑 关 系 为 了 能 从 棱 边 出 发 搜 索 到 它 所 在 的 任 一 闭 环 上 的 其 他 棱 边, 数 据 结

232 几 何 建 模 第 8 章 219 图 8 唱 8 顶 点 棱 边 表 面 之 间 的 拓 扑 关 系 构 中 又 增 设 了 4 个 指 向 下 边 其 中 右 下 边 表 示 该 棱 边 在 右 面 环 中 沿 逆 时 针 方 向 所 连 接 的 下 一 条 棱 边, 而 左 上 边 则 为 棱 边 在 右 面 环 中 沿 逆 时 针 方 向 所 连 接 的 下 一 条 棱 边, 右 上 边 和 左 下 边 同 样 如 此 边 界 表 示 的 另 一 种 比 较 典 型 的 数 据 结 构 是 半 边 数 据 结 构 它 是 作 为 一 种 多 面 体 的 表 示 方 法 在 20 世 纪 80 年 代 提 出 来 的 在 构 成 多 面 体 的 三 要 素 ( 顶 点 边 体 ) 中, 半 边 数 据 结 构 以 边 为 核 心 为 了 方 便 表 达 拓 扑 关 系, 它 将 一 条 边 表 示 成 拓 扑 意 义 上 的 方 向 相 反 的 两 条 半 边, 所 以 称 为 半 边 数 据 结 构, 如 图 8 唱 10 所 示 半 边 数 据 结 构 在 拓 扑 上 分 为 5 个 层 次, 即 体 面 环 半 边 顶 点, 每 层 拓 扑 元 素 所 包 含 图 8 唱 9 翼 边 结 构 的 主 要 属 性 如 图 8 唱 11 所 示 非 流 形 结 构 的 边 界 表 示 法 在 几 何 造 型 系 统 中, 一 般 要 求 实 体 是 正 则 几 何 形 体 但 在 实 际 使 用 中, 常 常 会 遇 到 非 流 形 结 构 的 实 体, 如 一 个 锥 与 另 一 表 面 单 点 接 触, 两 个 或

233 计 算 机 图 形 学 220 图 8 唱 10 半 边 结 构 图 8 唱 11 半 边 数 据 结 构 的 层 次 关 系 两 个 以 上 的 面 交 于 同 一 条 边, 具 有 悬 挂 边 或 悬 挂 面 实 体 等, 这 些 都 不 能 在 一 个 二 维 流 形 建 模 系 统 中 加 以 处 理 为 了 表 示 这 些 非 流 形 结 构 的 实 体,1986 年 Weiler 提 出 了 辐 射 边 ( radial edge) 数 据 结 构, 如 图 8 唱 12 所 示 辐 射 边 结 构 的 形 体 模 型 由 几 何 信 息 (geometry) 和 拓 扑 信 息 (topology) 两 部 分 组 成 几 何 信 息 有 面 ( face) 环 ( loop) 边 ( edge) 和 点 (vertex); 拓 扑 信 息 有 模 型 ( model) 区 域 ( region) 外 壳 (shell) 面 引 用 ( face use) 环 引 用 ( loop use) 边 引 用 (edge use) 和 点 引 用 (vertex use) 这 里 点 是 三 维 空 间 的 一 个 位 置, 边 可 以 是 直 线 边 或 曲 线 边, 边 的 端 点 可 以 重 合 环 是 由 首 尾 相 接 的 一 些 边 组 成, 而 且 最 后 一 条 边 的 终 点 与 第 一 条 边 的 起 点 重 合 ; 环 也 可 以 是 一 个 孤 立 点 外 壳 是 一 些 点 边 环 面 的 集 合 ; 外 壳 所 含 的 面 集 有 可 能 围 成 封 闭 的 三 维 区 域, 从 而 构 成 一 个 实 体 ; 外 壳 还 可 以 表 示 图 8 唱 12 辐 射 边 数 据 结 构 任 意 的 一 张 曲 面 或 若 干 个 曲 面 构 成 的 面 组 ; 外 壳 还 可 以 是 一 条 边 或 一 个 孤 立 点 外 壳 中 的 环 和 边 有 时 被 称 为 线 框 环 和 线 框 边, 这 是 因 为 它 们 可 以 用 于 表 示 形 体 的 线 框 图 区 域 由 一 组 外 壳 组 成, 而 模 型 由 区 域 组 成

234 8.4 其 他 表 示 方 法 几 何 建 模 第 8 章 扫 描 法 221 扫 描 法 的 基 本 思 想 非 常 简 单 : 一 个 在 空 间 移 动 的 几 何 集 合, 可 扫 描 出 一 个 实 体 扫 描 法 可 表 示 为 运 动 的 物 体 加 上 轨 迹 仅 仅 当 二 维 的 几 何 集 合 体 表 示 正 确 时, 才 能 得 到 正 确 的 扫 描 体 常 用 的 扫 描 方 式 有 : 平 移 式 旋 转 式 和 广 义 式 平 移 扫 描 法 若 扫 描 是 沿 垂 直 于 二 维 的 集 合 进 行 的, 即 为 平 移 扫 描 旋 转 扫 描 法 若 扫 描 是 绕 某 一 轴 线 旋 转 某 一 角 度, 即 为 旋 转 扫 描 广 义 扫 描 法 如 果 使 二 维 几 何 集 合 沿 一 条 空 间 曲 线 的 集 合 扫 描, 则 可 以 形 成 一 个 复 杂 的 几 何 体 平 移 式 的 扫 描 将 一 平 面 区 域 沿 某 矢 量 方 向 移 动 一 给 定 的 距 离, 产 生 一 个 柱 体, 如 图 8 唱 13 所 示 常 用 的 立 方 体 和 圆 柱 体 等 基 本 体 即 可 以 用 此 法 生 成 但 是 它 的 适 用 范 围 只 限 于 具 有 平 移 对 称 性 的 一 些 实 体 旋 转 式 的 扫 描 将 一 平 面 区 域 绕 一 轴 线 旋 转, 产 生 一 个 旋 转 体, 一 个 矩 形 如 以 它 的 一 边 为 轴 旋 转 后 产 生 一 个 圆 柱 体 类 似 地, 可 以 产 生 圆 锥 圆 台 球 圆 环 等, 如 图 8 唱 14 所 示 它 只 限 于 具 有 旋 转 对 称 性 的 实 体 广 义 扫 描 将 一 平 面 区 域 沿 任 意 的 空 间 轨 迹 线 移 动, 生 成 一 个 三 维 物 体, 如 图 8 唱 15 所 示 广 义 的 扫 描 的 造 型 能 力 很 强, 完 全 包 含 平 移 式 和 旋 转 式 扫 描 但 是 由 于 广 义 扫 描 的 几 何 造 型 算 法 十 分 复 杂, 因 此 平 移 式 和 旋 转 式 扫 描 仍 然 从 广 义 扫 描 中 独 立 出 来, 单 独 处 理 图 8 唱 13 平 移 式 扫 描 扫 描 法 简 单 可 靠, 使 用 方 便, 是 实 体 造 型 系 统 常 用 的 建 模 方 法 立 方 体 网 格 模 型 立 方 体 网 格 模 型 是 将 包 含 实 体 的 空 间 分 割 成 均 匀 的 小 立 方 体, 建 立 一 个 三 维 数 组, 使 数 组 中 的 每 一 个 元 素 p[i][j][k] 与 ( i,j,k) 的 小 立 方 体 相 对 应 当 该 立 方 体 被 物 体 所 占 据 时,p[i][j][k] 的 值 为 1, 否 则 为 0 这 样 数 组 就 惟 一 地 表 示 了 包 含 于 立 方 体 之 内 的 所 有 物 体

235 计 算 机 图 形 学 D \10 24\ 新 建 文 件 夹 \ 计 算 机 图 形 222 图 8 唱 14 旋 转 式 扫 描 图 8 唱 15 广 义 式 扫 描 采 用 这 种 模 型, 可 以 表 示 任 何 实 体, 而 且 很 容 易 实 现 实 体 的 集 合 运 算 以 及 体 积 计 算 但 是 这 种 方 法 不 是 一 种 精 确 的 表 示 法, 其 近 似 程 度 完 全 取 决 于 分 割 的 精 度, 与 几 何 体 的 复 杂 程 度 无 关 另 外, 更 重 要 的 是 要 存 储 全 部 的 有 关 信 息 需 要 大 量 的 存 储 空 间 八 叉 树 模 型 八 叉 树 表 示 是 一 种 层 次 结 构, 首 先 在 空 间 中 定 义 一 个 能 够 包 含 所 表 示 物 体 的 立 方 体 立 方 体 的 3 条 棱 边 分 别 与 x,y,z 轴 平 行, 边 长 为 2 n 若 立 方 体 内 空 间 完 全 由 所 表 示 的 物 体 所 占 据, 则 物 体 可 用 这 个 立 方 体 予 以 表 示, 否 则 将 立 方 体 等 分 为 8 个 小 块, 每 块 仍 为 一 个 小 立 方 体, 其 边 长 为 原 边 长 的 1/2 将 这 8 个 立 方 体 依 次 编 号 为 0,1,2,,7, 如 图 8 唱 16 所 示 如 果 子 立 方 体 单 元 已 经 一 致, 即 为 满 ( 该 立 方 体 充 满 形 体, 则 标 识 为 FULL ) 或 为 空 ( 没 有 形 体 在 其 中, 则 标 识 为 EMPTY ), 则 该 子 立 方 体 停 止 分 解 ; 否 则, 该 立 方 体 进 一 步 分 解 依 此 方 式, 物 体 在 计 算 机 内 可 表 示 为 一 棵 八 叉 树 凡 是 标 识 为 FULL 或 EMPTY 的 立 方 体 均 为 终 端 结 点, 而 标 识 为 PARTIAL 的 立 方 体 为 非 终 端 结 点 最 后, 分 割 生 成 的 每 一 小 立 方 体 的 边 长 为 1 个 单 位 时, 分 割 即 终 止 此 时 应 将 每 一 标 识 为 PARTIAL 的 小 立 方 体 重 新 标 识 为 FULL 三 维 物 体 的 八 叉 树 表 示 如 图 8 唱 16 所 示 物 体 之 间 的 集 合 运 算 在 八 叉 树 表 示 中 具 有 十 分 简 单 的 形 式 由 定 义 可 知, 两 物 体 的 并 就 是 这 两 个 物 体 一 共 占 有 的 空 间, 而 物 体 之 间 的 交 即 它 们 共 同 占 有 的 空 间 由 于 物 体 的 八 叉 树 表 示 就 是 它 内 部 所 有 的 大 大 小 小 的 立 方 体 组 成, 因 此 对 物 体 执 行 并 交 差 运 算 时, 只 需 要 同 时 遍 历 参 加 集 合 运 算 的 两 物 体 相 应 的 八 叉 树, 就 可 以 获 得 拼 合 体 的 八 叉 树, 而 无 需 进 行 复 杂 的 求 交 运 算 用 八 叉 树 表 示 的 实 体, 很 容 易 计 算 实 体 的 整 体 性 质, 如 质 量 体 积 等 八 叉 树 中 每 一 层 节 点 的 体 积 都 是 已 知 的, 只 要 遍 历 一 次 即 可 获 得 整 个 实 体 的 体 积 容 易 实 现 隐 藏 线 和 隐 藏 面 的 消 除 消 隐 算 法 的 关 键 是 按 其 距 离 视 点 的 远 近 排 序, 而

236 几 何 建 模 第 8 章 223 图 8 唱 16 三 维 物 体 的 八 叉 树 表 示 在 八 叉 树 表 示 中, 各 节 点 之 间 的 排 序 的 关 系 是 简 单 且 固 定 的, 使 得 计 算 比 较 容 易 采 用 八 叉 树 表 示 的 实 体, 通 常 是 不 能 精 确 地 表 示 一 个 实 体 的, 并 且 对 八 叉 树 表 示 的 实 体 做 任 意 的 几 何 变 换 也 比 较 困 难 采 用 八 叉 树 表 示 的 最 大 缺 点 是 所 需 要 的 存 储 容 量 较 大 四 面 体 网 格 模 型 四 面 体 网 格 模 型 是 将 包 含 实 体 的 空 间 分 割 成 四 面 体 单 元 的 集 合, 与 六 面 体 网 格 模 型 相 比, 四 面 体 网 格 模 型 可 以 以 边 界 面 片 为 四 面 体 的 一 个 面, 模 型 精 度 高, 能 够 构 建 复 杂 形 体 的 网 格 模 型, 在 复 杂 对 象 的 科 学 计 算 和 工 程 分 析 中 具 有 重 要 的 应 用 但 四 面 体 网 格 模 型 数 据 结 构 复 杂, 实 现 复 杂 空 间 域 边 界 一 致 的 四 面 体 剖 分 是 近 年 来 的 研 究 热 点, 相 关 理 论 和 算 法 正 日 渐 成 熟 如 图 8 唱 17 和 图 8 唱 18 是 四 面 体 网 格 剖 分 的 实 例 图 8 唱 17 零 件 的 表 面 网 格 图 图 8 唱 18 零 件 的 实 体 网 格 消 隐 图

237 计 算 机 图 形 学 8.5 几 何 建 模 方 法 的 应 用 与 发 展 224 不 同 的 几 何 建 模 方 法 可 以 满 足 不 同 的 应 用 需 求, 对 计 算 机 软 硬 件 的 要 求 也 不 同 在 计 算 机 图 形 学 发 展 的 早 期, 计 算 机 软 硬 件 加 速 性 能 有 限, 只 能 采 用 线 框 模 型 表 达 不 太 复 杂 的 对 象, 计 算 机 图 形 学 的 应 用 也 处 于 初 级 阶 段 随 着 计 算 机 软 硬 件 的 快 速 发 展, 计 算 机 的 运 算 速 度 内 存 容 量 以 及 图 形 运 算 的 软 硬 件 加 速, 为 复 杂 对 象 的 计 算 机 表 达 创 造 了 条 件, 即 使 如 此, 目 前 计 算 机 软 硬 件 条 件 要 实 现 三 维 实 体 的 真 实 感 实 时 动 态 显 示 仍 有 一 定 的 困 难, 所 以 在 计 算 机 图 形 学 的 应 用 过 程 中 要 根 据 实 际 需 求 采 用 合 适 的 几 何 模 型, 如 复 杂 物 体 动 态 真 实 感 显 示 有 困 难, 可 在 旋 转 平 移 或 缩 放 过 程 中 显 示 线 框 模 型, 选 定 参 数 后 可 用 静 态 的 真 实 感 图 片 表 示 设 计 结 果 目 前 常 用 的 CAD 软 件 一 般 都 包 含 线 框 模 型 面 模 型 体 模 型, 根 据 需 要, 可 灵 活 使 用 近 年 来, 参 数 化 设 计 与 基 于 特 征 的 造 型 方 法 不 断 发 展, 并 在 UG ProE 等 大 型 CAD 软 件 中 得 到 实 用 此 外, 基 于 体 元 的 体 绘 制 方 法 是 计 算 机 图 形 学 最 新 的 发 展 分 支, 在 CT 核 磁 共 振 等 规 则 数 据 的 处 理 中 获 得 了 应 用 体 绘 制 的 方 法 简 化 了 物 体 的 建 模 过 程, 它 的 出 现 大 大 丰 富 了 传 统 计 算 机 图 形 学 的 研 究 内 容, 未 来 会 在 更 多 的 领 域 获 得 应 用 习 题 8.1 试 比 较 线 框 模 型 和 实 体 模 型 的 优 缺 点 8.2 叙 述 自 然 对 象 和 人 造 对 象 在 计 算 机 中 表 达 的 难 易 程 度 8.3 给 出 在 翼 边 结 构 中 遍 历 环 中 所 有 边 的 算 法 8.4 结 合 应 用 专 业 方 向, 叙 述 实 际 应 用 中 对 三 维 建 模 的 要 求 8.5 思 考 如 何 利 用 OpenGL 的 颜 色 缓 冲 深 度 缓 冲 模 板 实 现 两 个 几 何 体 的 交 并 与 差 的 结 果 显 示 8.6 设 计 一 个 利 用 OpenGL 交 互 式 地 生 成 球 长 方 体 等 简 单 集 合 体 的 程 序, 通 过 定 义 简 单 几 何 体 之 间 交 并 与 差 的 关 系, 将 其 集 合 运 算 结 果 用 8.5 中 的 方 式 显 示 出 来, 实 现 一 个 简 单 的 CSG 树 三 维 建 模 软 件 8.7 设 计 一 个 利 用 OpenGL 交 互 式 地 在 空 间 面 上 生 成 曲 线, 实 现 用 平 移 旋 转 等 扫 描 转 换 方 法 生 成 曲 面 的 功 能 8.8 设 计 一 个 多 面 体 边 界 表 示 法 的 数 据 结 构, 实 现 一 个 交 互 式 地 在 长 方 体 表 面 增 加 方 孔 的 程 序

238 第 9 章 计 算 机 图 形 学 相 关 的 研 究 领 域 图 是 工 程 师 的 语 言 计 算 机 图 形 学 自 诞 生 后 在 众 多 领 域 得 到 了 应 用, 尤 其 是 随 着 计 算 机 软 硬 件 技 术 的 快 速 发 展, 计 算 机 图 形 学 的 应 用 范 围 不 断 拓 宽, 应 用 水 平 不 断 提 高 计 算 机 图 形 学 在 应 用 过 程 中 与 专 业 知 识 相 结 合, 衍 生 出 很 多 新 的 学 科, 如 计 算 机 动 画 CAD /CAE /CAPP /CAM /CIMS 仿 真 可 视 化 虚 拟 现 实 以 及 逆 向 工 程 等, 这 些 基 于 计 算 机 图 形 学 的 应 用 学 科 在 现 代 社 会 中 发 挥 着 重 要 作 用, 很 多 学 科 还 在 快 速 发 展 之 中 本 章 介 绍 其 中 部 分 学 科 概 述 9.1 计 算 机 辅 助 设 计 与 制 造 计 算 机 辅 助 设 计 ( computer aided design, CAD) 和 计 算 机 辅 助 制 造 ( computer aided manufacturing,cam), 是 指 以 计 算 机 为 主 要 技 术 手 段 来 生 成 和 运 用 各 种 数 字 信 息 与 图 形 信 息, 以 进 行 产 品 设 计 和 制 造 计 算 机 辅 助 设 计 包 括 的 内 容 很 多, 如 概 念 设 计 优 化 设 计 有 限 元 分 析 计 算 机 仿 真 计 算 机 辅 助 绘 图 和 计 算 机 辅 助 设 计 过 程 管 理 等 计 算 机 辅 助 制 造 (CAM) 是 指 计 算 机 在 产 品 制 造 方 面 有 关 应 用 的 总 称 CAM 有 广 义 和 狭 义 之 分, 广 义 CAM 一 般 是 指 计 算 机 辅 助 进 行 的 从 毛 坯 到 产 品 制 造 过 程 中 的 间 接 和 直 接 的 所 有 活 动, 包 括 工 艺 准 备 生 产 作 业 计 划 和 物 料 作 业 计 划 的 运 行 控 制 生 产 控 制 及 质 量 控 制 等 狭 义 CAM 通 常 仅 指 数 控 程 序 的 编 制 数 控 编 程 是 对 所 有 采 用 数 控 的 设 备, 如 数 控 机 床 数 控 检 测 仪 器 和 数 控 机 器 人 等 进 行 程 序 设 计, 包 括 刀 具 路 径 的 规 划 刀 位 文 件 的 生 成 刀 具 轨 迹 仿 真 以 及 数 控 代 码 ( 又 称 NC 代 码 ) 的 生 成 等 一 般 来 说, 狭 义 的 概 念 采 用 得 比 较 广 泛 CAD /CAM 最 早 源 于 航 空 工 业 和 汽 车 工 业,20 世 纪 80 年 代 伴 随 计 算 机 软 硬 件 技 术 水 平 的 提 高,CAD /CAM 快 速 发 展 进 入 20 世 纪 90 年 代, 由 于 数 据 库 和 网 络 技 术 的 发 展, CAD /CAM 已 发 展 成 为 集 市 场 信 息 设 计 加 工 原 材 料 质 量 保 证 和 销 售 服 务 于 一 体 的 计 算 机 集 成 制 造 系 统 (computer integrated manufacture system,cims)

239 计 算 机 图 形 学 226 在 工 业 化 国 家 如 美 国 日 本 和 欧 洲,CAD /CAM 已 广 泛 应 用 于 设 计 与 制 造 的 各 个 领 域, 如 飞 机 航 空 航 天 汽 车 船 舶 建 筑 和 集 成 电 路 中, 很 多 产 品 实 现 了 100% 的 计 算 机 绘 图 CAD 系 统 的 销 售 额 每 年 以 30% ~40% 的 速 度 递 增, 各 种 CAD /CAM 软 件 的 功 能 越 来 越 完 善, 越 来 越 强 大 国 内 于 20 世 纪 70 年 代 末 开 始 CAD /CAM 技 术 的 大 力 推 广 应 用 工 作, 并 且 已 经 取 得 了 可 喜 的 成 绩 CAD /CAM 技 术 在 我 国 的 应 用 方 兴 未 艾 CAD /CAM 系 统 的 组 成 与 功 能 CAD /CAM 系 统 由 硬 件 和 软 件 两 部 分 组 成 硬 件 由 计 算 机 及 其 外 围 设 备 和 网 络 组 成 计 算 机 分 为 大 型 机 中 / 小 型 机 工 作 站 和 微 机 四 大 类 目 前 应 用 较 多 的 是 CAD 工 作 站, 国 内 主 要 是 微 机 和 工 作 站 外 围 设 备 包 括 鼠 标 键 盘 扫 描 仪 显 示 器 打 印 机 绘 图 仪 拷 贝 机 和 数 控 加 工 中 心 等 设 备 网 络 可 以 实 现 资 源 共 享, 先 进 的 CAD /CAM 系 统 都 是 以 网 络 的 形 式 出 现 的, 特 别 是 在 并 行 工 程 环 境 中, 为 了 进 行 产 品 的 并 行 设 计, 网 络 更 是 必 不 可 少 的 CAD /CAM 系 统 的 软 件 分 为 两 大 类 : 支 撑 软 件 和 应 用 软 件 支 撑 软 件 包 括 操 作 系 统 程 序 设 计 语 言 及 其 编 辑 系 统 数 据 库 管 理 系 统 ( 对 数 据 的 输 入 输 出 分 类 存 储 检 索 进 行 管 理 ) 和 图 形 支 撑 软 件 应 用 软 件 是 指 用 户 针 对 本 领 域 任 务 设 计 的 程 序 包, 包 括 图 形 处 理 几 何 造 型 有 限 元 分 析 优 化 设 计 动 态 仿 真 数 控 加 工 检 测 与 质 量 控 制 等 软 件 CAD /CAM 系 统 应 具 备 几 何 造 型 物 性 计 算 有 限 元 分 析 优 化 设 计 图 形 显 示 与 处 理 运 动 分 析 与 仿 真 数 控 加 工 和 信 息 管 理 等 功 能 CAD /CAM 技 术 的 研 究 热 点 1. 参 数 化 设 计 用 CAD 方 法 开 发 产 品 时, 建 模 速 度 是 决 定 整 个 产 品 开 发 效 率 的 关 键 产 品 开 发 初 期, 零 件 形 状 和 尺 寸 有 一 定 模 糊 性, 要 在 装 配 验 证 性 能 分 析 和 数 控 编 程 之 后 才 能 确 定 这 就 希 望 零 件 模 型 具 有 易 于 修 改 的 柔 性 参 数 化 设 计 方 法 就 是 将 模 型 中 的 定 量 信 息 变 量 化, 使 之 成 为 可 以 调 整 的 参 数 对 于 变 量 化 参 数 赋 予 不 同 数 值, 就 可 得 到 不 同 大 小 和 形 状 的 零 件 模 型 在 CAD 中 要 实 现 参 数 化 设 计, 参 数 化 模 型 的 建 立 是 关 键 参 数 化 模 型 表 示 了 零 件 图 形 的 几 何 约 束 和 工 程 约 束 几 何 约 束 包 括 结 构 约 束 和 尺 寸 约 束 结 构 约 束 是 指 几 何 元 素 之 间 的 拓 扑 约 束 关 系, 如 平 行 垂 直 相 切 对 称 等 ; 尺 寸 约 束 则 是 通 过 尺 寸 标 注 表 示 的 约 束, 如 距 离 尺 寸 角 度 尺 寸 半 径 尺 寸 等 工 程 约 束 是 指 尺 寸 之 间 的 约 束 关 系, 通 过 定 义 尺 寸 变 量 及 它 们 之 间 在 数 值 上 和 逻 辑 上 的 关 系 来 表 示 参 数 化 设 计 可 以 大 大 提 高 模 型 的 生 成 和 修 改 的 速 度, 在 产 品 的 系 列 设 计 相 似 设 计 及 专 用 CAD 系 统 开 发 方 面 都 具 有 较 大 的 应 用 价 值 目 前, 参 数 化 设 计 中 的 参 数 化 建 模 方 法

240 计 算 机 图 形 学 相 关 的 研 究 领 域 主 要 有 变 量 几 何 法 和 基 于 结 构 生 成 历 程 的 方 法, 前 者 主 要 用 于 平 面 模 型 的 建 立, 而 后 者 更 适 合 于 三 维 实 体 或 曲 面 模 型 2. 智 能 CAD 智 能 CAD 是 指 通 过 运 用 专 家 系 统 人 工 神 经 网 络 等 技 术 使 作 业 过 程 具 有 某 种 程 度 人 工 智 能 的 CAD 系 统 专 家 系 统 是 能 在 某 个 特 定 领 域 内, 用 人 类 专 家 的 知 识 经 验 和 能 力 去 解 决 该 领 域 中 复 杂 困 难 问 题 的 计 算 机 程 序 系 统 专 家 系 统 在 CAD 作 业 中 适 时 给 出 智 能 化 提 示, 告 诉 设 计 人 员 下 一 步 该 做 什 么, 当 前 设 计 存 在 的 问 题, 建 议 解 决 问 题 的 几 何 途 径 ; 或 模 拟 人 的 智 慧, 根 据 出 现 的 问 题 提 出 合 理 的 解 决 方 案 专 家 系 统 是 基 于 知 识 的 系 统, 知 识 工 程 是 专 家 系 统 技 术 的 基 础 专 家 系 统 通 常 由 知 识 库 推 理 机 知 识 获 取 系 统 解 释 机 构 和 一 些 界 面 组 成 人 工 神 经 网 络 在 工 程 设 计 中 的 应 用 正 在 不 断 地 发 展, 基 于 神 经 网 络 的 专 家 系 统 在 知 识 获 取 并 行 推 理 适 应 性 学 习 联 想 推 理 以 及 容 错 能 力 方 面 明 显 优 于 传 统 的 专 家 系 统 3. 基 于 特 征 的 设 计 特 征 设 计 是 用 易 于 识 别 的 包 含 加 工 信 息 的 几 何 单 元, 如 孔 槽 倒 角 等, 来 取 代 以 往 设 计 中 所 用 的 纯 几 何 描 述, 如 直 线 圆 弧 等 特 征 是 构 造 零 件 的 最 基 本 的 单 元 要 素, 它 既 反 映 零 件 的 几 何 信 息, 又 反 映 零 件 的 加 工 工 艺 特 征 信 息 对 基 于 特 征 的 设 计 系 统, 孔 是 一 个 特 征, 具 有 直 径 长 度 公 差 表 面 粗 糙 度 和 位 置 等 属 性, 并 包 括 它 在 装 配 图 中 的 情 况 每 一 个 特 征 基 本 上 对 应 一 组 加 工 制 造 方 法 特 征 的 语 义, 使 设 计 人 员 和 工 艺 人 员 对 同 一 特 征 有 相 同 的 理 解, 并 且 特 征 定 义 显 式 地 包 含 了 所 有 几 何 和 非 几 何 信 息 因 此, 基 于 特 征 的 设 计 更 适 合 于 CAD /CAM 的 集 成 和 CIMS 中 的 建 模 需 要 4. 相 关 性 设 计 相 关 性 设 计 为 设 计 工 作 提 供 了 极 大 的 方 便 用 户 无 论 是 在 什 么 地 方 进 行 修 改, 系 统 会 自 动 地 更 新 与 修 改 有 关 的 内 容 例 如, 当 用 户 在 左 视 图 上 对 某 个 尺 寸 进 行 修 改, 主 视 图 俯 视 图 和 三 维 模 型 中 相 应 的 尺 寸 和 形 状 会 随 之 改 变 反 之, 在 三 维 模 型 设 计 中 的 修 改, 同 样 会 在 三 视 图 中 得 到 改 变 5.NURBS 几 何 构 型 技 术 采 用 非 均 匀 有 理 B 样 条 ( NURBS) 技 术 可 以 使 系 统 在 描 述 自 由 曲 线 曲 面 以 及 精 确 的 二 次 曲 线 曲 面 时, 能 够 采 用 统 一 的 算 法 和 表 示 方 法 用 NURBS 技 术 构 造 的 曲 面 易 于 生 成 修 改 和 存 储, 为 系 统 提 高 对 曲 面 的 构 造 能 力 和 编 辑 修 改 能 力 打 下 了 基 础 6. 装 配 设 计 和 管 理 装 配 设 计 是 指 系 统 能 够 同 时 完 成 产 品 或 装 配 部 件 的 设 计, 而 不 是 个 别 零 件 的 设 计 第 9 章 227

241 计 算 机 图 形 学 228 由 于 涉 及 到 许 多 零 件 的 装 配 关 系, 装 配 设 计 需 要 考 虑 的 因 素 复 杂, 具 有 装 配 设 计 功 能 的 系 统 需 要 采 用 的 技 术 和 手 段 也 较 多, 如 前 面 提 及 的 特 征 设 计 参 数 化 设 计 相 关 性 设 计 等 对 于 具 有 装 配 设 计 功 能 的 系 统 还 应 能 够 提 供 有 关 装 配 方 面 的 管 理 能 力, 如 装 配 零 件 逻 辑 关 系 装 配 件 干 涉 检 查 生 成 装 配 材 料 明 细 表 零 件 装 配 关 系 展 开 图 测 算 装 配 件 的 运 动 学 及 动 力 学 特 性 等 7.CAD /CAM 系 统 的 网 络 化 与 集 成 化 网 络 技 术 是 计 算 机 技 术 和 通 信 技 术 相 互 渗 透 密 切 结 合 的 产 物, 在 计 算 机 应 用 和 信 息 传 输 中 起 着 越 来 越 重 要 的 作 用 通 过 网 络 可 以 实 现 资 源 共 享 和 协 调 合 作, 发 挥 更 大 的 效 能 CAD /CAM 系 统 中 所 需 的 所 有 公 共 信 息, 如 图 形 数 据 零 件 及 编 码 等 可 存 储 在 服 务 器 的 公 共 数 据 库 中, 而 各 工 作 站 可 以 通 过 网 络 共 享 其 中 的 数 据, 进 行 各 自 的 设 计 工 作 工 作 站 之 间 也 可 以 通 过 网 络 交 换 相 互 所 需 的 中 间 和 最 后 处 理 结 果 基 于 数 据 库 网 络 技 术, 企 业 可 将 CAD /CAM 系 统 与 市 场 信 息 原 材 料 产 品 数 据 管 理 及 市 场 销 售 等 管 理 信 息 系 统 集 成 在 一 起 形 成 CIMS 系 统, 共 享 信 息 和 资 源, 达 到 经 济 上 最 合 理 技 术 上 最 先 进 的 最 优 化 方 案 8. 面 向 对 象 的 设 计 方 法 面 向 对 象 方 法 是 分 析 问 题 和 解 决 问 题 的 新 方 法 其 基 本 出 发 点 就 是 尽 可 能 按 照 人 类 认 识 世 界 的 方 法 和 思 维 方 式 来 分 析 和 解 决 问 题 在 CAD /CAM 系 统 中, 所 定 义 的 对 象 可 以 是 用 来 描 述 几 何 模 型, 如 点 线 圆 平 面 折 线 曲 线 曲 面 和 体 素 等, 也 可 以 是 用 来 描 述 加 工 过 程 的 零 件 模 型 加 工 特 征 刀 具 类 型 和 刀 位 指 令 等 应 用 实 例 图 9 唱 1 和 图 9 唱 2 是 桥 梁 和 汽 车 的 计 算 机 辅 助 设 计 的 效 果 图 图 9 唱 1 杭 州 湾 大 桥 海 中 平 台

242 计 算 机 图 形 学 相 关 的 研 究 领 域 第 9 章 229 图 9 唱 2 汽 车 设 计 模 型 9.2 计 算 机 动 画 概 述 动 画 是 运 动 中 的 艺 术, 是 一 系 列 图 形 图 像 的 顺 序 显 示 所 产 生 的 视 觉 效 果 计 算 机 动 画 是 指 用 绘 制 程 序 生 成 一 系 列 的 景 物 画 面, 通 过 足 够 快 的 速 度 显 示 一 系 列 的 单 个 帧 以 产 生 活 动 的 感 觉 一 般 来 说, 动 画 播 放 速 度 要 在 15 帧 /s 以 上, 电 影 业 的 标 准 是 24 帧 /s, 欧 洲 PAL 制 式 视 频 标 准 是 25 帧 /s, 而 美 国 的 NTSC 制 式 是 30 帧 /s 计 算 机 动 画 技 术 最 初 是 应 影 视 业 发 展 的 要 求 而 产 生 的 在 计 算 机 动 画 产 生 之 前, 法 国 人 Emile Cohl 于 1908 年 开 创 了 电 影 动 画 卡 通 (cartoon) 1928 年 Walt Disney 电 影 制 片 厂 开 始 制 作 动 画 片, 塑 造 了 米 老 鼠 唐 老 鸭 等 家 喻 户 晓 的 卡 通 形 象 卡 通 动 画 制 作 的 过 程 是 : 设 计 故 事 情 节, 写 出 文 学 剧 本 和 画 面 剧 本, 进 行 任 务 造 型 和 景 物 创 作, 规 划 设 计 对 白 与 音 响, 设 计 关 键 帧, 画 出 中 间 帧, 手 稿 图 动 作 测 试, 描 线 和 上 色, 检 查 和 拍 摄 以 及 后 期 制 作 等 动 画 每 秒 要 播 放 24 张 一 部 10min 的 美 术 电 影, 要 画 数 以 千 万 张 原 画, 而 且 每 幅 要 反 复 3~5 次 工 序 才 能 完 成 然 后 描 线 上 色 检 查 摄 制, 约 需 要 4 个 月 的 时 间, 如 果 是 精 品, 需 要 1 年 的 时 间 才 能 完 成 动 画 制 作 工 艺 繁 多, 劳 动 强 度 大, 制 作 周 期 长 计 算 机 动 画 是 计 算 机 和 艺 术 的 结 合 它 综 合 运 用 计 算 机 图 形 学 物 理 学 机 械 学 心 理 学 美 学 生 命 科 学 及 人 工 智 能 等 学 科 或 领 域 的 知 识 来 研 究 客 观 存 在 或 高 度 抽 象 的 物 体 的 运 动 表 现 形 式 随 着 计 算 机 图 形 学 和 硬 件 技 术 的 快 速 发 展, 人 们 已 经 可 以 用 计 算 机 生 成 高 质 量 的 图 像, 计 算 机 动 画 不 再 是 陌 生 的 名 词 它 已 渗 透 到 人 们 生 活 的 各 个 角 落 在 枟 侏 罗 纪 公 园 枠 和 枟 终 结 者 枠 等 优 秀 电 影 中, 人 们 可 充 分 体 会 到 计 算 机 动 画 技 术 的 魅 力 计 算 机 动 画 不 仅 可 应 用 于 商 业 广 告 电 视 片 头 影 视 特 技 动 画 片 和 游 艺 场 所, 还 可 用 于 教 育 军 事 飞 行 模 拟 和 科 研

243 计 算 机 图 形 学 230 计 算 机 动 画 可 分 为 计 算 机 辅 助 动 画 和 计 算 机 生 成 动 画, 也 就 是 通 常 说 的 二 维 动 画 和 三 维 动 画 1963 年 Bell 实 验 室 的 Edward E.Zajac 制 作 了 一 个 有 关 地 球 卫 星 在 太 空 运 行 的 线 框 图 形 的 动 画, 被 认 为 是 第 一 部 数 字 计 算 机 动 画 作 品 计 算 机 三 维 彩 色 逼 真 动 画 是 从 20 世 纪 70 年 代 中 期 开 始 的, 并 首 先 用 于 军 事, 如 飞 行 模 拟 Evans Sutherland 的 飞 行 模 拟 器 有 助 于 训 练 飞 机 驾 驶 员, 使 他 们 不 用 离 开 地 面 就 能 进 行 起 飞 和 着 陆 的 练 习, 其 中 显 示 屏 上 的 跑 道 地 平 线 建 筑 物 以 及 空 中 其 他 飞 过 的 飞 机 形 象 都 是 由 计 算 机 动 画 实 现 的 从 这 个 时 候 开 始, 制 作 计 算 机 动 画 的 公 司 纷 纷 出 现, 大 量 的 电 视 节 目 片 头 和 电 视 广 告 采 用 这 个 新 技 术 好 莱 坞 制 作 的 枟 星 球 大 战 枠, 迪 斯 尼 制 作 的 枟 TRON 枠 中 使 用 了 由 计 算 机 生 成 的 动 画 画 面, 代 替 了 实 际 模 型 制 作 和 拍 摄 反 映 当 代 计 算 机 动 画 最 高 水 平 的 代 表 作 是 枟 终 结 者 Ⅱ 枠 和 枟 侏 罗 纪 公 园 枠, 超 现 实 而 又 十 分 逼 真 的 视 觉 形 象 使 人 们 获 得 梦 幻 般 的 极 大 享 受, 创 造 了 较 高 的 票 房 收 入 枟 侏 罗 纪 公 园 枠 将 1 亿 4000 万 年 前 的 恐 龙 和 现 代 人 的 生 活 情 景 糅 合 在 一 起, 电 影 中 最 激 动 人 心 的 6min 动 画 使 用 了 75 台 SGI 工 作 站, 利 用 Alias 软 件 建 立 恐 龙 线 框 模 型, 利 用 Softimage 软 件 将 恐 龙 的 线 框 模 型 以 适 当 的 姿 势 和 动 作 运 动 起 来, 再 用 Colorbrust 和 RenderMan 为 恐 龙 的 线 框 模 型 蒙 皮 上 色 打 灯 光 生 成 阴 影, 并 插 入 影 片 的 实 拍 镜 头 之 中 计 算 机 动 画 可 创 造 出 五 彩 缤 纷 的 三 维 世 界, 色 光 影 纹 理 质 感 都 十 分 逼 真, 可 以 产 生 不 同 材 料 的 质 感 或 特 殊 的 表 面 效 果, 如 金 属 木 纹 大 理 石 以 及 透 明 的 质 感 在 加 速 匀 速 减 速 方 面 可 以 计 算 得 很 准 确, 超 过 手 工 动 画 丰 富 创 作 手 段, 突 出 反 映 主 题 计 算 机 动 画 所 生 成 的 是 一 个 虚 拟 的 世 界, 画 面 中 的 物 体 并 不 需 真 正 去 建 造, 物 体 虚 拟 摄 像 机 的 运 动 也 不 会 受 到 什 么 限 制, 动 画 师 几 乎 可 以 随 心 所 欲 地 编 织 他 的 虚 幻 世 界 枟 狮 子 王 枠 枟 玩 具 总 动 员 枠 是 优 秀 的 计 算 机 动 画 影 片, 其 中 枟 玩 具 总 动 员 枠 是 纯 三 维 动 画 影 片 将 三 维 动 画 与 实 景 合 成 是 最 新 的 三 维 动 画 特 技 枟 终 结 者 枠 枟 侏 罗 纪 公 园 枠 枟 真 实 的 谎 言 枠 枟 龙 卷 风 枠 枟 独 立 日 枠 及 枟 泰 坦 尼 克 枠 等 都 采 用 这 种 技 术, 是 好 莱 坞 近 年 来 卖 座 片 模 式 中 的 经 典 在 国 内,1990 年 第 11 届 亚 运 会 影 视 节 目 的 片 头 是 计 算 机 动 画 1992 年 4 月, 北 京 科 教 电 影 制 片 厂 与 北 方 工 业 大 学 合 作, 摄 制 了 一 部 计 算 机 二 维 三 维 结 合 的 科 普 美 术 品 枟 相 似 枠 ( 长 10min), 是 我 国 第 一 部 计 算 机 动 画 影 片 计 算 机 动 画 已 有 三 十 多 年 的 历 史, 其 中 经 历 了 从 二 维 到 三 维, 从 线 框 图 到 逼 真 感 图 像, 从 逐 帧 动 画 到 实 时 动 画 的 发 展 过 程, 一 年 一 度 的 SIGGRAPH 每 年 展 出 很 多 计 算 机 动 画 作 品 目 前 的 三 维 动 画, 由 于 受 计 算 机 运 算 速 度 图 形 处 理 功 能 以 及 图 形 计 算 方 法 的 限 制, 还 未 实 现 高 度 逼 真 感 高 分 辨 率 的 三 维 实 时 动 画 三 维 动 画 中 的 景 物 造 型 动 作 控 制 与 调 试 还 是 一 件 相 当 麻 烦 的 事 情, 人 体 动 作 模 仿 脸 部 表 情 还 不 太 成 功

244 计 算 机 图 形 学 相 关 的 研 究 领 域 目 前, 计 算 机 动 画 已 进 入 实 用 阶 段, 国 际 上 涌 现 了 许 多 优 秀 的 动 画 软 件 用 于 图 形 工 作 站 上 成 熟 的 商 品 化 动 画 软 件 主 要 有 美 国 的 WaveFront 加 拿 大 的 SoftImage 和 Alias 法 国 的 Tdi 等 ; 用 于 微 机 上 的 有 3DStudio 一 些 动 画 领 域 新 的 研 究 成 果 得 到 了 迅 速 的 应 用, 如 粒 子 系 统 群 体 运 动 FFD 变 形 技 术 动 力 学 模 型 关 节 运 动 及 二 维 morphing 技 术 等 都 可 从 这 些 优 秀 软 件 中 见 到 这 些 动 画 软 件 由 于 各 自 的 特 色 和 优 势, 都 拥 有 广 阔 的 市 场, 并 都 在 不 断 推 陈 出 新, 逐 步 完 善 和 改 进 分 类 计 算 机 动 画 的 分 类 方 法 很 多, 按 不 同 的 动 画 生 成 技 术 可 以 将 计 算 机 动 画 分 为 : 关 键 帧 动 画 变 形 物 体 的 动 画 过 程 动 画 关 节 动 画 和 人 体 动 画, 以 及 基 于 物 理 的 动 画 等 1. 关 键 帧 动 画 关 键 帧 的 概 念 源 于 传 统 的 卡 通 动 画 在 早 期 的 卡 通 动 画 的 制 作 步 骤 中, 熟 练 的 动 画 设 计 师 设 计 卡 通 片 的 关 键 画 面, 即 关 键 帧 然 后 由 一 般 的 动 画 设 计 师 设 计 中 间 帧 对 于 计 算 机 动 画, 中 间 帧 是 由 计 算 机 通 过 插 值 计 算 的 方 法 来 完 成 的 2. 变 形 物 体 的 动 画 变 形 动 画 把 一 种 形 状 或 物 体 变 成 另 一 种 不 同 的 形 状 或 物 体, 而 中 间 过 程 则 通 过 形 状 或 物 体 的 起 始 状 态 和 结 束 状 态 进 行 插 值 计 算 电 影 枟 终 结 者 枠 中 机 械 杀 手 T 唱 1000 由 液 体 变 为 金 属 人, 由 金 属 人 变 为 影 片 中 的 其 他 角 色 大 部 分 变 形 方 法 与 物 体 的 表 示 有 密 切 的 关 系, 如 通 过 移 动 物 体 的 顶 点 或 控 制 顶 点 来 对 物 体 进 行 变 形 为 了 使 变 形 方 法 能 很 好 地 结 合 到 造 型 和 动 画 系 统 中, 近 10 年 来, 人 们 提 出 了 许 多 与 物 体 表 示 无 关 的 变 形 方 法 对 于 多 边 形 表 示 的 物 体, 物 体 的 变 形 可 通 过 移 动 其 多 边 形 顶 点 来 达 到 但 是, 多 边 形 的 顶 点 以 某 种 内 在 的 连 接 关 系 相 关 联, 不 恰 当 地 移 动 很 容 易 导 致 三 维 走 样 问 题, 比 如 原 来 共 面 的 多 边 形 变 成 了 不 共 面 的 参 数 曲 面 表 示 的 物 体 可 较 好 地 克 服 上 述 问 题 移 动 控 制 顶 点 仅 仅 改 变 了 基 函 数 的 系 数, 曲 面 仍 然 是 光 滑 的, 所 以 参 数 曲 面 表 示 的 物 体 可 处 理 任 意 复 杂 的 变 形 多 边 形 和 参 数 曲 面 表 示 各 有 其 优 缺 点 3. 过 程 动 画 过 程 动 画 指 的 是 用 一 个 过 程 去 控 制 物 体 的 动 画 过 程 动 画 经 常 牵 涉 到 物 体 的 变 形, 但 与 前 面 所 讨 论 的 柔 性 物 体 的 动 画 不 一 样 在 柔 性 物 体 的 动 画 中, 物 体 的 变 形 是 任 意 的, 可 由 动 画 师 任 意 控 制 的 ; 在 过 程 动 画 中, 物 体 的 变 形 则 基 于 一 定 的 数 学 模 型 或 物 理 规 律 Reeves 的 粒 子 系 统 是 过 程 动 画 的 较 早 工 作, 粒 子 系 统 已 经 成 功 地 模 拟 了 电 影 枟 Star Trek: The Wrath of Khan 枠 中 的 一 系 列 特 技 镜 头 如 草 叶 随 风 的 飘 动 粒 子 系 统 还 可 用 来 模 拟 由 风 引 起 的 泡 沫 和 溅 水 的 动 画 Reed 等 人 用 粒 子 系 统 成 功 地 模 拟 了 闪 电 在 生 物 界, 许 多 动 物, 如 鸟 鱼 等 以 某 种 群 体 的 方 式 运 动 这 种 运 动 既 有 随 机 性, 又 有 一 定 的 规 律 性 最 近, 布 料 动 画 成 了 人 们 感 兴 趣 的 研 究 课 题 布 料 动 画 的 一 个 特 殊 应 用 领 域 为 时 装 设 计, 第 9 章 231

245 计 算 机 图 形 学 232 近 几 年, 研 究 者 们 更 多 地 用 基 于 物 理 的 方 法 去 模 拟 基 于 弹 性 理 论,Terzopoulos 等 人 提 出 了 一 种 控 制 变 形 曲 面 运 动 的 方 法, 并 用 来 模 拟 旗 帜 的 飘 动 和 地 毯 的 坠 落 过 程 4. 关 节 动 画 和 人 体 动 画 关 节 动 画 能 够 模 拟 运 动 的 传 递 关 系, 解 决 一 般 机 械 传 动 系 统 运 动 的 演 示 问 题 基 于 人 体 的 动 画 是 最 复 杂 的 动 画, 人 体 具 有 200 个 以 上 的 自 由 度 和 非 常 复 杂 的 运 动, 人 的 形 状 不 规 则, 人 的 肌 肉 随 着 人 体 的 运 动 而 变 形, 人 体 的 运 动 不 是 简 单 的 刚 体 运 动, 人 的 个 性 表 情 等 千 变 万 化, 受 生 理 和 心 理 等 多 方 面 因 素 的 影 响 可 以 说, 人 体 动 画 是 计 算 机 动 画 中 最 富 挑 战 性 的 课 题 之 一 正 向 或 逆 向 运 动 学 是 设 置 关 节 动 画 的 有 效 方 法 通 过 对 关 节 旋 转 角 设 置 关 键 帧, 得 到 关 联 各 个 肢 体 的 位 置, 这 种 方 法 一 般 称 为 正 向 运 动 学 方 法 对 于 一 个 具 有 多 年 经 验 的 专 家 级 动 画 师, 能 够 用 正 向 运 动 学 方 法 生 成 非 常 逼 真 的 运 动 但 对 于 一 个 普 通 的 动 画 师 来 说, 通 过 设 置 各 个 关 节 的 关 键 帧 来 产 生 逼 真 的 运 动 是 非 常 困 难 的 一 种 实 用 的 解 决 方 法 是 通 过 实 时 输 入 设 备 记 录 真 人 各 关 节 的 空 间 运 动 数 据 由 于 生 成 的 运 动 基 本 上 是 真 人 运 动 的 复 制 品, 因 而 效 果 非 常 逼 真, 且 能 生 成 许 多 复 杂 的 运 动 逆 运 动 学 方 法 在 一 定 程 度 上 减 轻 了 正 运 动 学 方 法 的 繁 琐 工 作, 用 户 指 定 末 端 关 节 的 位 置, 计 算 机 自 动 计 算 出 各 中 间 关 节 的 位 置 把 运 动 学 和 动 力 学 相 结 合 能 够 产 生 更 加 逼 真 的 动 画 与 运 动 学 相 比, 动 力 学 方 法 能 生 成 更 复 杂 和 逼 真 的 运 动, 并 且 需 指 定 的 参 数 相 对 较 少 但 动 力 学 方 法 的 计 算 量 相 当 大, 且 很 难 控 制 动 力 学 方 法 中 另 一 重 要 问 题 是 运 动 的 控 制, 在 动 作 设 计 中, 用 动 作 传 感 器 将 演 示 的 每 个 动 作 姿 势 通 过 传 感 器 传 送 到 计 算 机 上 的 图 像 中, 来 实 现 理 想 的 动 作 姿 势, 也 可 以 用 关 键 帧 方 法 或 任 务 骨 骼 造 型 动 画 法 来 实 现 一 连 串 的 动 作 在 脸 部 表 情 的 动 画 模 拟 方 面, 较 早 的 方 法 有 用 数 字 化 仪 将 人 脸 的 各 种 表 情 输 入 到 计 算 机 中, 然 后 用 这 些 表 情 的 线 性 组 合 来 产 生 新 的 脸 部 表 情 该 方 法 的 缺 点 是 缺 乏 灵 活 性, 不 能 模 拟 表 情 的 细 微 变 化, 并 且 与 表 情 库 有 很 大 关 系 1987 年,Waters 提 出 了 一 个 脸 部 表 情 动 画 模 拟 方 法 该 方 法 由 一 个 参 数 肌 肉 模 型 组 成, 人 的 脸 用 多 边 形 网 格 来 表 示, 并 用 肌 肉 向 量 来 控 制 人 脸 的 变 形 5. 基 于 物 理 模 型 的 动 画 技 术 基 于 物 理 的 动 画 称 为 运 动 动 画, 其 运 动 对 象 要 符 合 物 理 规 律 基 于 物 理 的 动 画 一 般 采 用 实 时 动 画 绘 制 技 术, 即 当 前 显 示 的 画 面 是 实 时 计 算 并 绘 制 的 一 般 运 动 动 画 ( 即 刚 体 运 动 动 画 ) 要 符 合 运 动 学 和 动 力 学 规 律, 并 满 足 几 何 约 束 运 动 约 束 和 力 约 束 等 条 件 运 动 动 画 的 一 个 重 要 部 分 是 碰 撞 检 测, 目 前 已 有 很 多 碰 撞 检 测 方 法, 如 半 径 法 包 围 盒 法 和 标 准 平 面 方 程 法 等 基 于 物 理 模 型 的 动 画 技 术 是 20 世 纪 80 年 代 后 期 发 展 起 来 的 一 种 新 技 术 尽 管 该 技 术 比 传 统 动 画 技 术 的 计 算 复 杂 度 要 高 得 多, 但 它 能 逼 真 地 模 拟 各 种 自 然 物 理 现 象, 这 是 基

246 计 算 机 图 形 学 相 关 的 研 究 领 域 于 几 何 的 传 统 动 画 生 成 技 术 所 无 法 比 拟 的 基 于 物 理 模 型 的 动 画 技 术 考 虑 了 物 体 在 真 实 世 界 中 的 属 性, 如 质 量 转 动 惯 矩 弹 性 和 摩 擦 力 等, 并 采 用 动 力 学 原 理 来 自 动 产 生 物 体 的 运 动 当 场 景 中 的 物 体 受 到 外 力 作 用 时, 牛 顿 力 学 可 用 来 自 动 生 成 物 体 在 各 个 时 间 点 的 位 置 方 向 及 其 形 状 此 时, 动 画 师 不 必 关 心 物 体 运 动 过 程 的 细 节, 只 需 确 定 物 体 运 动 所 需 的 一 些 物 理 属 性 及 一 些 约 束 关 系, 如 质 量 外 力 等 在 刚 体 运 动 模 拟 方 面, 研 究 重 点 主 要 集 中 在 采 用 牛 顿 动 力 学 的 各 种 方 程 来 模 拟 刚 体 系 统 的 运 动 由 于 在 真 实 的 刚 体 运 动 中 任 意 两 个 刚 体 不 会 相 互 贯 穿, 因 而 在 运 动 过 程 模 拟 时, 必 须 进 行 碰 撞 检 测 和 碰 撞 响 应 在 真 实 物 理 世 界 中, 许 多 物 体 并 非 完 全 是 刚 体, 它 们 在 运 动 过 程 中 会 产 生 一 定 的 形 变 由 于 基 于 几 何 的 变 形 是 人 为 给 定 的, 因 而 变 形 过 程 缺 乏 真 实 性 1986 年,Weil 首 次 将 基 于 物 理 模 型 的 柔 性 物 体 引 入 到 计 算 机 动 画 中 Miller 用 质 点 唱 弹 簧 系 统 模 拟 了 蛇 和 虫 子 这 类 无 腿 动 物 的 蠕 动 动 画 Tu 等 人 提 出 了 一 种 模 拟 鱼 的 行 为 的 动 画 玻 璃 和 陶 瓷 类 物 体 的 破 裂 模 拟 是 动 画 中 的 一 个 复 杂 问 题 Norton 等 人 提 出 了 一 个 基 于 三 维 质 点 表 示 的 破 裂 动 画 模 拟 方 法 由 于 求 解 物 理 模 型 采 用 数 值 计 算, 因 而 计 算 量 非 常 大 双 缓 存 实 现 帧 动 画 实 现 动 画 时 一 般 至 少 需 要 一 个 帧 缓 存 器, 并 在 缓 存 器 中 存 储 和 操 作 像 素 数 据 帧 缓 存 是 由 缓 存 组 成 的 逻 辑 集, 这 些 缓 存 包 括 颜 色 缓 存 深 度 缓 存 累 积 缓 存 和 模 板 缓 存 为 了 实 现 平 滑 动 画 以 及 消 除 画 面 的 闪 烁 感, 可 以 采 用 双 缓 存 技 术 这 种 技 术 的 原 理 是 : 程 序 把 帧 存 看 成 是 两 个 视 频 缓 存, 在 任 意 时 刻, 只 有 两 者 中 的 一 个 内 容 才 能 被 显 示 出 来 当 前 可 见 视 频 缓 存 称 为 前 台 视 频 缓 存, 不 可 见 的 正 在 画 的 视 频 缓 存 称 为 后 台 视 频 缓 存 当 后 台 视 频 缓 存 中 的 内 容 被 要 求 显 示 时, 视 频 交 换 机 制 就 会 将 它 复 制 至 前 台 视 频 缓 存 显 示 硬 件 则 不 断 读 出 视 频 缓 存 中 的 内 容, 并 把 结 果 显 示 在 屏 幕 上 双 缓 存 技 术 可 以 生 成 平 滑 的 动 画, 最 好 把 一 幅 完 全 画 好 的 图 像 显 示 一 定 的 时 间, 然 后 提 供 下 一 幅 画 面, 视 频 图 像 按 此 方 式 交 替 出 现, 从 一 幅 图 像 变 化 到 下 一 幅 图 像, 由 于 时 间 极 短, 人 眼 不 会 感 觉 到 这 种 变 化 通 过 关 键 帧 技 术 设 计 流 畅 的 动 画, 帧 与 帧 之 间 画 面 过 渡 不 要 太 大, 否 则 就 会 引 起 画 面 跳 跃, 出 现 不 连 续 的 现 象 第 9 章 可 视 化 发 展 历 程 9.3 可 视 化 随 着 计 算 机 科 学 与 技 术 的 迅 猛 发 展, 科 学 计 算 与 工 程 分 析 中 处 理 的 数 据 量 越 来 越 大 仅 超 级 计 算 机 在 近 十 年 中 从 十 亿 次 到 千 亿 次 万 亿 次 的 计 算 机 也 已 诞 生, 其 产 生 数 据 的 能

247 计 算 机 图 形 学 234 力 提 高 了 3 个 数 量 级 以 上 地 球 卫 星 宇 宙 飞 船 天 文 望 远 镜 CT 扫 描 仪 及 核 磁 共 振 仪 等 先 进 仪 器 所 产 生 的 数 据 与 日 俱 增 与 产 生 数 据 的 手 段 及 速 度 相 比, 人 类 理 解 数 据 的 手 段 速 度 滞 后 很 多, 大 量 数 据 被 积 压, 许 多 时 效 性 很 强 的 数 据 因 未 得 到 及 时 处 理 而 浪 费, 造 成 很 大 损 失 由 于 数 据 理 解 手 段 的 落 后, 数 据 处 理 过 程 中 很 多 信 息 被 丢 失, 数 据 中 蕴 涵 的 特 性 未 能 被 准 确 充 分 地 显 示 出 来 为 了 解 决 这 一 问 题,1986 年 2 月, 美 国 国 家 科 学 基 金 会 (NSF) 的 高 级 科 学 计 算 部 门 召 开 了 关 于 图 形 图 像 处 理 和 工 作 站 的 讨 论 会, 与 会 成 员 一 致 认 为 : 要 把 先 进 的 图 形 图 像 软 硬 技 术 应 用 于 大 型 科 学 与 工 程 计 算, 将 数 据 转 换 为 图 形 ( 像 ), 利 用 人 类 的 视 觉 功 能 提 高 数 据 处 理 速 度 和 准 确 度 1987 年 2 月, 美 国 国 家 科 学 基 金 会 正 式 组 织 召 开 了 科 学 计 算 可 视 化 ( Visualization in Scientific Computation) 专 题 讨 论 会, 与 会 人 员 包 括 学 术 界 企 业 界 和 政 府 代 表, 年 底 发 表 了 讨 论 会 的 总 结 报 告, 标 志 着 科 学 计 算 可 视 化 作 为 一 门 新 兴 学 科 宣 告 诞 生 B.H.McCormick 等 人 在 报 告 中 认 为 : 科 学 计 算 可 视 化 对 科 学 生 产 力 和 重 大 科 学 突 破 将 产 生 巨 大 影 响, 这 种 影 响 可 与 巨 型 机 的 影 响 相 比 拟 因 此 科 学 计 算 可 视 化 诞 生 后 很 快 成 为 科 学 技 术 研 究 的 有 力 工 具, 在 众 多 领 域 引 起 了 广 泛 的 研 究 视 觉 信 息 是 人 类 最 主 要 的 信 息 来 源 医 学 和 心 理 学 研 究 表 明, 人 类 日 常 生 活 中 接 受 的 信 息 80% 来 自 视 觉, 而 50% 的 脑 神 经 细 胞 与 视 觉 相 连 可 视 化 技 术 的 本 质 是 将 数 据 转 换 为 图 形 或 图 像, 利 用 人 类 视 觉 功 能 提 高 人 类 理 解 数 据 的 能 力 事 实 上, 人 类 很 早 就 开 始 用 图 来 表 达 信 息, 只 是 在 计 算 机 图 形 学 诞 生 之 前 是 人 工 绘 图, 表 达 的 是 外 表 信 息 或 简 单 的 统 计 数 据 计 算 机 发 明 后 首 先 用 于 科 学 计 算 和 工 程 分 析, 计 算 机 图 形 图 像 技 术 是 20 世 纪 年 代 才 发 展 起 来 的 计 算 机 技 术, 早 期 计 算 机 图 形 学 主 要 用 于 形 状 表 达, 随 着 其 应 用 和 研 究 水 平 的 提 高, 计 算 机 图 形 学 可 以 对 物 体 内 部 深 层 次 进 行 表 达, 在 流 场 温 度 场 应 力 场 电 磁 场 声 场 等 不 可 见 数 据 场 的 分 析 与 显 示 方 面 得 到 应 用, 进 入 可 视 不 可 视 (see the unseen) 阶 段, 实 现 了 计 算 机 计 算 和 显 示 功 能 的 结 合, 这 种 功 能 组 合 为 科 学 计 算 可 视 化 技 术 的 诞 生 奠 定 了 基 础 科 学 计 算 可 视 化 (visualization in scientific computation ) 综 合 利 用 计 算 机 图 形 学 图 像 处 理 计 算 机 视 觉 计 算 机 辅 助 设 计 等 多 门 学 科, 将 数 据 转 换 成 图 形 及 图 像 并 进 行 交 互 处 理, 利 用 人 的 视 觉 功 能 提 高 人 的 理 解 数 据 的 能 力 进 入 20 世 纪 90 年 代, 世 界 各 国 投 入 了 大 量 的 人 力 物 力 财 力, 有 计 划 有 组 织 地 开 展 了 可 视 化 技 术 的 研 究 可 视 化 技 术 在 计 算 流 体 力 学 有 限 元 分 析 生 物 医 学 分 子 模 型 构 造 地 学 空 间 科 学 天 体 物 理 及 气 象 预 报 等 众 多 领 域 获 得 了 成 功 应 用, 促 进 了 数 学 物 理 化 学 等 基 础 科 学 的 发 展, 在 生 命 信 息 社 会 信 息 的 研 究 中 亦 发 挥 了 重 要 作 用 由 于 涉 及 领 域 很 宽, 出 现 了 数 据 可 视 化 (data visualization) 信 息 可 视 化 ( information visualization) 等 术 语, 信 息 可 视 化 丰 富 了 可 视 化 的 研 究 内 容, 表 明 可 视 化 技 术 已 从 空 间 数 据 向 非 空 间 数 据 拓 展 现 在 大 多 用 可 视 化 (visualization) 来 涵 盖 这 一 领 域 的 理 论 和 应 用 研 究

248 计 算 机 图 形 学 相 关 的 研 究 领 域 可 视 化 技 术 利 用 人 类 的 视 觉 功 能 提 高 人 类 处 理 数 据 的 能 力, 拓 宽 了 人 类 理 解 数 据 认 识 世 界 的 思 路, 促 进 了 各 种 表 达 手 段 的 发 展 随 着 多 媒 体 技 术 虚 拟 现 实 ( VR) 技 术 的 发 展, 人 类 将 综 合 利 用 视 觉 听 觉 触 觉 嗅 觉 来 提 高 数 据 处 理 的 速 度 和 准 确 度 可 视 化 的 研 究 内 容 第 9 章 235 可 视 化 的 研 究 内 容 包 括 可 视 化 工 具 和 应 用 两 方 面, 汇 总 如 表 9 唱 1 可 视 化 技 术 的 应 用 研 究 领 域 很 宽, 随 着 可 视 化 研 究 和 应 用 水 平 的 提 高, 其 应 用 范 围 将 发 生 变 化, 事 实 上 目 前 可 视 化 技 术 在 社 会 科 学 生 命 科 学 中 已 有 应 用 表 9 唱 1 可 视 化 研 究 内 容 硬 件 平 台 研 究 可 视 化 计 算 机 体 系 结 构 可 视 化 输 入 / 输 出 设 备 ( 包 括 人 唱 机 交 互 设 备 ) 高 速 网 络 应 用 可 视 化 研 究 内 容 可 视 化 工 具 研 究 参 考 模 型 研 究 软 件 系 统 研 究 数 据 处 理 模 块 映 射 模 块 绘 制 模 块 显 示 模 块 可 视 化 软 件 系 统 结 构 函 数 库 与 标 准 化 人 唱 机 交 互 功 能 远 程 可 视 化 支 撑 软 件 可 视 化 应 用 研 究 自 然 科 学 领 域 工 程 技 术 领 域 分 子 构 模 医 学 图 像 脑 结 构 与 功 能 空 间 探 索 天 体 物 理 地 球 科 学 等 计 算 流 体 力 学 有 限 元 分 析 CAD /CAM 等 根 据 科 学 计 算 处 理 的 对 象, 可 视 化 可 分 为 标 量 矢 量 及 张 量 等 不 同 类 别 数 据 场 的 可 视 化 以 及 多 维 标 量 数 据 的 信 息 可 视 化 可 视 化 过 程 一 般 分 为 数 据 预 处 理 映 射 绘 制 和 显 示 4 步 1. 数 据 预 处 理 原 始 数 据 预 处 理 部 分 涉 及 的 操 作 : 数 据 格 式 及 其 标 准 化 数 据 变 换 技 术 数 据 压 缩 和 解 压 缩 针 对 不 同 的 可 视 化 方 法 和 内 容, 需 要 对 原 始 数 据 做 变 换 处 理, 以 满 足 可 视 化 要 求 对 原 始 数 据 进 行 变 换 处 理 的 操 作 主 要 包 括 : 数 据 规 范 化 处 理 滤 波 处 理 平 滑 处 理 网 格 重 新 划 分 几 何 变 换 分 割 与 边 缘 检 测 特 征 检 测 增 强 和 提 取 查 色 表 操 纵 和 特 征 映 射, 等 等 2. 映 射 映 射 模 块 是 完 成 将 数 值 数 据 转 变 成 几 何 数 据 的 功 能, 因 此 映 射 功 能 实 质 上 完 成 的 是

249 计 算 机 图 形 学 236 数 据 建 模 功 能, 是 可 视 化 技 术 的 核 心 可 视 化 处 理 的 数 据 类 型 随 着 应 用 领 域 的 不 同 而 不 同, 因 此 对 不 同 类 型 的 应 用 数 据 应 采 用 不 同 的 映 射 技 术 3. 绘 制 绘 制 功 能 完 成 将 几 何 数 据 转 换 成 图 像 的 过 程, 计 算 机 图 形 学 中 真 实 感 成 像 包 括 两 部 分 : 物 体 的 精 确 图 形 表 示 和 场 景 中 光 照 效 果 的 适 当 物 理 描 述 物 体 的 精 确 图 形 表 示 包 括 几 何 体 建 模 技 术 扫 描 转 换 技 术 反 走 样 技 术 和 隐 藏 面 消 除 技 术 一 个 完 整 精 确 的 图 形 描 述 通 常 需 要 综 合 应 用 这 些 技 术, 同 时, 还 要 考 虑 用 户 对 图 形 表 示 的 需 要, 不 能 把 图 形 模 型 建 得 过 于 简 单, 也 不 能 过 于 复 杂 光 照 效 果 包 括 光 的 反 射 透 明 性 表 面 纹 理 和 阴 影 光 照 效 果 由 描 述 物 体 表 面 各 点 光 强 的 光 照 模 型 来 表 示 为 可 见 物 体 建 立 光 照 效 果 模 型 是 一 个 非 常 复 杂 的 过 程, 大 多 数 软 件 都 采 用 由 物 体 表 面 光 强 度 的 物 理 公 式 推 导 出 来 的 简 化 光 照 模 型 4. 显 示 显 示 模 块 的 功 能 是 将 绘 制 模 块 生 成 的 图 像 数 据, 按 用 户 指 定 的 要 求 进 行 输 出 显 示 模 块 除 了 完 成 图 像 信 息 输 出 功 能 外, 用 户 的 反 馈 信 息 也 是 通 过 显 示 模 块 传 送 到 其 他 软 件 层 中, 以 实 现 人 机 交 互 人 机 交 互 是 可 视 化 的 一 项 重 要 指 标, 许 多 可 视 化 要 求 实 现 动 态 调 整 映 射 关 系, 通 过 改 变 视 图 遍 历 数 据, 视 图 缩 放 等 操 作 可 视 化 方 法 三 维 数 据 场 的 可 视 化 方 法 主 要 有 面 绘 制 和 体 绘 制 两 类 面 绘 制 ( surface based method) 是 指 体 表 面 的 重 建, 也 即 由 三 维 数 据 中 抽 取 出 等 值 面, 然 后 再 由 传 统 的 图 形 学 技 术 实 现 表 面 绘 制 除 了 等 值 面, 基 于 传 统 图 形 学 的 可 视 化 方 法 还 可 以 采 用 等 值 线 或 流 线 表 示 二 维 数 据 场 或 三 维 数 据 场 的 截 面, 面 绘 制 可 以 有 效 地 绘 制 三 维 体 的 表 面, 但 缺 乏 内 部 信 息 的 表 达 体 绘 制 (volume rendering) 以 体 素 作 为 基 本 单 元, 直 接 由 切 片 数 据 集 生 成 三 维 体 的 图 像, 也 称 直 接 体 绘 制, 能 够 表 示 对 象 体 的 内 部 信 息, 但 计 算 量 大, 包 括 数 据 的 采 样 重 构 重 采 样 组 合 绘 制 等 操 作 体 绘 制 主 要 是 针 对 体 数 据 的 可 视 化 方 法 体 数 据 是 对 有 限 空 间 的 一 组 离 散 采 样, 每 个 采 样 点 上 的 采 样 值 可 以 是 一 种 或 多 种, 其 结 果 是 以 有 限 个 采 样 来 描 述 场 空 间 体 数 据 是 真 正 的 三 维 实 体, 它 含 有 物 体 内 部 信 息 体 视 化 的 任 务 就 是 要 揭 示 物 体 内 部 复 杂 的 结 构, 与 传 统 计 算 机 图 形 学 的 主 要 差 异 在 于 对 象 的 表 示 模 型 不 同, 一 个 是 有 限 个 离 散 采 样, 一 个 是 连 续 的 几 何 描 述, 由 此 导 致 对 物 体 的 处 理 操 作 变 换 分 析 和 显 示 方 法 的 截 然 不 同 体 数 据 的 来 源 最 早 源 于 X 射 线 透 视 设 备 1973 年 英 国 EMI 公 司 推 出 的 商 品 化 CT (computer tomography) 机 及 后 来 出 现 的 超 声 扫 描 核 磁 共 振 等 设 备 为 体 视 化 的 研 究 和 发 展 提 供 了 必 要 的 物 质 基 础 20 世 纪 70 年 代 CT 切 片 厚 度 即 切 片 之 间 间 距 比 较 大, 主 要 采 用 轮 廓 连 接 或 从 平 面 轮

250 计 算 机 图 形 学 相 关 的 研 究 领 域 廓 重 构 形 体,Keppel 在 1975 年 提 出 用 三 角 片 拟 合 物 体 表 面, 该 方 法 需 要 解 决 断 层 图 像 轮 廓 提 取 层 之 间 轮 廓 对 应 和 物 体 表 面 的 拟 合 等 问 题 1979 年,Herman 和 Liu 提 出 了 立 方 块 方 法, 用 物 体 边 界 处 体 素 的 表 面 拼 接 起 来 代 表 物 体 表 面, 体 视 化 ( volume visualization) 的 基 本 思 想 已 经 初 步 建 成 体 绘 制 首 先 对 每 个 体 素 赋 以 透 明 度 和 颜 色 值, 再 根 据 各 体 素 所 在 点 的 灰 度 梯 度 及 光 照 模 型 计 算 出 相 应 体 素 的 光 照 强 度, 最 后 计 算 出 全 部 采 样 点 对 屏 幕 像 素 的 贡 献, 即 像 素 的 光 照 强 度, 生 成 结 果 图 像 体 素 主 要 有 两 种 模 型, 一 种 定 义 为 采 样 点 的 中 心, 就 是 体 素 的 中 心 的 一 个 立 方 体, 另 一 种 定 义 成 由 相 邻 的 8 个 三 维 采 样 点 所 围 成 的 立 方 体 体 光 照 模 型 来 源 于 物 理 光 学 模 型 体 光 照 模 型 可 分 成 吸 收 发 射 单 多 散 射 和 混 合 等 多 种 模 型 实 际 应 用 的 体 光 照 模 型 是 由 一 种 或 多 种 光 照 模 型 组 成 的 体 绘 制 主 要 有 基 于 图 像 空 间 对 象 空 间 频 域 空 间 3 种 方 法 体 视 化 孕 育 着 计 算 机 图 形 学 的 一 场 革 命 正 如 20 世 纪 70 年 代 光 栅 图 形 取 代 矢 量 图 形 有 效 地 解 决 了 二 维 面 片 的 显 示 问 题, 当 前 体 视 化 正 在 逐 渐 代 替 传 统 图 形 学 更 好 地 解 决 三 维 物 体 或 数 据 场 内 部 的 显 示 问 题 从 硬 件 上 看, 设 计 和 制 造 大 容 量 存 储 器 已 经 不 是 一 件 困 难 的 事 情, 用 于 体 数 据 操 作 显 示 的 体 视 化 专 用 并 行 处 理 硬 件 也 在 发 展 之 中 可 视 化 应 用 可 视 化 能 够 帮 助 研 究 人 员 理 解 计 算 与 实 验 中 获 得 的 大 量 数 据, 是 继 计 算 模 型 实 验 之 后 的 又 一 强 有 力 的 科 研 工 具, 其 应 用 范 围 几 乎 涉 及 现 代 科 学 与 工 程 技 术 的 所 有 领 域, 不 仅 在 物 理 化 学 数 学 地 学 材 料 科 学 等 自 然 科 学, 而 且 在 生 命 科 学 社 会 科 学 以 及 计 算 流 体 力 学 有 限 元 分 析 CAD /CAM 等 工 程 技 术 中 获 得 了 广 泛 的 应 用, 要 完 整 列 举 可 视 化 的 应 用 领 域 是 很 困 难 的, 下 面 列 举 可 视 化 在 几 种 典 型 数 据 场 分 析 中 的 应 用 1. 流 场 可 视 化 流 场 可 视 化 是 可 视 化 的 重 要 应 用 领 域, 在 航 空 航 天 飞 行 器 汽 车 船 舶 的 设 计 以 及 气 象 预 报 海 洋 研 究 中 发 挥 了 重 要 作 用 计 算 流 体 力 学 是 对 流 体 运 动 的 仿 真, 描 述 流 场 中 的 各 种 物 理 量 的 分 布 情 况, 如 压 力 密 度 等 标 量 和 速 度 等 矢 量, 并 用 不 同 颜 色 的 等 值 线 ( 面 ) 或 不 同 深 浅 的 同 种 颜 色 填 充 网 格 来 表 示 标 量 的 数 值 差 别, 以 带 箭 头 的 线 段 来 描 绘 矢 量 的 方 向, 对 冲 击 波 涡 流 驻 点 等 各 种 流 场 结 构, 可 视 化 技 术 实 时 交 互 地 变 化 画 面 大 小 并 提 供 动 态 显 示, 以 使 分 析 者 看 清 流 场 中 各 种 现 象 的 细 节 并 作 进 一 步 分 析 在 飞 行 器 汽 车 船 舶 等 产 品 的 设 计 过 程 中, 流 场 可 视 化 侧 重 于 研 究 物 体 在 流 场 中 的 各 种 性 能 ; 在 气 象 海 洋 等 领 域, 流 场 可 视 化 侧 重 于 揭 示 流 体 自 身 的 运 动 规 律 以 气 象 观 测 数 据 为 例, 一 方 面, 可 视 化 可 将 大 量 的 数 据 转 换 为 图 像, 在 屏 幕 上 显 示 出 某 一 时 刻 的 等 压 面 等 温 面 漩 涡 云 层 的 位 置 及 运 动 暴 雨 区 的 位 置 及 其 强 度 风 力 的 大 小 及 方 向 等, 使 预 报 人 员 能 对 未 来 的 天 气 作 出 准 确 的 分 析 和 预 测 另 一 方 面, 根 据 全 球 的 气 象 监 测 数 据 和 计 算 结 果, 可 将 不 同 时 期 全 球 的 气 温 分 布 气 压 分 布 雨 量 分 布 及 风 力 风 向 等 以 图 像 形 第 9 章 237

251 计 算 机 图 形 学 238 式 表 示 出 来, 从 而 对 全 球 的 气 象 情 况 及 其 变 化 趋 势 进 行 研 究 和 预 测 2. 温 度 场 可 视 化 温 度 场 是 常 见 的 数 据 场 之 一 温 度 场 可 视 化 在 气 象 飞 机 座 舱 设 计 金 属 凝 固 模 拟 等 领 域 中 应 用 较 多 其 中 金 属 凝 固 模 拟 是 材 料 科 学 中 的 一 个 新 兴 研 究 方 向, 通 过 温 度 场 的 可 视 化, 可 以 了 解 铸 件 的 凝 固 状 态 晶 体 组 织 残 留 应 力 以 及 缩 孔 等, 这 在 大 型 铸 件 和 连 铸 钢 坯 中 尤 为 重 要 3. 应 力 场 可 视 化 应 力 场 是 CAD /CAM 领 域 中 涉 及 最 多 的 数 据 场 应 力 场 可 视 化 在 机 械 产 品 设 计 建 筑 结 构 和 地 基 分 析 水 利 工 程 中 的 大 坝 计 算 以 及 地 壳 演 变 模 拟 等 方 面 发 挥 了 重 要 的 作 用 4. 电 磁 场 可 视 化 电 磁 场 可 视 化 在 雷 达 飞 机 隐 身 与 反 隐 身 以 及 电 器 设 计 中 具 有 很 高 的 应 用 价 值 隐 形 飞 机 在 现 代 战 争 中 具 有 重 要 的 地 位, 综 合 考 虑 材 料 外 形 等 因 素, 应 用 可 视 化 技 术, 可 以 显 示 出 隐 形 飞 机 对 电 磁 波 的 反 射 情 况, 这 对 飞 机 的 隐 身 与 反 隐 身 至 关 重 要 图 9 唱 3 是 电 磁 场 可 视 化 应 用 实 例 5. 声 场 可 视 化 声 场 对 日 常 生 活 影 响 较 大, 声 场 可 视 化 主 要 应 用 于 音 响 效 果 设 计 噪 声 控 制 等 可 视 化 技 术 在 上 述 肉 眼 不 可 见 数 据 场 中 的 应 用 集 中 体 现 了 可 视 化 可 视 不 可 见 ( see the 图 9 唱 3 电 磁 场 可 视 化 实 例 unseen) 的 特 长 除 此, 可 视 化 在 虚 拟 现 实 ( VR) 医 学 图 像 处 理 地 理 信 息 系 统 等 新 兴 领 域 中 亦 有 重 要 的 应 用 6. 医 学 应 用 掌 握 人 体 内 部 的 结 构 是 医 学 中 最 基 本 的 要 求 目 前 广 泛 应 用 的 计 算 机 断 层 扫 描 与 核 磁 共 振 技 术, 只 能 提 供 人 体 内 部 的 二 维 图 像, 不 能 构 思 病 灶 的 立 体 形 象, 从 而 给 治 疗 带 来 了 困 难 美 国 国 家 医 学 图 书 馆 1991 年 采 用 可 视 化 技 术, 将 人 体 每 隔 0.33 ~1mm 进 行 扫 描 切 片 ( 剖 面 ), 然 后 将 获 得 的 一 系 列 二 维 图 像 在 计 算 机 上 重 构 出 人 体 的 三 维 形 体 在 此 基 础 上 医 生 可 在 计 算 机 上 从 各 个 不 同 角 度 或 任 意 截 取 某 一 部 位 放 大, 进 行 观 察, 以 便 选 择 最 佳 的 实 施 方 案, 从 而 大 大 提 高 手 术 的 质 量 同 时 还 可 以 方 便 地 在 计 算 机 上 预 先 实 现 矫 形 手 术 放 射 治 疗 等 计 算 机 模 拟 及 手 术 规 划 我 国 也 开 展 了 相 应 的 研 究 工 作 图 9 唱 4 是 医 学 CT 数 据 的 可 视 化 图 例

252 计 算 机 图 形 学 相 关 的 研 究 领 域 第 9 章 239 图 9 唱 4 可 视 化 在 医 学 中 的 应 用 实 例 7. 生 物 高 分 子 高 分 子 合 成 可 产 生 新 的 物 质, 这 是 计 算 化 学 和 生 物 工 程 中 的 重 要 研 究 课 题 可 视 化 技 术 可 使 研 究 者 通 过 直 观 的 交 互 方 法 增 添 或 删 除 某 类 分 子 或 分 子 个 数 以 控 制 合 成 物 质 的 性 质, 从 而 缩 短 设 计 新 物 质 的 周 期 在 高 技 术 研 究 中 数 值 模 拟 与 可 视 化 技 术 更 具 有 不 可 替 代 的 作 用 高 技 术 研 究 需 要 试 验, 但 试 验 需 要 花 费 大 量 的 人 力 物 力, 且 要 受 到 很 多 客 观 条 件 的 制 约 所 以 大 量 的 试 验 是 在 计 算 机 上 通 过 数 据 模 拟 进 行 的 少 量 的 必 要 的 实 际 试 验 只 在 为 校 正 数 值 模 拟 使 用 参 数 和 检 验 数 据 模 拟 的 方 法 而 进 行 8. 地 质 矿 产 资 源 的 可 视 化 油 气 资 源 地 下 水 及 其 他 重 要 矿 产 资 源 是 国 家 经 济 发 展 的 基 础 由 于 地 质 勘 探 数 据 量 大 分 布 不 规 则 且 数 据 域 内 包 含 复 杂 断 层 的 特 点, 早 在 20 世 纪 70 年 代 就 开 始 大 量 应 用 计 算 机 技 术 以 油 气 资 源 勘 探 为 例, 石 油 勘 探 开 发 数 据 的 处 理 是 制 定 油 气 开 发 方 案 预 测 油 气 资 源 的 基 础 在 石 油 勘 探 开 发 过 程 中 获 得 数 据 的 重 要 手 段 是 地 震 和 测 井, 一 个 区 块 的 地 震 数 据 一 般 有 几 十 兆, 区 块 中 每 口 井 的 测 井 数 据 多 达 十 万 个 点, 每 个 点 有 孔 隙 度 渗 透 率 饱 和 度 等 多 达 150 种 参 数, 且 有 时 上 千 口 井 需 一 起 计 算, 数 据 量 极 大, 数 据 分 布 又 极 不 均 衡, 且 地 下 的 地 质 构 造 极 为 复 杂, 因 此 石 油 勘 探 开 发 数 据 的 处 理 复 杂 度 高 运 算 量 大 为 了 提 高 分 析 和 判 断 的 准 确 性, 迫 切 需 要 将 计 算 机 的 数 值 计 算 和 图 形 显 示 技 术 应 用 于 石 油 勘 探 领 域 可 视 化 技 术 可 以 显 示 各 种 方 法 获 得 的 地 质 数 据, 并 以 此 来 推 断 地 下 的 地 质 构 造 及 地 质 属 性 的 分 布 状 况, 从 而 确 定 石 油 富 集 区 的 位 置 形 态 及 石 油 的 储 量 图 9 唱 5 是 地 质 构 造 及 井 迹 的 可 视 化 显 示

253 计 算 机 图 形 学 240 图 9 唱 5 地 质 构 造 及 井 迹 的 可 视 化 9.4 虚 拟 现 实 概 论 虚 拟 现 实 (virtual reality,vr), 又 称 虚 拟 环 境 同 步 环 境 人 造 空 间 人 工 现 实 模 拟 器 技 术, 是 计 算 机 软 硬 件 技 术 传 感 技 术 机 器 人 技 术 人 工 智 能 及 心 理 学 等 高 速 发 展 的 结 晶, 是 一 种 计 算 机 和 电 子 技 术 创 造 的 新 世 界, 是 一 个 看 似 真 实 的 模 拟 环 境 1965 年 Ivan Sutherland 博 士 在 一 篇 题 为 最 终 显 示 器 ( The Ultimate Display) 的 文 章 中 首 次 提 出 了 虚 拟 现 实 的 基 本 思 想, 提 到 了 一 个 头 盔 显 示 系 统, 并 提 到 这 种 虚 拟 环 境 应 使 用 户 感 受 到 视 觉 听 觉 触 觉 1968 年 开 发 出 第 一 个 计 算 机 图 形 驱 动 的 头 盔 显 示 器 ( helmet mounted display,hmd) 及 与 之 匹 配 的 头 部 位 置 跟 踪 系 统 在 一 个 完 整 的 头 盔 显 示 系 统 中, 用 户 不 仅 可 以 看 到 三 维 物 体 的 线 框 图, 还 可 以 确 定 三 维 物 体 在 空 间 的 位 置 并 能 通 过 头 部 运 动 从 不 同 视 觉 观 察 三 维 场 景 的 线 框 图 在 当 时 的 计 算 机 图 形 技 术 水 平 下,Ivan Sutherland 取 得 的 成 就 是 非 凡 的 目 前 在 大 多 数 虚 拟 现 实 系 统 中 都 能 看 到 HMD 因 而, 许 多 人 认 为 Ivan Sutherland 不 仅 是 计 算 机 图 形 学 之 父, 而 且 还 是 虚 拟 现 实 技 术 之 父 虚 拟 现 实 是 一 门 涉 及 众 多 学 科 的 新 技 术 它 集 先 进 的 计 算 机 传 感 与 测 量 仿 真 和 微 电 子 技 术 于 一 体 在 计 算 机 技 术 中, 又 特 别 依 赖 于 计 算 机 图 形 学 人 工 智 能 网 络 技 术 人 机 接 口 技 术 及 计 算 机 仿 真 技 术 而 这 些 技 术 的 发 展 带 动 了 虚 拟 现 实 技 术 的 进 步, 也 推 动 了 其 在 教 育 医 疗 娱 乐 科 技 工 业 制 造 建 筑 和 商 业 等 领 域 中 的 广 泛 应 用

254 9.4.2 虚 拟 现 实 技 术 的 原 理 与 特 征 计 算 机 图 形 学 相 关 的 研 究 领 域 虚 拟 现 实 技 术 起 源 于 可 视 化, 是 多 媒 体 技 术 的 延 伸, 反 映 了 人 机 关 系 的 演 化 过 程, 是 一 种 多 维 信 息 的 人 机 界 面 它 在 计 算 机 中 构 造 出 一 种 具 有 三 维 世 界 效 果 的 模 拟 环 境 ( 如 飞 机 驾 驶 舱 操 作 现 场 等 ), 同 时 还 可 以 通 过 各 种 传 感 设 备, 使 用 户 投 入 到 该 环 境 中, 实 现 用 户 与 该 环 境 进 行 直 接 交 互 操 作, 并 产 生 与 现 实 世 界 中 相 同 的 反 馈 信 息, 使 人 们 得 到 与 在 现 实 世 界 中 同 样 的 感 受 虚 拟 现 实 系 统 实 际 上 是 一 种 先 进 的 人 机 接 口 它 是 利 用 计 算 机 以 及 专 用 硬 件 和 软 件 去 仿 真 各 种 现 实 境 界, 通 过 计 算 机 和 信 息 技 术 构 造 虚 拟 自 然 环 境, 将 用 户 和 计 算 机 结 合 成 一 个 整 体 用 户 置 身 于 模 仿 真 实 世 界 而 创 建 的 三 维 电 子 环 境 中, 通 过 各 种 技 术 模 拟 直 接 进 入 到 虚 拟 环 境 去 接 受 和 影 响 环 境 中 各 种 感 觉 刺 激, 与 虚 拟 环 境 的 人 及 事 物 进 行 思 想 和 行 为 的 交 流 用 户 可 以 利 用 人 类 本 能 的 方 式 与 计 算 机 信 息 交 流, 人 的 语 言 眼 神 手 势 都 可 以 为 计 算 机 所 识 别, 而 人 则 可 以 用 听 觉 视 觉 触 觉 来 感 受 计 算 机 信 息, 如 同 现 实 环 境 中 人 与 人 交 流 一 样 的 感 受 和 交 互 对 话, 达 到 与 计 算 机 进 行 直 观 自 然 的 交 互 虚 拟 现 实 系 统 是 相 当 逼 真 的 三 维 视 听 触 摸 和 感 觉 的 虚 拟 空 间 环 境, 虚 拟 三 维 可 以 随 需 要 而 变 换, 交 替 更 迭 用 户 不 再 是 被 动 性 地 观 看, 而 是 融 合 在 其 中, 交 互 性 地 体 验 和 感 受 虚 拟 现 实 世 界 中 广 泛 的 三 维 多 媒 体 内 容 作 为 一 门 具 有 多 媒 体 交 互 共 享 模 式 的 新 兴 技 术, 虚 拟 现 实 技 术 以 其 独 特 的 优 势, 在 各 个 领 域 的 应 用 越 来 越 广 当 人 们 需 要 构 造 当 前 不 存 在 的 环 境 和 人 类 不 可 能 到 达 的 环 境 或 构 造 虚 拟 环 境 以 代 替 耗 资 巨 大 的 现 实 环 境 时, 虚 拟 现 实 技 术 是 必 不 可 少 的 虚 拟 现 实 技 术 具 有 以 下 4 个 重 要 特 征 : (1) 多 感 知 性 (multi 唱 sensory): 就 是 说, 除 了 一 般 计 算 机 技 术 所 具 有 的 视 觉 感 知 外, 还 有 听 觉 感 知 力 觉 感 知 触 觉 感 知 运 动 感 知, 将 来 甚 至 还 会 包 括 味 觉 感 知 嗅 觉 感 知 ; (2) 存 在 感 (presence) 又 称 临 场 感 (immersion): 是 指 用 户 感 到 作 为 主 角 存 在 于 模 拟 环 境 中 的 真 实 程 度 ; (3) 交 互 性 (interaction): 指 用 户 对 模 拟 环 境 内 物 体 的 可 操 作 程 度 和 从 环 境 中 得 到 反 馈 信 息 的 自 然 程 度 ( 包 括 实 时 性 ); (4) 自 主 性 (autonomy): 指 虚 拟 环 境 中 的 物 体 依 据 物 理 定 律 动 作 的 程 度 根 据 虚 拟 现 实 的 概 念 和 技 术 上 的 特 征, 可 以 用 系 统 的 存 在 感 交 互 性 和 自 主 性 来 评 价 虚 拟 现 实 系 统 的 性 能 虚 拟 现 实 系 统 的 组 成 VR 是 一 个 十 分 复 杂 的 系 统, 涉 及 的 技 术 包 括 图 形 图 像 处 理 语 音 处 理 与 音 响 模 式 识 别 人 工 智 能 智 能 接 口 传 感 器 实 时 分 布 系 统 数 据 库 并 行 处 理 系 统 建 模 与 仿 真 系 第 9 章 241

255 计 算 机 图 形 学 242 统 集 成 及 跟 踪 定 位 等 VR 的 技 术 组 成 如 图 9 唱 6 所 示 从 图 中 可 以 看 出, 典 型 的 虚 拟 现 实 系 统 的 基 本 组 成 包 括 : (1) 效 果 产 生 器 : 完 成 人 与 虚 拟 环 境 交 互 的 硬 件 接 口 装 置 ; (2) 实 景 仿 真 器 : 系 统 的 核 心 部 分, 由 计 算 机 软 件 系 统 软 件 开 发 工 具 等 组 成 ; (3) 应 用 系 统 : 面 向 具 体 问 题 的 软 件 部 分, 描 述 仿 真 的 具 体 内 容 ; (4) 几 何 构 造 系 统 : 提 供 描 述 仿 真 对 象 的 物 理 特 性 的 信 息 图 9 唱 6 VR 系 统 的 组 成 通 常 虚 拟 现 实 系 统 分 为 : 桌 面 投 入 增 强 现 实 临 境 逆 向 和 分 布 式 等 几 种 类 型 桌 面 虚 拟 现 实 系 统 是 利 用 个 人 计 算 机 或 工 作 站 进 行 仿 真, 以 计 算 机 屏 幕 作 为 观 察 虚 拟 境 界 的 一 个 窗 口, 成 本 较 低, 但 投 入 性 差 投 入 系 统 是 通 过 各 种 硬 件 和 软 件, 把 周 围 的 现 实 环 境 屏 蔽 掉, 完 全 被 虚 拟 境 界 包 围 一 个 典 型 的 VR 系 统 有 一 个 微 型 计 算 机 或 工 作 站, 带 有 图 形 加 速 器, 对 虚 拟 环 境 的 模 型 及 图 形 进 行 实 时 分 析 和 处 理 HMD 由 两 个 小 型 的 液 晶 显 视 ( liquid crystal display, LCD)TV 屏 幕 和 立 体 声 耳 机 组 成, 给 用 户 以 视 觉 和 听 觉 感 受, 实 际 是 用 户 浸 入 虚 拟 环 境 的 视 觉 与 听 觉 接 口 追 踪 控 制 器 对 操 作 者 的 头 和 手 进 行 定 位 定 向 用 户 旋 转 时, 视 景 也 跟

256 计 算 机 图 形 学 相 关 的 研 究 领 域 着 旋 转 三 维 音 响 可 从 耳 机 里 听 到 用 户 戴 上 数 据 手 套 或 三 维 鼠 标 可 以 与 VR 世 界 进 行 交 流, 这 实 际 上 是 一 个 与 三 维 视 景 进 行 相 互 作 用 的 接 口 虚 拟 现 实 的 硬 件 系 统 包 括 : 高 性 能 计 算 机 虚 拟 现 实 发 生 器 声 音 合 成 器 3D 声 音 定 域 器 语 音 识 别 器 数 据 手 套 鼠 标 器 跟 踪 球 操 纵 杆 头 盔 式 显 示 器 护 目 镜 及 数 据 服 等 软 件 系 统 一 般 包 括 虚 拟 现 实 环 境 构 造 程 序 和 有 关 数 据 库 等 构 造 程 序 用 来 设 计 虚 拟 境 界 的 景 和 物, 提 供 建 模 功 能 虚 拟 现 实 工 具 包 可 将 三 维 物 体 与 虚 拟 境 界 组 合 起 来, 并 赋 予 某 些 特 性, 其 中 的 程 序 库 和 模 块 化 方 法 可 以 开 发 各 种 虚 拟 现 实 程 序 虚 拟 环 境 产 生 器 是 VR 系 统 的 主 要 部 分, 其 目 的 是 为 用 户 产 生 虚 拟 环 境 并 实 现 运 行 管 理 它 由 应 用 系 统 和 计 算 机 系 统 两 部 分 构 成 应 用 系 统 中 的 仿 真 管 理 器 负 责 虚 拟 现 实 系 统 管 理, 实 现 仿 真 过 程 的 任 务 进 程 资 源 对 象 等 所 对 应 的 场 景 事 件 运 动 等 之 间 的 协 调, 使 用 户 如 同 进 入 真 实 环 境 中 ; 用 户 应 用 系 统 用 于 定 义 对 虚 拟 现 实 系 统 进 行 操 作 的 内 容 ( 如 仿 真 动 态 逻 辑 结 构 以 及 仿 真 对 象 与 用 户 间 的 交 互 关 系 ); 三 维 几 何 造 型 系 统 按 照 应 用 要 求 对 仿 真 对 象 的 物 理 属 性 进 行 建 模 效 果 产 生 器 主 要 包 括 头 盔 显 示 器 位 置 与 方 向 跟 踪 器 三 维 声 音 处 理 器 及 触 觉 力 反 馈 装 置 等 头 盔 显 示 器 的 主 要 功 能 是 使 用 户 增 加 沉 浸 感 ; 位 置 与 方 向 跟 踪 器 用 来 跟 踪 头 部 的 位 置 及 方 向, 并 将 感 知 信 息 送 入 计 算 机 ( 事 实 上, 数 据 手 套 也 属 于 位 置 跟 踪 设 备, 用 来 监 视 手 的 位 置 和 方 向 手 指 的 曲 折 ); 三 维 声 音 处 理 器 包 括 声 音 合 成 三 维 声 音 定 域 和 语 音 识 别, 用 来 构 成 动 态 声 学 环 境, 这 对 增 强 沉 浸 感 和 构 想 是 十 分 重 要 的 ; 触 觉 力 反 馈 装 置 用 来 测 量 虚 拟 物 体 的 反 作 用 力, 从 而 实 现 力 反 馈 目 前, 常 见 的 触 觉 力 反 馈 装 置 有 键 盘 鼠 标 空 间 球 以 及 游 戏 杆 触 觉 识 别 装 置 进 展 缓 慢, 是 目 前 VR 需 要 着 重 解 决 的 一 个 难 题 在 虚 拟 现 实 系 统 中, 为 了 使 人 与 计 算 机 能 够 融 洽 地 交 互, 让 人 沉 浸 到 计 算 机 所 创 造 的 虚 拟 环 境 中 去, 必 须 配 备 相 应 的 硬 件 设 备 1. 跟 踪 系 统 跟 踪 系 统 的 任 务 是 要 实 时 检 测 出 虚 拟 现 实 系 统 中 人 的 头 身 体 和 手 的 位 置 与 指 向, 以 便 把 这 些 数 据 反 馈 给 控 制 系 统, 生 成 随 视 线 变 化 的 图 像 (1) 电 磁 跟 踪 系 统 : 电 磁 跟 踪 系 统 由 励 磁 源 磁 接 收 器 和 计 算 模 块 组 成 励 磁 源 由 3 个 磁 场 方 向 相 互 垂 直 的 交 流 电 流 产 生 的 双 极 磁 源 构 成, 磁 接 收 器 由 3 套 分 别 测 试 3 个 励 磁 源 的 方 向 上 相 互 垂 直 的 线 圈 组 成, 经 3 次 测 量, 可 以 测 得 9 个 数 据, 由 此 可 确 定 被 测 目 标 的 6 个 参 数, 即 空 间 坐 标 x y z 和 旋 转 角 α β γ (2) 声 学 跟 踪 系 统 : 利 用 不 同 声 源 的 声 音 到 达 某 一 特 定 地 点 的 时 间 差 相 位 差 及 声 压 差, 可 以 进 行 定 位 与 跟 踪 与 电 磁 跟 踪 法 相 似, 超 声 波 式 传 感 器 也 有 发 射 器 接 收 器 和 电 子 部 件 组 成 实 现 声 音 的 位 置 跟 踪, 可 以 采 用 声 波 飞 行 时 间 测 量 法 和 相 位 相 干 测 量 法 (3) 光 学 跟 踪 系 统 : 光 学 跟 踪 系 统 使 用 从 普 通 的 视 频 摄 像 机 到 x -y 平 面 光 敏 二 极 第 9 章 243

257 计 算 机 图 形 学 244 管 的 阵 列, 利 用 周 围 光 或 者 由 位 置 器 控 制 的 光 源 发 出 的 光 在 图 像 投 影 平 面 不 同 时 刻 或 不 同 位 置 上 的 投 影, 计 算 得 到 被 跟 踪 对 象 的 方 位 光 学 跟 踪 系 统 可 以 被 描 述 为 固 定 的 传 感 器 或 者 图 像 处 理 器 2. 触 觉 系 统 触 觉 系 统 在 虚 拟 现 实 系 统 中, 产 生 沉 浸 效 果 的 关 键 因 素 是 用 户 能 用 手 或 身 体 的 其 他 能 动 部 分 去 操 作 虚 拟 物 体, 并 在 操 作 同 时 能 够 感 觉 到 虚 拟 物 体 的 反 作 用 力 力 学 反 馈 手 套 是 最 常 用 的 触 觉 系 统, 它 使 用 2 只 手 套, 在 第 一 只 手 套 的 下 部 安 装 20 个 压 敏 元 件, 当 戴 上 手 套 时, 用 户 感 觉 到 压 敏 元 件 随 着 手 的 用 力 产 生 的 阻 力, 压 敏 元 件 输 出 经 模 数 转 换 后, 传 送 给 主 机 处 理 第 二 只 手 套 有 20 个 空 气 室, 由 20 个 空 气 泵 来 控 制 膨 胀 和 收 缩, 从 而 对 用 户 施 加 力 感 3. 音 频 系 统 听 觉 环 境 系 统 由 语 音 与 音 响 合 成 设 备 识 别 设 备 和 声 源 定 位 设 备 所 构 成, 通 过 听 觉 通 道 提 供 的 辅 助 信 息 可 以 加 强 用 户 对 环 境 的 感 知 为 了 能 产 生 逼 真 的 环 境 音, 人 们 已 开 始 尝 试 使 用 4 声 道 系 统, 采 用 空 间 声 音 合 成 方 法, 通 过 由 不 同 方 向 到 达 左 右 耳 道 的 声 音 测 试 得 到 响 应 4. 图 像 生 成 和 显 示 系 统 在 VR 环 境 中, 图 像 生 成 和 显 示 技 术 显 得 特 别 重 要 由 计 算 机 生 成 视 景 的 工 作 主 要 包 括 : (1) 计 算 生 成 真 实 感 的 图 形, 其 图 形 具 有 颜 色 光 照 立 体 感 和 运 动 感 ; (2) 计 算 生 成 或 直 接 从 图 像 库 中 取 得 已 经 压 缩 且 有 真 实 感 的 背 景 图 像 ; (3) 经 过 扫 描 变 换 将 图 形 和 背 景 图 像 统 一 安 排 在 同 一 坐 标 系 中 5. 可 视 化 显 示 设 备 为 了 生 成 一 个 具 有 沉 浸 感 的 虚 拟 现 实 环 境, 必 须 集 成 上 述 4 种 技 术 头 盔 式 显 示 器 HMD 是 该 项 技 术 的 结 晶, 它 不 仅 综 合 了 上 述 技 术 的 精 华, 而 且 还 结 合 人 类 对 视 觉 感 知 的 生 理 特 点 其 显 示 屏 幕 被 设 置 在 一 个 特 制 头 盔 的 前 部, 把 计 算 机 生 成 的 图 像 分 别 送 到 头 盔 显 示 器 的 2 个 屏 幕, 以 产 生 一 幅 立 体 图 像, 当 人 的 头 或 身 体 转 动 时, 计 算 机 图 像 生 成 系 统 送 出 的 相 应 图 像 也 跟 着 发 生 变 化 仿 真 多 媒 体 与 虚 拟 现 实 之 间 的 关 系 从 VR 系 统 的 组 成 可 以 看 出,VR 系 统 也 是 一 类 仿 真 系 统, 而 且 与 多 媒 体 紧 密 相 关 仅 由 视 觉 和 听 觉 媒 体 组 合 而 成 的 媒 体 称 为 狭 义 多 媒 体, 常 见 的 形 式 有 文 字 图 形 图 像 声 音 动 画 和 视 频 等 ; 而 把 视 觉 听 觉 触 觉 嗅 觉 味 觉 等 全 部 组 合 称 为 广 义 多 媒 体 按 此 定 义, 一 般 应 用 软 件 中 所 说 的 多 媒 体 都 是 狭 义 多 媒 体 一 般 意 义 上 的 仿 真 是 指 通 过 对 给 定 模 型 进 行 计 算, 最 后 给 出 一 系 列 的 数 据, 这 就 是 数

258 计 算 机 图 形 学 相 关 的 研 究 领 域 字 仿 真 ; 为 数 字 仿 真 过 程 及 结 果 增 加 文 本 提 示 图 形 图 像 动 画 表 现, 使 仿 真 过 程 更 加 直 观, 结 果 更 容 易 理 解, 并 能 验 证 仿 真 过 程 是 否 正 确, 这 便 是 可 视 化 仿 真 ; 在 可 视 化 仿 真 的 基 础 上 再 加 入 声 音, 就 可 以 得 到 视 觉 和 听 觉 媒 体 组 合, 便 成 为 多 媒 体 仿 真 多 媒 体 仿 真 不 仅 包 括 了 数 字 仿 真 和 可 视 化 仿 真 的 全 部 功 能, 而 且 还 具 有 视 听 功 能 然 而, 系 统 中 并 未 强 调 三 维 动 画 交 互 功 能, 不 支 持 触 觉 嗅 觉 味 觉 如 果 在 多 媒 体 仿 真 的 基 础 上 再 加 上 这 些 功 能, 就 得 到 了 VR 仿 真 系 统, 它 们 的 关 系 如 图 9 唱 7 所 示 由 图 可 见,VR 系 统 是 一 个 综 合 系 统 第 9 章 245 图 9 唱 7 数 字 可 视 化 和 多 媒 体 仿 真 与 VR 的 关 系 图 VR 是 一 种 可 以 创 建 和 体 验 虚 拟 世 界 的 计 算 机 系 统, 虚 拟 世 界 是 全 体 虚 拟 环 境 或 给 定 仿 真 对 象 的 全 体, 而 虚 拟 环 境 是 由 计 算 机 和 电 子 技 术 生 成 的 通 过 视 觉 听 觉 触 觉 等 作 用 于 用 户, 使 之 产 生 身 临 其 境 的 感 觉 因 此, 可 将 虚 拟 现 实 技 术 视 为 交 互 式 仿 真 技 术 的 高 级 形 式 它 与 传 统 的 一 般 交 互 式 仿 真 的 主 要 区 别 如 下 : 人 机 交 互 的 自 然 性 : 传 统 的 仿 真 环 境 一 直 是 以 计 算 机 为 中 心, 用 户 借 助 于 键 盘 鼠 标 或 专 用 设 备 发 出 操 作 信 息, 其 交 互 特 征 是 人 适 应 计 算 机 VR 强 调 的 是 计 算 机 适 应 人, 形 成 和 谐 的 人 机 环 境 它 是 通 过 计 算 机 识 别 人 的 位 姿 手 势 甚 至 可 以 人 机 会 话 在 VR 技 术 中, 头 盔 数 据 手 套 数 据 衣 等 成 为 人 机 交 互 的 基 本 手 段 信 息 处 理 的 多 维 性 : VR 基 于 多 维 信 息, 包 括 声 音 图 形 图 像 位 姿 力 反 馈 触 觉 等, 而 不 是 仅 仅 基 于 数 字 信 息 虚 拟 环 境 的 真 实 性 : 理 想 的 VR 应 达 到 人 在 虚 拟 环 境 中 如 同 在 真 实 环 境 中 的 感 觉, 即 除 了 三 维 视 景 感 觉 外, 还 具 有 自 动 定 位 的 听 觉 触 觉 力 觉 运 动 等 感 知, 甚 至 具 有 味 觉 嗅 觉 等 智 能 性 : 在 VR 中 计 算 机 系 统 除 了 计 算 功 能 外, 还 能 表 现 出 具 有 知 识 智 能 等 功 能 应 用 领 域 : 仿 真 的 目 的 一 般 归 结 为 决 策 问 题, 而 决 策 分 为 宏 观 决 策 和 微 观 决 策

259 计 算 机 图 形 学 246 目 前,VR 系 统 的 应 用 均 属 于 微 观 决 策 问 题 大 多 数 学 者 认 为 VR 系 统 不 适 用 宏 观 决 策 问 题, 虽 然 有 些 VR 系 统 规 模 很 大, 但 所 涉 及 的 都 是 局 部 决 策, 因 此 也 属 于 微 观 决 策 问 题 一 类 仿 真 技 术 最 先 应 用 于 控 制 系 统 中 在 信 息 技 术 和 计 算 机 技 术 为 先 导 的 态 势 下, 仿 真 技 术 已 渗 透 到 多 个 领 域, 并 已 取 得 明 显 的 经 济 效 益 和 社 会 效 益 但 VR 技 术 目 前 应 用 最 多 的 是 娱 乐 方 面, 尽 管 人 们 预 言 VR 将 在 不 少 领 域 得 到 应 用, 但 大 多 数 VR 系 统 只 有 视 觉 和 听 觉 的 感 受, 极 少 涉 及 嗅 觉 味 觉 触 觉, 实 际 应 用 还 不 多 虚 拟 现 实 技 术 应 用 VR 技 术 在 教 育 医 疗 娱 乐 科 技 工 业 制 造 建 筑 和 商 业 等 领 域 中 具 有 广 阔 的 应 用 前 景, 但 目 前 尚 处 于 初 级 阶 段, 表 9 唱 2 列 举 了 当 前 虚 拟 现 实 技 术 的 一 些 应 用 领 域 表 9 唱 2 虚 拟 现 实 的 应 用 领 域 用 途 医 学 教 育 艺 术 商 业 景 观 模 拟 科 学 视 觉 化 军 事 太 空 机 械 人 工 业 娱 乐 外 科 手 术 远 程 遥 控 手 术 身 体 复 健 虚 拟 超 音 波 影 像 药 物 合 成 虚 拟 天 文 馆 远 距 离 教 学 虚 拟 博 物 馆 音 乐 电 传 会 议 电 话 网 络 管 理 空 中 交 通 管 制 建 筑 设 计 室 内 设 计 地 形 地 图 数 学 物 理 化 学 生 物 考 古 天 文, 虚 拟 风 洞 试 验, 分 子 结 构 分 析 飞 行 模 拟 军 事 演 习 武 器 操 控 太 空 训 练 太 空 载 具 驾 驶 模 拟 机 械 人 辅 助 设 计 机 械 人 操 作 模 拟 远 程 操 控 电 脑 辅 助 设 计 电 脑 游 戏 虚 拟 现 实 技 术 应 用 于 产 品 设 计 中, 可 为 设 计 人 员 提 供 形 象 直 观 的 设 计 环 境, 提 高 设 计 人 员 的 设 计 效 率 和 质 量, 属 于 一 种 可 控 制 的 无 破 坏 性 的 耗 费 小 的 并 允 许 多 次 重 复 的 试 验 手 段, 能 降 低 风 险, 及 早 发 现 设 计 缺 陷 汽 车 飞 机 的 风 洞 试 验 是 汽 车 飞 机 设 计 的 关 键 环 节, 采 用 虚 拟 技 术 建 立 虚 拟 风 洞, 可 以 降 低 汽 车 飞 机 的 设 计 和 调 试 成 本, 缩 短 设 计 周 期 图 9 唱 8 和 图 9 唱 9 是 汽 车 的 风 洞 试 验 及 美 国 航 空 与 航 天 局 (NASA) 的 虚 拟 风 洞

260 计 算 机 图 形 学 相 关 的 研 究 领 域 第 9 章 247 图 9 唱 8 汽 车 风 洞 试 验 图 9 唱 9 美 国 NASA AMES 研 究 中 心 的 虚 拟 风 洞 概 述 9.5 逆 向 工 程 逆 向 工 程 (reverse engineering,re), 也 称 为 反 求 工 程 或 反 向 工 程, 是 一 个 相 对 概 念, 它 是 相 对 于 由 设 计 思 路 产 品 的 一 般 产 品 开 发 过 程 而 言 的 逆 向 工 程 是 由 已 有 产 品 回 溯 产 品 设 计 思 路 的 过 程 根 据 产 品 对 象 的 不 同, 逆 向 工 程 的 理 论 和 方 法 也 不 尽 相 同 在 软 件 行 业 中, 逆 向 工 程 是 指 利 用 反 汇 编 反 编 译 等 工 具 将 已 有 软 件 的 目 标 代 码 还 原 为 汇 编 代 码 ( 源 代 码 程 序 ), 其 过 程 与 一 般 由 高 级 语 言 源 代 码 汇 编 源 代 码 目 标 代 码 的 软 件 开 发 顺 序 正 好 相 反 在 制 造 领 域 中, 逆 向 工 程 是 在 没 有 设 计 图 纸 或 者 设 计 图 纸 不 完 整 以 及 没 有 CAD 模 型 的 情 况 下, 利 用 各 种 数 字 化 技 术 CG /CAD 技 术, 根 据 实 物 测 量 数 据 重 构 其 计 算 机 模 型, 运 用 现 代 设 计 理 论 方 法 对 模 型 进 行 再 设 计, 并 与 现 代 快 速 制 造 技 术 有 机 结 合, 最 终 制 造 出 产 品 的 过 程 如 图 9 唱 10 是 传 统 的 正 向 设 计 和 现 代 逆 向 设 计 过 程 的 比 较 逆 向 工 程 技 术 是 对 传 统 设 计 制 造 技 术 的 拓 宽 和 丰 富 制 造 领 域 的 逆 向 工 程 是 以 三 维 测 量 表 面 重 构 为 核 心, 集 光 电 测 量 计 算 机 图 像 / 图 形 处 理 计 算 机 辅 助 设 计 / 制 造 快 速 原 型 / 模 具 数 控 等 技 术 为 一 体 的 高 新 技 术, 是 现 代 产 品 设 计 与 开 发 的 先 进 手 段, 在 占 国 民 生 产 总 值 50% 以 上 的 制 造 业 中 具 有 重 要 的 作 用 20 世 纪 80 年 代 初 美 国 3M 公 司 UVP 公 司 以 及 日 本 名 古 屋 工 业 研 究 所 开 始 研 发 逆 向 工 程 技 术 和 设 备 目 前 美 国 英 国 德 国 日 本 以 色 列 法 国 意 大 利 韩 国 中 国 台 湾 等 国 家 和 地 区 已 有 商 品 化 的 逆 向 工 程 设 备 和 软 件 系 统 美 国 在 其 国 内 建 立 了 集 测 量 设 计 快 速 成 型 快 速 模 具 数 控 加 工 于 一 体 的 逆 向 工 程 系 统 应 用 中 心, 为 中 小 企 业 提 供 技 术 服 务,

261 计 算 机 图 形 学 248 图 9 唱 10 正 向 设 计 与 逆 向 设 计 工 程 系 统 图 有 效 地 提 高 了 中 小 企 业 的 竞 争 力, 促 进 了 生 产 力 的 发 展 逆 向 工 程 作 为 一 种 现 代 产 品 开 发 手 段, 能 够 大 幅 度 缩 短 产 品 的 开 发 周 期, 使 企 业 适 应 小 批 量 多 品 种 的 生 产 要 求, 在 激 烈 的 市 场 竞 争 中 占 据 抢 先 投 放 市 场 的 优 势 在 现 代 工 业 中, 从 航 空 航 天 汽 车 船 舶 到 家 电 服 装 和 玩 具 等 各 行 各 业, 逆 向 工 程 技 术 广 泛 应 用 于 复 杂 造 型 的 叶 片 壳 体 设 计 实 物 仿 形 服 装 加 工 模 特 制 造 医 学 诊 断 假 肢 制 造 机 器 人 视 觉 在 线 检 测 和 质 量 控 制 中 国 是 最 大 的 发 展 中 国 家, 消 化 吸 收 国 外 先 进 产 品 技 术 并 进 行 改 进 是 主 要 的 产 品 设 计 手 段, 逆 向 工 程 技 术 为 产 品 的 仿 制 和 改 进 提 供 了 方 便 快 捷 的 工 具, 在 国 家 科 技 部 的 支 持 与 倡 导 下 于 深 圳 武 汉 天 津 宁 波 西 北 建 立 了 5 个 RP&M 生 产 力 促 进 中 心, 各 级 地 方 政 府 及 一 些 企 业 高 校 科 研 院 所 也 成 立 了 同 样 的 服 务 机 构, 为 中 小 企 业 提 供 产 品 设 计 和 快 速 原 型 / 模 具 制 造 等 技 术 服 务, 对 缩 短 与 发 达 国 家 的 差 距 具 有 特 殊 的 意 义 逆 向 工 程 发 展 的 源 动 力 是 基 于 已 有 产 品 设 计 新 产 品, 从 而 达 到 缩 短 开 发 周 期 的 目 的 产 品 的 开 发 很 少 是 全 新 设 计, 借 鉴 已 有 产 品 是 快 捷 实 用 的 方 法, 也 是 很 早 就 产 生 的 自 然 想 法 制 造 业 逆 向 工 程 是 一 个 产 品 开 发 集 成 系 统, 其 核 心 是 三 维 形 状 的 数 字 化 和 表 面 重 构 随 着 计 算 机 及 计 算 机 科 学 的 诞 生 和 发 展, 文 字 声 音 二 维 图 像 相 继 实 现 了 数 字 化, 信 息 社 会 的 数 字 化 特 征 越 来 越 明 显, 三 维 形 状 数 字 化 能 够 在 计 算 机 中 更 客 观 更 自 然 地 表 达 三 维 实 体, 但 由 于 三 维 形 状 数 字 化 涉 及 的 相 关 技 术 难 度 较 大, 一 直 到 20 世 纪 90 年 代 快 速 测 量 三 维 打 印 快 速 成 型 等 技 术 和 设 备 日 渐 成 熟, 逆 向 工 程 作 为 三 维 形 状 数 字 化 产 业 的 一 部 分 才 初 步 形 成 逆 向 工 程 的 核 心 三 维 测 量 和 表 面 重 构 是 逆 向 工 程 技 术 的 核 心 测 量 设 备 是 逆 向 工 程 的 核 心 硬 件 按 测 量 方 式 分 类, 测 量 设 备 分 为 接 触 式 和 非 接 触 式 两 种 接 触 式 是 传 统 的 测 量 方 式, 测 量 过 程 中 探 头 与 模 型 表 面 接 触, 其 典 型 代 表 是 机 械 三 坐 标 测 量 仪 (CMM) 这 种 测 量 技 术 已 发 展 得 比 较 成 熟, 其 突 出 优 点 是 精 度 高 ( 可 达 ±0.5μm), 但 由 于 机 械 式 测 量 结 构 存 在 的 固

262 计 算 机 图 形 学 相 关 的 研 究 领 域 有 缺 陷, 难 以 实 现 快 速 测 量 随 着 机 器 视 觉 技 术 和 光 电 技 术 的 发 展, 非 接 触 式 的 光 电 测 量 技 术 发 展 迅 速, 这 种 测 量 方 法 测 量 速 度 快, 自 动 化 程 度 高, 常 见 的 方 法 有 激 光 三 角 测 量 法 莫 尔 条 纹 技 术 断 层 扫 描 技 术 等 设 备 有 三 维 激 光 数 字 化 仪 自 动 断 层 扫 描 仪 工 业 CT 和 MRI 等 表 9 唱 3 列 出 了 逆 向 工 程 中 常 用 的 测 量 方 法 的 原 理 及 特 点 表 9 唱 4 大 致 列 举 了 各 种 测 量 设 备 特 性 的 比 较 接 触 式 非 接 触 式 ( 光 学 测 量 超 声 波 测 量 和 电 磁 测 量 等 ) 表 9 唱 3 常 用 测 量 方 法 的 原 理 与 特 点 种 类 原 理 特 点 三 坐 标 测 量 机 (CMM) 层 析 法 基 于 光 学 三 角 形 原 理 的 激 光 扫 描 法 基 于 相 位 偏 移 测 量 原 理 的 莫 尔 条 纹 法 基 于 工 业 CT 断 层 扫 描 图 像 法 采 用 触 发 式 接 触 测 量 头, 一 次 采 样 只 能 获 取 一 个 点 的 三 维 坐 标 值 将 零 件 原 型 填 充 后, 采 用 逐 层 铣 削 和 逐 层 扫 描 相 结 合 的 方 法 获 取 原 型 不 同 位 置 截 面 的 内 外 轮 廓 数 据 根 据 光 学 三 角 形 测 量 原 理, 以 激 光 作 为 光 源, 其 结 构 模 式 可 以 分 为 点 线, 将 其 投 射 到 被 测 物 体 表 面, 采 用 CCD 接 收 反 射 光, 根 据 光 点 或 光 刀 成 像 的 偏 移, 通 过 被 测 物 体 基 平 面 像 点 像 距 等 之 间 的 关 系 计 算 物 体 的 深 度 信 息 将 光 栅 条 纹 投 射 到 被 测 物 体 表 面, 光 栅 条 纹 受 物 体 表 面 形 状 的 调 制, 其 条 纹 间 的 相 位 关 系 会 发 生 变 化, 数 字 图 像 处 理 的 方 法 解 析 出 光 栅 条 纹 图 像 的 相 位 变 化 量 来 获 取 被 测 物 体 表 面 的 三 维 信 息 对 被 测 物 体 进 行 断 层 截 面 扫 描, 以 X 射 线 的 衰 减 系 数 为 依 据, 经 处 理 重 建 断 层 截 面 图 像, 根 据 不 同 位 置 的 断 层 图 像 可 建 立 物 体 的 三 维 信 息 测 量 精 度 高, 可 达 微 米 级, 但 效 率 低, 对 一 些 软 质 表 面 无 法 进 行 测 量, 价 格 较 高 能 测 量 任 意 复 杂 零 件 的 内 外 轮 廓, 测 量 速 度 精 度 中 等, 价 格 中 等, 破 坏 被 测 件 测 量 速 度 较 快, 可 达 点 /s 以 上, 精 度 中 等, 价 格 低 倾 斜 度 大 的 面 棱 边 处 测 量 误 差 大, 反 光 特 性 不 合 适 的 材 料 表 面 需 喷 涂 基 于 投 影 面 获 取 数 据, 比 基 于 点 线 获 取 数 据 的 速 度 快, 一 般 测 量 精 度 达 几 十 微 米, 要 小 于 10μm, 光 栅 制 作 有 难 度 类 似 于 医 学 CT, 可 以 测 量 物 体 的 内 部 结 构 和 形 状, 属 无 损 测 量, 但 造 价 高, 目 前 实 用 设 备 的 精 度 约 为 0.1mm 第 9 章 249 表 9 唱 4 各 种 测 量 设 备 的 比 较 机 械 三 坐 标 测 量 仪 接 触 式 外 表 面 形 状 精 度 高 软 体 难 以 测 量 手 动 成 本 低, 自 动 成 本 高 MRI /CT 非 接 触 式 内 外 表 面 精 度 低 材 料 有 限 制 成 本 高 三 维 激 光 数 字 化 仪 非 接 触 式 外 表 面 形 状 精 度 高 材 料 不 限 成 本 中 等 层 析 数 字 化 测 量 机 破 坏 式 内 外 表 面 精 度 高 材 料 不 限 成 本 中 等

263 计 算 机 图 形 学 250 经 过 测 量, 物 体 表 面 形 状 离 散 为 数 据 点 集, 有 关 线 面 的 特 征 全 部 消 失, 由 离 散 数 据 点 重 构 物 体 的 CAD 模 型 需 经 过 离 散 点 网 格 化 特 征 提 取 表 面 分 片 曲 面 生 成 等 步 骤 网 格 化 是 为 了 建 立 离 散 点 之 间 的 拓 扑 关 系, 但 由 离 散 点 拼 合 物 体 表 面 网 格 时 存 在 多 义 性, 要 设 计 全 自 动 的 算 法 存 在 难 度, 由 设 计 人 员 根 据 被 测 实 物 进 行 交 互 拼 接 是 目 前 比 较 实 用 的 方 法 ; 有 了 物 体 表 面 的 网 格 模 型, 根 据 应 用 需 要, 选 用 合 适 的 曲 面 生 成 算 法 构 建 物 体 的 曲 面 模 型, 并 通 过 数 据 接 口 导 入 ProE UG 等 常 用 的 CAD 软 件 进 行 后 续 的 处 理 逆 向 工 程 的 应 用 1. 应 用 对 象 和 范 围 广 义 地 讲, 自 然 界 中 的 一 切 自 然 对 象 都 是 逆 向 工 程 的 应 用 对 象 人 类 利 用 一 切 手 段 研 究 揭 示 自 然 规 律 是 一 项 浩 大 的 逆 向 工 程 逆 向 工 程 方 法 和 思 想 在 产 品 设 计 中 早 有 应 用, 近 年 来 随 着 数 字 化 快 速 测 量 和 快 速 制 造 设 备 的 发 展, 逆 向 工 程 在 现 代 产 品 设 计 中 的 作 用 越 来 越 大 表 9 唱 5 大 致 列 举 了 逆 向 工 程 目 前 的 应 用 对 象 和 范 围 表 9 唱 5 逆 向 工 程 的 应 用 对 象 和 范 围 应 用 对 象 应 用 内 容 有 图 纸 委 托 加 工 的 模 具 或 产 品 原 型 用 测 量 数 据 和 数 据 处 理 软 件 检 测 模 具 或 产 品 原 型 人 工 对 象 无 图 纸 未 提 供 图 纸 的 外 部 引 进 产 品 以 往 产 品 图 纸 丢 失 手 工 制 作 原 型 修 复 损 坏 部 件, 基 于 外 部 产 品 进 行 仿 制 或 改 进 设 计 基 于 以 往 产 品 进 行 改 进 设 计 陶 瓷 玻 璃 器 皿 雕 塑 等 多 为 手 工 制 作 原 型, 通 过 测 量, 可 在 计 算 机 中 建 立 CAD 模 型, 进 行 批 量 生 产 ; 文 物 工 艺 品 珠 宝 的 复 制 和 修 复 人 体 服 装 / 鞋 帽 CAD 设 计 ; 人 造 肢 关 节 镶 牙 法 医 鉴 定 等 ; 用 于 医 学 研 究 的 人 体 模 型, 如 美 国 测 量 的 夏 娃 / 亚 当 构 建 地 貌 模 型, 用 于 建 筑 水 利 交 通 军 事 矿 藏 勘 探 自 然 对 象 天 然 无 图 纸 地 貌 化 石 古 代 生 物 的 外 形 恢 复 鱼 构 建 CAD 模 型, 研 究 其 规 律, 用 于 船 舰 的 设 计 仿 真 鸟 蜻 蜓 等 构 建 CAD 模 型, 研 究 其 规 律, 用 于 飞 行 物 的 设 计 仿 真 由 表 9 唱 5 中 可 以 看 出, 逆 向 工 程 分 原 形 复 制 ( copy ) 再 设 计 ( redesign ) 仿 真 (simulation) 3 个 应 用 层 次 复 制 和 再 设 计 都 基 于 原 型 的 形 状, 复 制 是 逆 向 工 程 应 用 的 原 始 境 界, 而 基 于 现 有 产 品 进 行 再 设 计 是 目 前 逆 向 工 程 在 产 品 设 计 中 的 主 要 应 用 服 装 CAD 人 造 肢 关 节 和 镶 牙 等 是 逆 向 工 程 在 自 然 对 象 中 的 应 用, 与 人 造 对 象 不 同, 自 然 物

264 计 算 机 图 形 学 相 关 的 研 究 领 域 天 生 没 有 图 纸 和 CAD 模 型, 将 自 然 物 表 达 于 计 算 机 有 两 类 应 用, 一 类 是 基 于 形 状 的, 如 服 装 / 鞋 帽 CAD 人 造 假 肢 等 ; 另 一 类 是 脱 离 形 状 的 仿 真 研 究, 如 将 鱼 和 鸟 表 达 于 计 算 机, 通 过 研 究 鱼 和 鸟 的 运 动 规 律, 可 以 为 船 舶 和 飞 机 的 设 计 提 供 帮 助, 这 一 类 的 应 用 是 逆 向 工 程 的 高 级 境 界, 也 可 以 说 是 最 高 境 界, 因 此 揭 示 自 然 世 界 的 规 律 并 利 用 自 然 规 律 为 人 类 服 务 是 一 项 浩 大 的 逆 向 工 程, 从 这 一 角 度 看, 逆 向 工 程 不 仅 是 一 种 现 代 产 品 开 发 的 手 段, 而 且 是 人 类 科 学 研 究 活 动 的 目 的 2. 逆 向 产 品 开 发 过 程 产 品 设 计 一 般 有 全 新 设 计 和 基 于 已 有 产 品 设 计 两 大 类 全 新 设 计 即 正 向 设 计, 是 由 设 计 思 路 产 品 的 过 程, 全 新 设 计 在 产 品 设 计 中 所 占 比 例 很 少 基 于 已 有 产 品 进 行 产 品 设 计 在 产 品 设 计 中 占 很 大 比 例, 设 计 师 在 进 行 产 品 设 计 时 都 或 多 或 少 地 借 鉴 了 原 型, 这 种 原 型 可 以 是 同 类 产 品, 也 可 以 是 自 然 对 象 即 使 在 全 新 设 计 过 程 中 也 存 在 利 用 原 型 的 做 法, 因 为 新 产 品 设 计 很 难 一 次 成 功, 设 计 师 会 根 据 初 步 设 计 的 原 型 反 复 修 改, 修 改 的 过 程 即 是 基 于 原 型 进 行 的 由 此 可 见, 研 究 基 于 已 有 产 品 进 行 产 品 设 计 的 方 法 和 技 术 具 有 重 要 的 意 义 近 年 来 随 着 数 字 化 测 量 和 制 造 设 备 的 发 展, 逆 向 产 品 开 发 能 够 越 来 越 来 多 地 利 用 原 型 中 的 数 据 和 特 征, 产 品 设 计 和 原 型 制 作 的 周 期 越 来 越 短, 在 降 低 设 计 成 本 的 同 时, 提 高 了 产 品 投 放 市 场 的 速 度, 适 应 时 新 多 变 的 市 场, 有 力 地 增 强 企 业 的 竞 争 力 3. 应 用 实 例 逆 向 产 品 开 发 过 程 包 括 测 量 表 面 重 构 再 设 计 产 品 原 型 / 模 具 制 造 等 主 要 步 骤 图 9 唱 11 中 风 扇 叶 片 的 数 据 是 激 光 线 扫 描 仪 测 量 的, 共 点 数 据 点 经 重 构 表 面, 通 过 标 准 CAD 数 据 接 口 将 测 量 的 数 据 点 云 和 重 构 表 面 输 入 到 UG 中, 在 UG 中 完 成 规 则 形 体 倒 角 加 强 筋 分 型 面 的 构 造, 最 后 生 成 风 扇 叶 片 的 实 体 CAD 模 型, 它 是 在 日 本 CMET 公 司 SoupⅡ 激 光 快 速 成 型 机 上 用 树 脂 制 作 的 原 型 图 9 唱 12 是 一 全 牙 列 石 膏 模 型 的 三 维 层 析 测 量 及 数 据 处 理 过 程 三 维 层 析 测 量 机 工 作 流 程 包 括 填 充 切 层 扫 描 提 取 轮 廓 重 构 等 操 作 采 用 铣 削 断 层 + 扫 描 的 方 法 与 医 学 CT 相 类 似, 层 析 方 法 的 最 大 特 点 是 可 以 测 量 任 意 复 杂 的 内 外 腔 形 状 图 9 唱 13 是 陶 瓷 娃 娃 的 测 量 数 据 点 云 图 与 真 实 感 图 图 9 唱 14 是 电 钻 枪 的 激 光 扫 描 测 量 数 据 和 处 理 结 果 设 计 是 制 造 业 的 灵 魂, 创 新 设 计 是 提 高 企 业 产 品 竞 争 力 的 主 要 手 段 将 逆 向 工 程 应 用 于 现 代 产 品 设 计, 能 使 产 品 开 发 周 期 平 均 缩 短 60%, 大 大 降 低 了 产 品 开 发 成 本 将 逆 向 工 程 与 已 有 的 计 算 机 辅 助 设 计 (CAD) 计 算 机 辅 助 工 艺 规 划 ( CAPP) 计 算 机 辅 助 制 造 (CAM) 以 及 产 品 数 据 管 理 ( PDM) 等 技 术 有 机 地 组 合 在 一 起, 能 够 有 效 地 提 高 产 品 设 计 与 制 造 水 平, 对 缩 小 发 展 中 国 家 与 发 达 国 家 之 间 的 差 距 具 有 重 要 的 意 义 第 9 章 251

265 计 算 机 图 形 学 252 图 9 唱 11 逆 向 产 品 开 发 实 例 图 9 唱 12 一 全 牙 列 石 膏 模 型 的 三 维 层 析 测 量 和 数 据 处 理 过 程

266 计 算 机 图 形 学 相 关 的 研 究 领 域 第 9 章 253 图 9 唱 13 陶 瓷 娃 娃 测 量 数 据 及 处 理 结 果 ( 总 点 数 ) 图 9 唱 14 电 钻 枪 的 测 量 数 据 和 处 理 结 果 ( 点 数 ) 习 题 9.1 分 析 动 画 仿 真 虚 拟 现 实 之 间 的 关 系 9.2 结 合 自 己 所 学 专 业, 叙 述 计 算 机 图 形 学 在 本 专 业 的 应 用

267 参 考 文 献 1 Donald Hearn, M Pauline Baker 著 畅 计 算 机 图 形 学 畅 北 京 : 清 华 大 学 出 版 社, 孙 家 广, 杨 长 贵 编 著 畅 计 算 机 图 形 学 畅 北 京 : 清 华 大 学 出 版 社, 唐 荣 锡 等 著 畅 计 算 机 图 形 学 教 程 ( 修 订 版 ) 畅 北 京 : 科 学 出 版 社, 唐 泽 圣 等 著 畅 计 算 机 图 形 学 基 础 畅 北 京 : 清 华 大 学 出 版 社, 彭 群 生, 鲍 虎 军, 金 小 刚 编 著 畅 计 算 机 真 实 感 图 形 的 算 法 基 础 畅 北 京 : 科 学 出 版 社, David F Rogers 著 畅 计 算 机 图 形 学 的 算 法 基 础 畅 石 教 英, 彭 群 生 等 译 畅 北 京 : 机 械 工 业 出 版 社, 向 世 明 编 著 畅 Visual C ++ 数 字 图 像 与 图 形 处 理 畅 北 京 : 电 子 工 业 出 版 社, 向 世 明 编 著 畅 OpenGL 编 程 与 实 例 畅 北 京 : 电 子 工 业 出 版 社, 侯 俊 杰 著 畅 深 入 浅 出 MFC( 第 二 版 ) 畅 武 汉 : 华 中 科 技 大 学 出 版 社, 詹 海 生, 李 广 鑫, 马 志 欣 编 著 畅 基 于 ACIS 的 几 何 造 型 技 术 与 系 统 开 发 畅 北 京 : 清 华 大 学 出 版 社, 朱 心 雄 等 著 畅 自 由 曲 线 曲 面 造 型 技 术 畅 北 京 : 科 学 出 版 社, 管 伟 光 编 著 畅 体 视 化 技 术 及 其 应 用 畅 北 京 : 电 子 工 业 出 版 社, 唐 泽 圣 等 著 畅 三 维 数 据 场 可 视 化 畅 北 京 : 清 华 大 学 出 版 社, 金 涛, 童 水 光 等 编 著 畅 逆 向 工 程 技 术 畅 北 京 : 机 械 工 业 出 版 社,2003

ebook50-11

ebook50-11 11 Wi n d o w s C A D 53 M F C 54 55 56 57 58 M F C 11.1 53 11-1 11-1 MFC M F C C D C Wi n d o w s Wi n d o w s 4 11 199 1. 1) W M _ PA I N T p W n d C W n d C D C * p D C = p W n d GetDC( ); 2) p W n

More information

CH01.indd

CH01.indd 3D ios Android Windows 10 App Apple icloud Google Wi-Fi 4G 1 ( 3D ) 2 3 4 5 CPU / / 2 6 App UNIX OS X Windows Linux (ios Android Windows 8/8.1/10 BlackBerry OS) 7 ( ZigBee UWB) (IEEE 802.11/a/b/g/n/ad/ac

More information

Microsoft Word - 扉页-1

Microsoft Word - 扉页-1 CAD/CAM 技 能 型 人 才 培 养 规 划 教 材 Mastercam X6 数 控 加 工 基 础 教 程 ( 第 2 版 ) 冯 启 廉 宋 秋 丽 张 延 王 丹 萍 编 著 北 京 内 容 简 介 本 书 是 Mastercam X6 的 入 门 教 程 全 书 共 分 8 章, 包 括 Mastercam X6 图 形 模 型 创 建 数 控 加 工 基 础 二 维 加 工 曲 面

More information

因 味 V 取 性 又 鸟 U 且 最 大 罗 海 惜 梅 理 春 并 贵 K a t h l ee n S c h w e r d t n er M f l e z S e b a s t i a n C A Fe rs e T 民 伊 ' 国 漳 尤 地 视 峰 州 至 周 期 甚 主 第 应

因 味 V 取 性 又 鸟 U 且 最 大 罗 海 惜 梅 理 春 并 贵 K a t h l ee n S c h w e r d t n er M f l e z S e b a s t i a n C A Fe rs e T 民 伊 ' 国 漳 尤 地 视 峰 州 至 周 期 甚 主 第 应 国 ' 东 极 也 直 前 增 东 道 台 商 才 R od e ric h P t ak 略 论 时 期 国 与 东 南 亚 的 窝 贸 易 * 冯 立 军 已 劳 痢 内 容 提 要 国 与 东 南 亚 的 窝 贸 易 始 于 元 代 代 大 规 模 开 展 的 功 效 被 广 为 颂 扬 了 国 国 内 市 场 窝 的 匮 乏 窝 补 虚 损 代 上 流 社 会 群 体 趋 之 若 鹜 食 窝

More information

该 奈 自 受 PZ 多 透 soc i e B t h y. y t is NA YL OR exp os ed t h a t b e i n g wh o res or sa in t es s e s we r e m ad e n b ot om. M ean wh i l e NA YL

该 奈 自 受 PZ 多 透 soc i e B t h y. y t is NA YL OR exp os ed t h a t b e i n g wh o res or sa in t es s e s we r e m ad e n b ot om. M ean wh i l e NA YL 探 性 通 性 圣 重 ' 颠 并 格 洛 丽 亚 奈 勒 小 说 贝 雷 的 咖 啡 馆 对 圣 经 女 性 的 重 写 郭 晓 霞 内 容 提 要 雷 的 咖 啡 馆 中 权 社 会 支 配 的 女 性 形 象 美 国 当 代 著 名 黑 人 女 作 家 格 洛 丽 亚 过 对 6 个 圣 经 女 性 故 事 的 重 写 奈 勒 在 其 小 说 贝 覆 了 圣 经 中 被 父 揭 示 了 传 统

More information

é SI 12g C = 6 12 = 1 H2( g) + O2( g) H2O( l) + 286kJ ( 1) 2 1 1 H 2( g) + O2( g) H2O( l) H = 286kJ mol ( 2) 2 1 N 2 ( g) + O2( g) NO 2 ( g) 34kJ 2 1 1 N 2 ( g) + O2( g) NO 2 ( g) H = + 34kJ mol 2 1 N

More information

Ps22Pdf

Ps22Pdf Q CIP / / / 2880 Q Q Q Q Q QQ Q Q Q Q Q ec A c c A c c c Q a A A A c e A c a c c ea c c a A c c c a A c c c a A / A c c c c f a c c f a c c f a c f e A c f c f / c A c c a c c A e A c c e A c c ea c c

More information

Ps22Pdf

Ps22Pdf ( ) 158,,,,,, ( CIP) /. :, 1996. 12 ISBN 7 302 02353 0... :. F275 CIP ( 96) 20860 : ( :, 100084) : : : 850 1168 1/ 32 : 13. 25 : 344 : 1996 12 1 1996 12 1 : ISBN 7 302 02353 0/ F 130 : 0001 5000 : 16.

More information

Persuasive Techniques (motorcycle helmet)

Persuasive Techniques  (motorcycle helmet) M O D E A T H E E L E M E N T S O F A N A R G U M E N T 1n t h l s t e s t i m o n y g iv e n b e f o r e t h e M a ry l a n d Se n a t e t h e s p e a ke r m a ke s a s t r o n g c l a i m a b o u t t

More information

,, ( ) ( ) ( ) 12, :,,,,,,,,,,,,,,,,, (CIP) /,. 2. :, ISBN :. TH CI P ( 2000 )44124 () ( ) : : :

,, ( ) ( ) ( ) 12, :,,,,,,,,,,,,,,,,, (CIP) /,. 2. :, ISBN :. TH CI P ( 2000 )44124 () ( ) : : : 2 1 () ,, ( ) ( ) ( ) 12, :,,,,,,,,,,,,,,,,, (CIP) /,. 2. :,2004 21 ISBN7-313 - 02392-8............ :. TH CI P ( 2000 )44124 () ( 877 200030 ) : 64071208 : :787mm1 092mm 1/ 16 : 24 :585 2000 11 1 2004

More information

,,,,,,,,, (CIP) : /,,. 2. :, 2004 ISBN G CIP (2003) ( ) : : : 880mm 1230mm 1/ 32 : 7.125

,,,,,,,,, (CIP) : /,,. 2. :, 2004 ISBN G CIP (2003) ( ) : : : 880mm 1230mm 1/ 32 : 7.125 / / / 2003 ,,,,,,,,, (CIP) : /,,. 2. :, 2004 ISBN 7-313-03506-3................ G647.38 CIP (2003) 087156 ( 877 200030 ) :64071208 : : 880mm 1230mm 1/ 32 : 7.125 :168 2003 10 1 2004 10 2 2004 10 2 :20

More information

(Microsoft Word - 92\246~\263\370)

(Microsoft Word - 92\246~\263\370) 壹 致 股 東 報 告 書 九 十 一 年 為 創 見 收 穫 頗 豐 之 年 度, 雖 產 業 環 境 仍 處 於 不 佳 狀 態, 但 在 創 見 公 司 全 體 同 仁 辛 勤 耕 耘 之 下, 我 們 仍 能 順 利 達 成 財 務 目 標 : 營 收 為 64.55 億 元, 較 九 十 年 度 47.16 億 元 大 幅 成 長 37% 稅 後 淨 利 10.82 億 元, 每 股 稅

More information

Ps22Pdf

Ps22Pdf 1 1 1 5 10 12 13 13 16 19 26 31 33 37 38 38 49 53 60 63 79 81 81 92 112 129 132 135 144 149 150 150 155 158 1 165 178 187 191 193 194 194 207 212 217 218 223 231 233 234 234 239 245 247 251 256 259 261

More information

AutoCAD2D2010TQC電腦輔助設計類檢定題庫解題秘笈_990901_.doc

AutoCAD2D2010TQC電腦輔助設計類檢定題庫解題秘笈_990901_.doc AutoCAD 2010 2D TQC ...I...VII... IX...1...2 1...3 1.1...3 1.2...3 1.3...4 1.4...6 1.5...7 1.6...8 1.6.1 Line...8 1.6.2 Circle...9 1.6.3 Arc...9 1.6.4 RECtangle... 10 1.6.5 POLygon... 10 1.6.6 explode...11

More information

目錄

目錄 ( ) 2001 3 / 2000 3 3 MASTECMatsushita technology MEMMatsushita Electric Motor CDMD MESAMatsushita Electric GDP 3 GENTEC Polytechnic college GE CNC CAD/CAM Unigraphics Solution UG -- GEGeneral Electric

More information

Visual C++ 1 Page no. 1

Visual C++ 1 Page no. 1 Visual C++ 1 Page no. 1 Visual C++ 2 Page no. 2 Visual C++ 3 Page no. 3 Visual C++ 4 Page no. 4 Visual C++ 5 Page no. 5 Visual C++ 6 Page no. 6 Visual C++ 7 Page no. 7 Visual C++ 8 Page no. 8 Visual C++

More information

MATHEMATICAL MODELING SPONSORED BY: SHUMO.COM COMPILED BY: Mathematical Modeling Editors Group HOMEPAGE:

MATHEMATICAL MODELING SPONSORED BY: SHUMO.COM COMPILED BY: Mathematical Modeling Editors Group  HOMEPAGE: MATHEMATICAL MODELING S H U M O SHUMO.COM 2004. 1 Vol. 1 No. 1 MATHEMATICAL MODELING SPONSORED BY: SHUMO.COM COMPILED BY: Mathematical Modeling Editors Group www.shumo.com HOMEPAGE: www.shumo.com [email protected]

More information

I 宋 出 认 V 司 秋 通 始 司 福 用 今 给 研 除 用 墓 本 发 共 柜 又 阙 杂 既 * *" * " 利 牙 激 I * 为 无 温 乃 炉 M S H I c c *c 传 统 国 古 代 建 筑 的 砺 灰 及 其 基 本 性 质 a 开 始 用 牡 壳 煅 烧 石 灰 南

I 宋 出 认 V 司 秋 通 始 司 福 用 今 给 研 除 用 墓 本 发 共 柜 又 阙 杂 既 * * *  利 牙 激 I * 为 无 温 乃 炉 M S H I c c *c 传 统 国 古 代 建 筑 的 砺 灰 及 其 基 本 性 质 a 开 始 用 牡 壳 煅 烧 石 灰 南 尽 对 古 证 K 避 不 B 要 尽 也 只 得 随 包 国 古 代 建 筑 的 砺 灰 及 其 基 本 性 质 传 统 国 古 代 建 筑 的 顿 灰 及 其 基 本 性 质 李 黎 张 俭 邵 明 申 提 要 灰 也 称 作 贝 壳 灰 蜊 灰 等 是 煅 烧 贝 壳 等 海 洋 生 物 得 的 氧 化 钙 为 主 要 成 分 的 材 料 灰 作 为 国 古 代 沿 海 地 区 常 用 的 建

More information

Microsoft Word - 最新正文.doc

Microsoft Word - 最新正文.doc 9 21 1.1.1 1.1.2 1 2 2 Windows 7+Office 2010 3 4 5 6 4 7 1.1.3 5 1.1.4 1 3 2 NII 1993 3 CNNIC 2014 1 16 33 1 2013 12 6.18 5358 45.8% 2012 3.7 2 2013 12 5 19.1% 2012 74.5% 81.0% 2013 3G 2013 12 2.47 2012

More information

untitled

untitled [email protected] http://idc.hust.edu.cn/~rxli/ 2 3 ( ) (Distributed System) Integrated System () 4 5 6 System Integration 7 8 Integrated System 9 1.1 CIMS IDEF CSCW STEP MIS MRPII ERP CRM SCM MIS:

More information

95 1 We b C T Easy Go2 e e-portfolio Bl o g 4. e m a i l Really Simply Sy n d i c a t i o n R S S 94 M S N 95 95 1. 5. Radio Fre q u e n c y Id e n t

95 1 We b C T Easy Go2 e e-portfolio Bl o g 4. e m a i l Really Simply Sy n d i c a t i o n R S S 94 M S N 95 95 1. 5. Radio Fre q u e n c y Id e n t 95 163 1 7 0 93 95 96 4 163 155 95.09% C N S1 3151 1 993 8 95 1 1 2 0 2 8 95 70 69 98.57% 62 62 100.00% 8 7 87.50% 93 86 92.47% 35 34 97.14% 42 37 88.10% 16 15 93.75% 163 155 95.09% 95 Web2.0 95 65 95

More information

! * # + + *! # $ # #. 1 #! % &)# * 1 *! * ! % # * # * # + + +!!!! # * % # # + # + * & $ *! * # + * # % #& % &* # & # * %! + * # #!

! * # + + *! # $ # #. 1 #! % &)# * 1 *! * ! % # * # * # + + +!!!! # * % # # + # + * & $ *! * # + * # % #& % &* # & # * %! + * # #! !!#$! # $ %! ##&&!)*+, -##. -&/01& -#!!!% $! $!#!!!$23.1! 4)5 %#&&& &.1 %!!!! %! &!!!!!!!! /!!!!!!!!!!!!!!! %.&!!! #&!!!!0&&&& #!!!!!!!!!!!!!!! %.& /&&&/.! 0.!!!!!!!!!!!!!!! %1& 6 /. 1!!!!!!!!!!!!!!! %&

More information

STELLA DEL MARE G =136 a d d3 4 RE m z mz mz SOL mz mz SImz mz V. Sozio a d d3 4 mz mz mz mz mz mz mz Chia - ro mata d d LA4 mz LA mz RE mz mz mz mz a

STELLA DEL MARE G =136 a d d3 4 RE m z mz mz SOL mz mz SImz mz V. Sozio a d d3 4 mz mz mz mz mz mz mz Chia - ro mata d d LA4 mz LA mz RE mz mz mz mz a STELLA DEL MARE G =136 3 4 RE m z SI V. Sozio 3 4 Chia - ro mata d d LA4 LA RE k kk s k k s k kz k s k kz k s k k j - ti - no che il so - le ba - ciò, nean-che u - na nu-vo-la in cie - lo, - ce è la brez

More information

五花八门宝典(一).doc

五花八门宝典(一).doc BBS...5... 11...23...26...31...46...49...54...55...57...59...62... 110... 114... 126... 132... 149 I "108" 1 2 3 4 BBS 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 M ( ) Kg S ( ) A ( ) K (

More information

Ch

Ch Ch 1 13 14 24 30 50 51 67 68 75 76 100 101 103 Macintosh Mac OS QuickTime Apple Computer Microsoft Windows Microsoft SD SD Card Association Adobe Acrobat Adobe Systems PictBridge i AC AC AC AC ii CD-ROMs

More information

996,,,,,,, 997 7, 40 ; 998 4,,, 6, 8, 3, 5, ( ),, 3,,, ;, ;,,,,,,,,,

996,,,,,,, 997 7, 40 ; 998 4,,, 6, 8, 3, 5, ( ),, 3,,, ;, ;,,,,,,,,, ,, AB,, ( CIP) /, 000 ( /, ) ISBN 704009448 F47 CIP ( 000) 86786 55 00009 0064054588 ht tp www hep edu cn ht tp www hep com cn 006404048 787960/ 6 05 370 000 730,, 996,,,,,,, 997 7, 40 ; 998 4,,, 6, 8,

More information

1 1 1.1 1 1.1.1 1 1.1.2 2 1.1.3 3 1.2 3 1.2.1 3 1.2.2 4 1.2.3 5 1.2.4 5 1.2.5 6 1.3 8 1.3.1 8 1.3.2 10 1.3.3 10 1.3.4 11 1.3.5 11 1.4 12 1.4.1 12 1.4.2 15 1.4.3 16 2 18 2.1 18 2.1.1 18 2.1.2 20 2.1.3 24

More information

《计算机应用基础》学习材料(讲义)

《计算机应用基础》学习材料(讲义) 计 算 机 应 用 基 础 学 习 材 料 ( 讲 义 ) Fundamentals of Computer Application 2014-3-22 JIANGSU OPEN UNIVERSITY 第 二 学 习 周 计 算 机 基 础 知 识 ( 一 ) 导 学 在 本 学 习 周, 我 们 主 要 的 任 务 是 认 识 计 算 机 你 将 知 道 计 算 机 是 什 么 时 候 产 生 的,

More information

:51 P"QR$ S TUVW" XY%! " () H P ZS[\I]^_ `agh" bc HQR ] P"S () b c! = "

:51   PQR$ S TUVW XY%!  () H P ZS[\I]^_ `agh bc HQR ] PS () b c! = 2013-12-03 09:51 http://www.cnki.net/kcms/detail/11.5370.d.20131203.0951.010.htm! P"QR$ S TUVW" XY%! " () H P ZS[\I]^_ `agh" bc HQR ] P"S () b c! = " # $ H Q R HQR=$ " Q R Z / Z " B Q R = $ 6 9HXY QR N%

More information

untitled

untitled 8086/8088 CIP /. 2004.8 ISBN 7-03-014239-X.... TP313 CIP 2004 086019 16 100717 http://www.sciencep.com * 2004 8 2004 8 1 5 500 787 1092 1/16 16 1/2 391 000 1 2 ii 1 2 CAI CAI 3 To the teacher To the student

More information

Ps22Pdf

Ps22Pdf 1 9 9 9 ( ) 063,, :,,,,,,,,,, ( CIP ) /. - :, 1999. 2 ISBN7 113 03209 5.... N 0 CIP ( 98) 198 : : : ( 100054, 8 ) : : : : 787 1092 1/ 16 : 11. 25 : 280 : 1999 3 1 1999 3 1 : 1 5000 : ISBN 7 113 03209 5/

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

1 2 9

1 2 9 8 1 2 9 3 4 10 11 5 6 12 13 7 14 8 9 bk bl bm 15 bn bo 16 bp bq br bs bt 17 ck cl cm cn 18 19 co cp 20 21 cq cr 22 23 cs ct 24 dk 25 dl 26 dm dn do dp dq 27 dr ds dt ek 28 el em 29 en eo ep eq er 30 es

More information

E170C2.PDF

E170C2.PDF IQ E170C2 2002.3. Rotork Rotork * ( ) * * RotorkIQ - IQ * * PC IQ Insight / Rotork * - Rotork IQ www.rotork.com 5 10 5.1 11 1 2 5.2 11 2 3 5.3 11 3 IQ 3 5.4 11 3.1 3 5.5 IQM12 3.2 3 5.6 IQML12 3.3 4 5.7

More information

New Doc 1

New Doc 1 U N I V E R SI T Y O F M A L ; 1ï i l i dvol 1 l 2 0 1 8 w 1a1 p&t«apa«ridia ti p E g s l am an Pt d1an h Ma @Mi u Ooam a1 ol am S1udl es} ]111 / 2 1 Dr Mo11an a Daw 11a mai amy 1 P r o f e s s o r D r

More information

<4D6963726F736F667420576F7264202D20C8CBC3F1D3CAB5E7B3F6B0E6C9E732303131C4EAC7EFBCBEBDCCB2C4C4BFC2BCA3A820B8DFD6B0B2BFB7D6A3A9>

<4D6963726F736F667420576F7264202D20C8CBC3F1D3CAB5E7B3F6B0E6C9E732303131C4EAC7EFBCBEBDCCB2C4C4BFC2BCA3A820B8DFD6B0B2BFB7D6A3A9> 二 教 材 目 录 教 学 资 源 栏 符 号 备 注 : 电 子 教 案 源 程 序, 网 络 课 程 授 课 素 材 习 题 答 案 模 拟 试 卷, 实 验 题 目 动 画 录 像 教 学 大 纲 多 媒 体 课 件 ( 一 ) 计 算 机 类 教 材 21 世 纪 高 等 职 业 教 育 信 息 技 术 类 规 划 教 材 计 算 机 软 件 1 978-7-115-23817-7 C# 程

More information

s p o r t o w e j n a w i e r z c h n i s y n t e t y c z n, e jp o l i u r e t a n o w e j z o o n e j z n a s t p u j c e j k o n s t r u k c j i a

s p o r t o w e j n a w i e r z c h n i s y n t e t y c z n, e jp o l i u r e t a n o w e j z o o n e j z n a s t p u j c e j k o n s t r u k c j i a G d y n i a B u d o w a b o i s k a w i e l o f u n k c y j n e g o o n a w i e r z c h n i p o l i u r e t a n o w e j p r z y Z e s p o l e S z k H o t e l a r s k o- G a s t r o n o m i c z n y c h

More information

! "! #!$$%!$$% &!!$$( # ) (

! ! #!$$%!$$% &!!$$( # ) ( ! " "!! " "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " #$$% #$$%!!% % & %!$ ( # ) #$$% *!!% ! "! #!$$%!$$% &!!$$( # ) ( " #$ %&!#& ( )*+,* -) " " "./012 )*+ 302 4056 7+1.6 0 3*8(*/.0-96 :*+/26) -+. 80;6

More information

:13: 年第 1 期!"#$%&' ]= F7 P 4, K, T T F W J NJ K Y2 CW C S = S U 7

:13: 年第 1 期!#$%&' ]= F7 P 4, K, T T F W J NJ K Y2 CW C S = S U 7 2017-12-21 16:13:44 http://kns.cnki.net/kcms/detail/32.1317.f.20171221.1609.020.html 2018 年第 1 期!"#$%&' ]= F7 P 4, K,T T F WJ NJ KY2 CW C S = S U 78 C K G C 78 WK Sb; \ 7*" ()*KK7878 F +,-./ 01 0/ *+./.QR

More information

ebook37-4

ebook37-4 4 4.1 H T M L F r o n t P a g e i m a g e m a p H T M L We b We b 4.1.1 We b We b We b We b 4.1.2 We b 4 35 4.1.3 4-1 G I F 4-2 36 4-1 ( 4-2 ) 4.1.4 We b We b 4-3 4-3 4 37 Ly n x 4-4 4-4 4.1.5 We b We

More information

c_R9000PRO_101

c_R9000PRO_101 Chapter 2 GIGA-BYTE TECHNOLOGY CO., LTD. ("GBT") GBT GBT GBT 2002 9 3-1 - 1.... 3 1.1.... 3 1.2. GV-R9000 PRO... 3 2.... 4 2.1.... 4 2.2.... 5 2.3.... 6 3.... 8 3.1. Windows 98/98SE Windows ME Windows

More information

R F I D R F I D C E P S R F I D 96 R F I D Metalib & SFX M U S E Sm a rt we a ve r

R F I D R F I D C E P S R F I D 96 R F I D Metalib & SFX M U S E Sm a rt we a ve r R F I D 96 50 R F I D C E P S R F I D 96 R F I D Metalib & SFX M U S E Sm a rt we a ve r 96 96 143 Metalib & SFX 96 R E A L 6 200 50 60 96 2007 Wi k i 96 1 2 3,524,345 Se a rch Box Ya h o o 96 3 Di re

More information

GV-R7500L Win 98/ 98SE, WinME Win XP Direct X Windows NT WINDO

GV-R7500L Win 98/ 98SE, WinME Win XP Direct X Windows NT WINDO Chapter 2 GIGA-BYTE TECHNOLOGY CO, LTD (GBT ) GBT GBT, GBT 2002 10 31-1 - 1 11 3 12 GV-R7500L 3 2 21 4 22 5 23 6 3 31 Win 98/ 98SE, WinME Win XP 8 311 8 312 Direct X 9 313 11 314 15 315 15 316 22 32 Windows

More information

GIGA-BYTE TECHNOLOGY CO., LTD. ( GBT ) GBT GBT, GBT

GIGA-BYTE TECHNOLOGY CO., LTD. ( GBT ) GBT GBT, GBT GIGA-BYTE TECHNOLOGY CO., LTD. (GBT ) GBT GBT, GBT 2003 7 9 1. 1.1.... 3 1.2.... 3 2. 2.1.... 4 2.2.... 5 2.3.... 6 3. 3.1. Win98/98SE or WinME,Win2000Win XP... 8 3.1.1... 8 3.1.2 Direct X... 9 3.1.3...

More information

00 sirius 3R SIRIUS 3R 3RV1 0A 1 3RT1 3RH1 3 3RU11/3RB SIRIUS SIRIUS TC= / 3RV1 A 1 IEC6097- IP0 ( IP00) 1/3 IEC6097- (VDE0660) DIN VDE 06 0 AC690V, I cu 00V 1) P A n I n I cu A kw A A ka S00 0.16 0.0

More information

2,,,,,,,,,, 659 ( ) 20, 1590 ( ) ( 1578 ) 52, 16 60, 1892 ; ; ; ; ; 1. 1 1100, 16,, 731 1607,, :, 1925, 1932, 1937,,,,,,,,,,,,, ; ;, 60,,,,,,,,,,,, (

2,,,,,,,,,, 659 ( ) 20, 1590 ( ) ( 1578 ) 52, 16 60, 1892 ; ; ; ; ; 1. 1 1100, 16,, 731 1607,, :, 1925, 1932, 1937,,,,,,,,,,,,, ; ;, 60,,,,,,,,,,,, ( 1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ( 475-221 ),, ( 206-8 ),,,,, ( 618-907 ),,, ( ) ( ),,,,,,, ( ),, 780, 3 10, 2,,,,,,,,,, 659 ( ) 20, 1590 ( ) ( 1578 ) 52, 16 60, 1892 ; ; ; ; ; 1. 1 1100, 16,, 731 1607,,

More information

第 3 章 数 据 在 计 算 机 中 的 表 示 43 在 进 位 计 数 制 中 有 数 码 数 位 ( 位 置 ) 基 数 和 位 权 等 用 语 数 码 是 在 一 个 计 数 制 中 用 来 表 示 数 值 的 符 号 ; 数 位 是 指 数 码 在 一 个 数 中 所 处 的 位 置 ;

第 3 章 数 据 在 计 算 机 中 的 表 示 43 在 进 位 计 数 制 中 有 数 码 数 位 ( 位 置 ) 基 数 和 位 权 等 用 语 数 码 是 在 一 个 计 数 制 中 用 来 表 示 数 值 的 符 号 ; 数 位 是 指 数 码 在 一 个 数 中 所 处 的 位 置 ; 第 3 章 数 据 在 计 算 机 中 的 表 示 3.1 数 据 与 数 制 计 算 机 中 使 用 的 数 据 一 般 可 以 分 为 两 大 类 : 数 值 数 据 和 字 符 数 据 数 值 数 据 常 用 于 表 示 数 的 大 小 与 正 负 ; 字 符 数 据 则 用 于 表 示 非 数 值 的 信 息, 例 如 : 英 文 汉 字 图 形 和 语 音 等 数 据 数 据 在 计 算

More information

ο HOH 104 31 O H 0.9568 A 1 1 109 28 1.01A ο Q C D t z = ρ z 1 1 z t D z z z t Qz = 1 2 z D z 2 2 Cl HCO SO CO 3 4 3 3 4 HCO SO 2 3 65 2 1 F0. 005H SiO0. 032M 0. 38 T4 9 ( K + Na) Ca 6 0 2 7 27 1-9

More information

Chapter 2 GIGA-BYTE TECHNOLOGY CO., LTD. ("GBT") GBT GBT GBT

Chapter 2 GIGA-BYTE TECHNOLOGY CO., LTD. (GBT) GBT GBT GBT Chapter 2 GIGA-BYTE TECHNOLOGY CO., LTD. ("GBT") GBT GBT GBT 2003 6 5-1 - 1....3 1.1....3 1.2. Radeon 9200...3 2....4 2.1....4 2.2....5 2.3....7 3....9 3.1. Windows 98/98SE Windows ME Windows XP...9 3.1.1....

More information

Ps22Pdf

Ps22Pdf , :, : : : : * : : 174 ( A ) : 400030 : ( 023) 65102378 65105781 : ( 023) 65103686 65105565 : http: / /www. cqup. com. cn : fxk@ cqup. com. cn ( ) * : 7871092 1 /16 : 16. 75 : 418 1994 7 1 2003 8 8 : ISBN

More information

同 y b 心 y 又 它 的 结 果 的 原 对 隐 永 除 我 y * 如 本 约 W 都 记 总 没 导 前 沿 科 学 季 刊 0 5 4 第 第 6 期 的 桥 梁 存 了 ; 若 保 留 U 无 分 的 第 二 类 换 元 法 怎 么 处 理 的 法 写 作 商 Le n z 形 式 的

同 y b 心 y 又 它 的 结 果 的 原 对 隐 永 除 我 y * 如 本 约 W 都 记 总 没 导 前 沿 科 学 季 刊 0 5 4 第 第 6 期 的 桥 梁 存 了 ; 若 保 留 U 无 分 的 第 二 类 换 元 法 怎 么 处 理 的 法 写 作 商 Le n z 形 式 的 人 对 应 n G 将 给 说 笔 接 人 n 或 建 相 后 中 前 沿 科 学 季 刊 0 5 4 第 9 卷 总 第 6 期 浅 谈 行 分 原 理 的 错 误 丁 小 平 引 寺 浙 江 6 55 00 摘 要 l N e w t o n 和 G 丄 b e n z 各 自 的 分 原 理 难 自 圆 说 的 立 了 行 分 原 理 行 分 原 理 关 键 词 中 图 分 类 号 分 原 理

More information

GIGA-BYTE TECHNOLOGY CO., LTD. ("GBT") GBT GBT GBT

GIGA-BYTE TECHNOLOGY CO., LTD. (GBT) GBT GBT GBT GIGA-BYTE TECHNOLOGY CO., LTD. ("GBT") GBT GBT GBT 2003 11 6-1 - 1....3 1.1.... 3 1.2.... 3 2....4 2.1.... 4 2.2.... 5 2.3.... 6 3....8 3.1. Win XP... 8 3.1.1....8 3.1.2. DirectX...9 3.1.3.... 11 3.1.4....15

More information

1 2 m v e 2 ö e m e m e m e m e e m m 1 1840 e m e m 2 v r Å Å Å 9999 10000 2 n λ = b( 2 2 ) n 2 Å 1 1854 1919 λ 1 1 1 2 2 λ = R ( Z H n ) 1 1 1 2 2 λ R H ( ) n f ni Z Z E ν = h mvr = n h 2π mvr = nh

More information

試料分解と目的元素精製法_2010日本分析化学会

試料分解と目的元素精製法_2010日本分析化学会 H2007T(10:3011:00) ICPAES,ICPMS 22416 http://www.caa.go.jp/safety/pdf/100419kouhyou_1.pdf http://www.caa.go.jp/safety/pdf/100419kouhyou_1.pdf 2010-07-28 Cd0.4 ppm232 * CODEX STAN 193-1995, Rev.3-2007 Web

More information

( CIP).:,3.7 ISBN TB CIP (3) ( ) ISBN O78 : 3.

( CIP).:,3.7 ISBN TB CIP (3) ( ) ISBN O78 : 3. ( CIP).:,3.7 ISBN 7 568 383 3.......... TB CIP (3) 334 3 37 ( ) 64536 www.hdlgpress.com.c 7879 6 9.75 479 3 7 3 7 45 ISBN 7 568 383 3O78 : 3. 995,.,.,.,. :,,,,.. :,,,,,,.,,,,.,,. ,,.,,,.,,,.,,,,.,.,,,

More information

<4D6963726F736F667420576F7264202D20BFAAB7C5CABDB6E0D1F9BBAFD7A8D2B5C5E0D1F8C4A3CABDD3EBCFD6B4FABBFAD0B5C9E8BCC6B4B4D0C2C8CBB2C5B5C4D1D0CCD65FB8C45F2E646F63>

<4D6963726F736F667420576F7264202D20BFAAB7C5CABDB6E0D1F9BBAFD7A8D2B5C5E0D1F8C4A3CABDD3EBCFD6B4FABBFAD0B5C9E8BCC6B4B4D0C2C8CBB2C5B5C4D1D0CCD65FB8C45F2E646F63> 开 放 式 多 样 化 专 业 培 养 模 式 与 现 代 机 械 设 计 创 新 人 才 的 研 讨 哈 尔 滨 理 工 大 学 段 铁 群 隋 秀 凛 宋 微 摘 要 按 着 高 等 学 校 基 础 性 与 专 业 性 并 重 的 培 养 思 想, 建 立 了 具 有 一 定 柔 性 的 开 放 式 多 样 化 机 械 类 专 业 创 新 人 才 的 培 养 方 案 和 现 代 机 械 设 计

More information

Undangan Finalis

Undangan Finalis & 1 P E M E R I N T A H P R O V I N S I J A W A T E N G A H D 1N A S p E N D I D 1K A N Jl Pe A1d N o 134 Se r r c l p 35 1530 1 F x (024) 352 00 7 ] Se r A u s t u s 20 15 No o r : o o s Ke / 0 5 \ 2

More information

Chapter 2 GIGA-BYTE TECHNOLOGY CO., LTD. ("GBT") GBT GBT GBT

Chapter 2 GIGA-BYTE TECHNOLOGY CO., LTD. (GBT) GBT GBT GBT Chapter 2 GIGA-BYTE TECHNOLOGY CO., LTD. ("GBT") GBT GBT GBT 2003 6 24-1 - 1....3 1.1.... 3 1.2.... 3 2....4 2.1.... 4 2.2.... 5 2.3.... 6 3....8 3.1. Windows 98/98SE Windows ME Windows XP 8 3.1.1....8

More information

-2 4 - cr 5 - 15 3 5 ph 6.5-8.5 () 450 mg/l 0.3 mg/l 0.1 mg/l 1.0 mg/l 1.0 mg/l () 0.002 mg/l 0.3 mg/l 250 mg/l 250 mg/l 1000 mg/l 1.0 mg/l 0.05 mg/l 0.05 mg/l 0.01 mg/l 0.001 mg/l 0.01 mg/l () 0.05 mg/l

More information

Chapter 2 GIGA-BYTE TECHNOLOGY CO., LTD. ("GBT") GBT GBT GBT

Chapter 2 GIGA-BYTE TECHNOLOGY CO., LTD. (GBT) GBT GBT GBT Chapter 2 GIGA-BYTE TECHNOLOGY CO., LTD. ("GBT") GBT GBT GBT 2003 6 13-1 - 1.... 3 1.1....3 1.2. GV-R98P256D...3 2.... 4 2.1....4 2.2....5 2.3....6 3.... 8 3.1. Windows 98/98SEWindows MEWindows XP...8

More information

MergerPdf.dll

MergerPdf.dll L """" """ " """ """"""'" " " - """"" """ " " - """ @ AedKU """" - P r e@le """"" """""""""""""""""""""""" "" " " """" """"""""" :- - k @@@ @@ ; ' " te- l Ctfd " ' "" " " " " @ee he U Ve e ed uu@ b " Q

More information

untitled

untitled OVEM zh 8068021 1702e [8068028] OVEM-DE : : : 1. / 2 Festo OVEM 1702e 1... 5 1.1... 5 1.2... 6 2... 7 2.1... 7 2.2... 7 2.3... 8 3... 9 3.1... 9 3.2... 10 3.3... 11 3.4... 13 3.5... 14 3.6... 14 3.7...

More information

BackCover

BackCover CA-310 AC AC SIP/SOP IEC IEC 60950 IEC 61010-1 IEC 61010-1 CA AC 100 120V 200 240V AC CA AC AC AC AC AC AC AC AC AC AC AC AC CA AC AC CA AC AC AC 1 CA-310LED LED AC 100-120V 200-240V AC ±10% 2 2000 10

More information

pdf

pdf SMART INVERTER, SMART CHOICE www.siemens.com.cn/v20 0.12 kw ~ 15 kw USS MODBUS RTU 7.5 kw ~ 15 kw PCB V/fV 2 /f 0.12 kw ~ 15 kw 1AC 200 V... 240 V ( -10 % / +10 % ) 3AC 380 V... 480 V ( -15 % / +10 % )

More information

6CO2 6H 2O C6H 2O6 6O2 = = n i= P X i n H X - P X logp X i= i n X X X P i P 0 i l n i n n P i= i H X = - p log P n i= i i i + H X - P X logp X dx - 2 2 2 2 3 2 4 2 d( Q) d( Q) > 0 = 0 di di d(

More information

例 009 年高考 全国卷Ⅱ 理 8 如 图 直 三 棱 柱 ABC ABC 中 AB AC D E 分 别为 AA BC 的中点 DE 平面 BCC 证明 AB AC 设二面角 A BD C 为 0o 求 BC 与平面 BCD 所 成角的大小 图 - 略 证明 以 D 为坐标原点 DA DC DD

例 009 年高考 全国卷Ⅱ 理 8 如 图 直 三 棱 柱 ABC ABC 中 AB AC D E 分 别为 AA BC 的中点 DE 平面 BCC 证明 AB AC 设二面角 A BD C 为 0o 求 BC 与平面 BCD 所 成角的大小 图 - 略 证明 以 D 为坐标原点 DA DC DD Education Science 教育科学 平面法向量在解立体几何题中的应用探究 梁毅麟 恩平市华侨中学 广东江门 59400 摘 要 几何发展的根本出路是代数化 引入向量研究是几何代数化的需要 随着平面法向量这个概念在新教 材的引入 应用平面法向量解决立体几何中空间线面位置关系的证明 空间角和距离的求解等高考热点问题的方法 更具灵活性和可操作性 其主要特点是用代数方法解决几何问题 无需考虑如何添加辅助线

More information

经华名家讲堂

经华名家讲堂 5.1 5.1.1 5.1.2 5.2 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.3 5.3.1 5.3.2 5.3.3 / 5.3.4 / 5.3.5 / 5.4 Internet 5.4.1 Internet 5.4.2 Intranet 1. 2. 1 31 5 5.1 5.1.1 Internet 1 Host 20 60 IBM 2000 2 20 60 20 60

More information

MICROMASTER 410/420/430/440 DA kW 250kW MICROMASTER Eco & MIDIMASTER Eco MICROMASTER, MICROMASTER Vector DA64 MIDIMASTER Vector 90kW (Low

MICROMASTER 410/420/430/440 DA kW 250kW MICROMASTER Eco & MIDIMASTER Eco MICROMASTER, MICROMASTER Vector DA64 MIDIMASTER Vector 90kW (Low DA51.2 2002 micromaster MICROMASTER 410/420/430/440 0.12kW 250kW s MICROMASTER 410/420/430/440 DA51.2 2002 0.12kW 250kW MICROMASTER Eco & MIDIMASTER Eco MICROMASTER, MICROMASTER Vector DA64 MIDIMASTER

More information

: (),,, (CIP) /. :, 2002.11 21 ISBN 7-5045 - 3715-2... - - - : - - - : -. TU767 CIP (2002)090133 ( 1 : 100029) : * 787 1092 16 23.5 583 2003 2 1 2003

: (),,, (CIP) /. :, 2002.11 21 ISBN 7-5045 - 3715-2... - - - : - - - : -. TU767 CIP (2002)090133 ( 1 : 100029) : * 787 1092 16 23.5 583 2003 2 1 2003 : (),,, (CIP) /. :, 2002.11 21 ISBN 7-5045 - 3715-2... - - - : - - - : -. TU767 CIP (2002)090133 ( 1 : 100029) : * 787 1092 16 23.5 583 2003 2 1 2003 2 1 : : 38.00 : 64929211 : 64911190 : http : / / www.

More information

Microsoft Word - fm.doc

Microsoft Word - fm.doc 多 媒 体 技 术 毕 业 设 计 指 导 与 案 例 分 析 贺 雪 景 杨 平 高 幼 年 编 著 清 华 大 学 出 版 社 北 京 内 容 简 介 本 书 通 过 六 个 案 例 介 绍 了 多 媒 体 专 业 毕 业 设 计 项 目 的 开 发, 包 括 使 用 Authorware 开 发 的 模 拟 型 课 件, 使 用 FrontPage2003 和 ASP 开 发 的 网 络 类

More information

untitled

untitled [] [] [] 15.1 1 2 Cu 2+ 2e=Cu Zn 2+ 2e=Zn 2H + 2eH 2 Cu2e=Cu 2+ Ni2e=Ni 2+ 2OH 2e=H 2 O 1/2O 2 2Cl 2e=Cl 2 1 1. 2. 15.2 z+ ze l H 3 O + e 2 1 H 2 O 2a H 2 O e 2 1 OH 2b O 2 2H 2 O 4e4OH 3 z+ ze 4 z+ (zh)e

More information

声 明 本 公 司 及 全 体 董 事 监 事 高 级 管 理 人 员 承 诺 不 存 在 任 何 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏, 并 对 其 真 实 性 准 确 性 完 整 性 承 担 个 别 和 连 带 的 法 律 责 任 本 公 司 负 责 人 和 主 管 会 计 工

声 明 本 公 司 及 全 体 董 事 监 事 高 级 管 理 人 员 承 诺 不 存 在 任 何 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏, 并 对 其 真 实 性 准 确 性 完 整 性 承 担 个 别 和 连 带 的 法 律 责 任 本 公 司 负 责 人 和 主 管 会 计 工 Shenzhen WitSoft Information Technology Co., Ltd. 主 办 券 商 二 〇 一 六 年 二 月 声 明 本 公 司 及 全 体 董 事 监 事 高 级 管 理 人 员 承 诺 不 存 在 任 何 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏, 并 对 其 真 实 性 准 确 性 完 整 性 承 担 个 别 和 连 带 的 法 律 责 任 本

More information

untitled

untitled 01 Creo 1.1 1.2 1.3 Creo Parametric 1.4 1.5 Creo Parametric 1.6 Creo Parametric 1.7 1.8 1.9 1.10 CREO Parametric Creo(PTC) Pro/ENGINEER CoCreate ProductView Pro/ENGINEER Pro/ENGINEER 1989 3D CAD/CAM Pro/ENGINEER

More information

MICROMASTER 410/420/440 DA kW 200kW MICROMASTER Eco & MIDIMASTER Eco MICROMASTER, MICROMASTER Vector DA64 MIDIMASTER Vector 90kW (Low-Vol

MICROMASTER 410/420/440 DA kW 200kW MICROMASTER Eco & MIDIMASTER Eco MICROMASTER, MICROMASTER Vector DA64 MIDIMASTER Vector 90kW (Low-Vol s MICROMASTER 410/420/440 0.12kW 200kW DA51.2 2002 MICROMASTER 410/420/440 DA51.2 2002 0.12kW 200kW MICROMASTER Eco & MIDIMASTER Eco MICROMASTER, MICROMASTER Vector DA64 MIDIMASTER Vector 90kW (Low-Voltage

More information

BB.3

BB.3 I IURNA L S AN S ï EK VOA ó N m 8 ç 6-8 1 园 叫团团回国 J m l ll m i h M t m t ik i E v l i P g l l A i r L i m b h - T k l ik d i K t T m g i d T r p tc P g r h P r r m P r S t d i T g r T r h d p p r b h K

More information

高二立體幾何

高二立體幾何 008 / 009 學 年 教 學 設 計 獎 勵 計 劃 高 二 立 體 幾 何 參 選 編 號 :C00 學 科 名 稱 : 適 用 程 度 : 高 二 簡 介 一 本 教 學 設 計 的 目 的 高 中 立 體 幾 何 的 學 習 是 學 生 較 難 理 解 而 又 非 常 重 要 的 一 個 部 分, 也 是 高 中 教 學 中 較 難 講 授 的 一 個 部 分. 像 國 內 的 聯 校

More information

audiogram3 Owners Manual

audiogram3 Owners Manual USB AUDIO INTERFACE ZH 2 AUDIOGRAM 3 ( ) * Yamaha USB Yamaha USB ( ) ( ) USB Yamaha (5)-10 1/2 AUDIOGRAM 3 3 MIC / INST (XLR ) (IEC60268 ): 1 2 (+) 3 (-) 2 1 3 Yamaha USB Yamaha Yamaha Steinberg Media

More information

標準 BIG 中文字型碼表 A 0 9 B C D E F 一 乙 丁 七 乃 九 了 二 人 儿 入 八 几 刀 刁 力 匕 十 卜 又 三 下 丈 上 丫 丸 凡 久 么 也 乞 于 亡 兀 刃 勺 千 叉 口 土 士 夕 大 女 子 孑 孓 寸 小 尢 尸 山 川 工 己 已 巳 巾 干 廾

標準 BIG 中文字型碼表 A 0 9 B C D E F 一 乙 丁 七 乃 九 了 二 人 儿 入 八 几 刀 刁 力 匕 十 卜 又 三 下 丈 上 丫 丸 凡 久 么 也 乞 于 亡 兀 刃 勺 千 叉 口 土 士 夕 大 女 子 孑 孓 寸 小 尢 尸 山 川 工 己 已 巳 巾 干 廾 標準 BIG 中文字型碼表 A 0 9 B C D E F B C D ± E F A 0 9 B C D E F 兙 兛 兞 兝 兡 兣 嗧 瓩 糎 0 B 9 Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ C Ⅷ Ⅸ Ⅹ 〡 〢 〣 〤 〥 〦 〧 〨 〩 十 卄 卅 D B C D E F G H I J K L M N O P Q E R S T U V W X Y Z a b c d e f g F h i

More information

基 礎 化 學 ( 一 ) 講 義 目 次 第 1 章 物 質 的 組 成 1 1 物 質 的 分 類 1 1 2 原 子 與 分 子 16 1 3 原 子 量 與 分 子 量 31 1 4 溶 液 48 實 驗 二 硝 酸 鉀 的 溶 解 與 結 晶 74 國 戰 大 考 試 題 78 實 驗 相

基 礎 化 學 ( 一 ) 講 義 目 次 第 1 章 物 質 的 組 成 1 1 物 質 的 分 類 1 1 2 原 子 與 分 子 16 1 3 原 子 量 與 分 子 量 31 1 4 溶 液 48 實 驗 二 硝 酸 鉀 的 溶 解 與 結 晶 74 國 戰 大 考 試 題 78 實 驗 相 內 容 由 蔡 明 倫 老 師 和 李 雅 婷 老 師 編 纂 基 礎 化 學 ( 一 ) 講 義 第 1 章 物 質 的 組 成 班 級 : 拉 瓦 節 和 其 使 用 的 實 驗 儀 器 座 號 : 姓 名 : 基 礎 化 學 ( 一 ) 講 義 目 次 第 1 章 物 質 的 組 成 1 1 物 質 的 分 類 1 1 2 原 子 與 分 子 16 1 3 原 子 量 與 分 子 量 31 1

More information

Ps22Pdf

Ps22Pdf ,, 19,, 1834,,,,, :,,,, , 1862, 1879 20 20,,,,??,,,,,,,,,,,, , ( ),,,,,,,, ( ),,,,,,,, 9 : (1 ) :,,,, , 91 95% (2 ) : ( ) - - -,, (3 ) : PN,, (4 ) : (5 ) : (6 ) : (7 ) (8 ) (9 ),,, :,,,,,,,, ;,, ,,,,,

More information

Ps22Pdf

Ps22Pdf ,, (CIP) /.:, 2006 ISBN 7-5629-2480-5... -. U415.6 CIP (2006) 160794 : ( 122 :430070 ) http: ww w.t ech book.com.cn E-mail: w u [email protected] : : :7871092 1/ 16 :12.25 :302 :2006 12 1 :2006 12 1 :12000

More information

:,,,, ( CIP ) /,. :, ISBN CIP ( 2001) : : 127, : : : ht t p: / / www. nwpup. com : :

:,,,, ( CIP ) /,. :, ISBN CIP ( 2001) : : 127, : : : ht t p: / / www. nwpup. com : : :,,,, ( CIP ) /,. :, 2001. 8 ISBN 7 5612 1363 8............. 0342 CIP ( 2001) 027392 : : 127, : 710072 : 029-8493844 : ht t p: / / www. nwpup. com : : 787mm1 092mm : 19. 75 : 480 : 2001 8 1 2001 8 1 :

More information