⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 专业tc--图形篇5.htm

📁 图形学的一些基础知识
💻 HTM
📖 第 1 页 / 共 3 页
字号:
DOT。nWidth表示笔宽(采用逻辑单位),rgbColor表示笔的颜色,如果函数执行成功,则返回值标识一支逻辑笔,否则返回值为NULL。<BR>另外还有一种方法来建立逻辑笔:<BR>typedef 
struct tagLOGPEN { kk1}<BR>POINT lopnWidth;&nbsp;<BR>COLORREF 
lopnColor;<BR>}LOGPEN;<BR>以上是Windows. 
h中对LOGPEN结构的定义。lopnStyle规定笔的型式,lopnWidth规定笔的宽度,lopnColor规定笔的颜色。然后将logpen定义为LOGPEN类型:<BR>LOGPEN 
logpen;<BR>再使用<BR>hPen = CreatePenlndirect 
(&logpen);<BR>就可以建立自定义的笔了。<BR>因为用以上两种方式建立的笔不是设备上下文有关的,所以可以同时建立多支笔,并用多支笔画图。<BR>hpenl 
=CreatePen(PS_SOLID,1,0L);&nbsp;<BR>hpen2=CreatePen(PS_SOLID,3,RGB(255,0,255)),<BR>selectObject 
(hdc ,hpenl )<BR>//LineTo调用<BR>SelectObject (hdc , hpen2 
)<BR>//Polyline调用<BR>DeleteObject(hpenl);<BR>DeleteObject(hpen2);<BR>在点线笔和短划笔的空隙间的着色取决于设备上下文中定义的背景方式和背景颜色这两种属性。缺省的背景方式是 
OPAQUE ,即用背景颜色来填充空隙,缺省的背景颜色是白色。可用:<BR>SetBkColor (hdc,rgbColor 
);<BR>来改变填充空隙的背景颜色。可用:<BR>SetBkMode(hdc,mode);<BR>来改变背景方式,这里的mode可为OPAQUE或TRANSPARENT。<BR>在设备上下文中可设置口种新的绘制方式。nDrawMode参数定义绘制方式。可用下列函数获得当前绘制方式:<BR>nDrowMode 
= GetRop2 
(hdc);<BR>使用这种绘制方式实际上是在笔的象素和目标显示表面的象素之间执行一种逐位布尔运算。<BR><BR>下面列出了Windows的六个函数,用于绘制带有边框的填充区域:<BR>Rectangle, 
带有方形角的矩形<BR>Ellipse, 椭圆<BR>RoundRect, 带有圆形角的矩形<BR>Chord, 在椭圆周边上的弧,其断 . 
点用一条弦相连接<BR>Pie, 在椭圆周边上的饼形楔<BR>Polygon, 多边形<BR>PolyPolygon, 
多个多边形<BR>图形要用设备上下文中选择的当前刷子进行填充, 例:<BR>HBRUSH 
hBrush;<BR>hBrush=GetStockObject(GRAY_BRUSH)<BR>SelectObject 
(hdc,hBrush)<BR>对于矩形填充对象,使用:<BR>Rectangle(hdc,xLeft,yTop,xRight,yBottom);<BR>点(xLeft,yTop)是矩形的左上角,而(xRight,yBottom)是右下角(这两点均以逻辑坐标给出)。同时还要考虑这两点坐标的合理性,例如,在MM_TEXT映射方式下,xRight必须大于xLeft,yBottom必须大于yTop。<BR>对于椭圆填充对象,使用:<BR>Ellipse(hdc,xLeft,yTop,xRight,yBottom);<BR>画圆角矩形的填充对象,使用:<BR>RoundRect 
(hdc,xLeft,yTop,xRight,yBottom,xCornerEllipse,yCornerEllipse);<BR>rgbColor为指定刷子的前景颜色,即阴影线的颜色。<BR>③第三种方法:<BR>hBrush 
= CreatePatternBrush ( hBitmap ) 
;<BR>本函数建立一把具有由hBitmap参数指定图案的逻辑刷子,该刷子以后可被任何支持光栅操作的设备所选用。hBitmap标识位图,该位图可用函数CreateBitmap、CreateBitmapIndirect、LoadBitmap或CreateCompatibleBitmap创建。用于填充图案的位图的最小尺寸为8×8。<BR>④第四种方法:<BR>hBrush 
= CreateBrushIndirect ( &amp;logbrush 
)<BR>变量logbrush为一个LOGBRUSH(“逻辑刷”)类型的结构。建立了逻辑刷子之后,可以使用:<BR>SelectObject (hdc , 
hBrush ) ;<BR>将逻辑刷送入设备上下文中。如果使用结束,可以用:<BR>DeletObject (hBrush ) 
;<BR>删除一把已建立的刷子,如果在程序中需要获取有关于刷子的信息,则可以调用:<BR>GetObject (hBrush , sizeof 
(LOGBRUSH ) , (LPSTR ) &amp; (logBrush ) ) 
;<BR>其中logbrush为一个LOGBRUSH类型的结构。<BR>前面提到使用位图作为逻辑刷子的图案,这样就需要一个位图的句柄。位图必须至少是8象素高和8象素宽,如果位图太大,Windows就取位图的左上部分作为刷子。获取位图句柄也有四种方法。<BR>①获取位图句柄的第一种方法是:<BR>首先用Windows提供的SDKPAINT生成一个位图文件(扩展名为.BMP),并把文件名包括在资源文件(.rc文件)中的一个BITMAP语句中,如:<BR>lpszBitmap 
BITMAP " 
BitmOPName.Bmp"<BR>(假设SDKPAINT中产生的位图名为BitmapName.Bmp),然后将位图装入:<BR>hBitmap = 
LoadBitmap (hInstance , lpszBitmap ) 
;<BR>这里hBitmap即为位图句柄。<BR>②第二种获取位图句柄的方法是:<BR>hBitmap= createBitmop(nWidth,nHeight 
,nPlanes ,nBitsPixel,lpBits);<BR>本函数可生成一个具有指定的宽度、高度和位图案(bit 
pattern)并与设备有关的内存位图。其中的参数nWidth指定位图的宽度(以象素为单位),nHeight指定位图的高度(也以象素为单位),nPlanes指定位图中的彩色位平面的个数,每个彩色位平面有nWidthXnHeight 
XnBitsPixel位。<BR>nBitsPixel指定每个显示象素的颜色位数。lpBits指向一个含有初始位图位值的短整型数组,它的值与BITMAP结构中的bmBits值相类似,有关BITMAP结构的内容已在前面<BR>的章节中提到。<BR>③第三种获取位图句柄的方法:<BR>hBitmap= 
CreateCompatibleBitmap 
(hdc,nWidth,nHeight);<BR>本函数生成一个与由hdc参数指定的设备相兼容的位图,此位图具有与其他设备相同数值的彩色位平面或相同的每象素位数的格式。它的彩色信息同样由hdc指定的设备所确定。hdc标识设备上下文,nWidth和nHeight分别指定位图的宽和高(以位数表示)。<BR>④第四种获取位图句柄的方法:<BR>hBitmop 
= CreateBitmapIndirect 
(&bitmap):<BR>本函数生成一个具有由lpBitmap参数所指定的数据结构给出的宽度、高度和位图图案的位图。这里的bitmap的结构为BITMAP类型。<BR>当拥有一个位图句柄之后,还可以调用:<BR>GetObject(hBitmap,sizeof(BITMAP),(LPSTR)&bitmap);<BR>来获得有关位图的信息,这里返回的bitmap为一个BITMAP类型的结构。<BR>还可以调用:<BR>GetBitmapBits 
(hBitmap,dwCount,lpBits);<BR>将位图hBitmap的dwCount个字节复制到地址为lpBits的数组中。同样还可以使用<BR>SetBitmopBits 
(hBitmap,dwCount,lpBits);<BR>将 lpBits 标识的彩色位值放置到 hBitmap 
标识的位图中去。<BR>当Windows用刷子填充一个区域时,它在水平和垂直两个方向上重复地使用8×8位图,刷子的外观可能会有细微的变化,这取决于Windows如何将位图的左上角与显示表面对齐,设备上下文中将这种对齐的属性称为“刷子原点”。<BR>大多数情况下,绘图时不必如此精细地调整刷子原点;但在某种情况下,为了产生某种特定的视觉效果,需要这么做。可以通过下面步骤来达到这个效果:<BR>①对刷子调用UnrealizeObject(但不能对备用刷子调用UnrealizeObject);<BR>UnrealizeObject(hObject 
);<BR>此函数表示GDI在下次给定的刷子被选中时,使它的原点复位。<BR>②用SetBrushOrg设置刷子原点:<BR>BrushOrg=SetBrushOrg(hDc,x 
,y);。<BR>此函数用于设置当前选人给定的设备上下文中的刷子的原点。其中,hDc标识设备上下文,x规定新原点的x 
坐标(采用设备坐标),该值范围必须在0~7之间,y规定新原点的y坐标(采用设备坐标),该值范围必须在0~7之间,该函数返回一个双字,先前的x坐标放在低位字,先前的y坐标放在高位字。<BR><BR>除了画点、画线、区域填充这些绘图函数之外,Windows还包括几个附加的绘图函数,用以处理RECT(矩形)结构和“区域”,区域是屏幕的一个由矩形、其他多边形和椭圆组合而成的部分。<BR>FillRect(hdc 
,&rect,hBrush);<BR>此函数是用选定的刷子填充给定的矩形,FillRect函数填充整个矩形,还包括左边线和顶边线,但不包括右边线和底边线。hdc标识设备上下文,rect为RECT数据结构类型,此数据结构存放要填充的矩形的逻辑坐标。hBrush用来标识填充此矩形的刷子。<BR>FrameRect 
(hdc ,&rect);<BR>本函数在 lpRect 参数指定的矩形周围画出一个边框,FrameRect 
函数采用给定的刷子绘制边框,边框的高和宽总是用逻辑单位表示。hdc标识窗口的设备上下文, rect 
标明左上角和右下角的逻辑坐标,hBrush标识画矩形边框用的刷子。<BR>InvertRect 
(hdc,&rect);<BR>该函数反视频显示给定矩形的内容。<BR>前面提到的rect可用以下语句取得:<BR>SetRect(&rect,xLeft,yTop,xRight,yBottom);<BR>区域用以描述显示器上的一个由矩形、其他多边形和椭圆组合而成的部分、可以用区域进行绘制或裁剪。<BR>可用:<BR>hRgn=CreateRgn(xLeft,yTop,xRight,yBottom);<BR>或<BR>hRgn 
= CreateRectRgnIndirect (&rect );<BR>来建立矩形区域,也可以用:<BR>hRgn= CreatEllipseRgn 
(xLeft,yTop,xRight,yBOttom);<BR>或:<BR>hRgn =CreateEllipseRgnIndirect 
(&rect);<BR>来建立椭圆形区域;还可以用:<BR>hRgn=CreatePolygonRgn 
(Upoint,nCount,nPolyFillMode);<BR>来建立多边形区域,用:<BR>hRgn=CreateRoundRectRgn(xl,yl,x2,y2,x3,y3);<BR>来建立一个带有圆角的矩形区域,(xl,y1)表示区域左上角,(x2,y2)表示区域右下角,x3和y3分别用于指定产生圆角的椭圆的宽度和高度。<BR>各个特定区域的句柄产生之后,<BR>还可以使用:<BR>nRgnType= 
CombineRgn 
(hDestRgn,hSrcRgnl,hSrcRgn2,nCombine);<BR>通过组合两个已存在区域而产生一个新的区域。组合区域的方法由nCombine参数加以说明:<BR>这里的hSrcRgnl和hSrcRgn2标识两个已存在的区域,hDestRgn标识将被新区域替换的作为目标的已存在区域。<BR>一个区域用完后,可用DeleteObject(hRgn)删除它。<BR><BR>FloodFiLL 
(hdc,xStart,yStart,rgbColor);<BR>本函数用当前刷子填充显示表面的一个区域,该区域假定由rgbColor多数指定的颜色边界确定,FloodFill函数由xStart,yStart参数指定的,点开始向各个方向进行填充,直到颜色边界为止。<BR>ExtFLoodFill(hdc,xStart,yStart,rgbColor,wFill 
);<BR>此函数用当前刷子填充显示表面上的某一区域,若wFill被设置成FLOODFILLBORDER,此区域将完全用rgbColor设定的颜色作为边界,ExtFloodFill从(xStart,yStart)点开始向各个方向填充,直到该颜色边界为止。若wFill被设置成FLOODFILLSURFACE,则ExtFLOODFILL函数从(xStart,yStart)点开始,向各个方向对所有包含由rgbColor参数设定的颜色的相邻区域进行填充。<BR>DrowIcon(hdc,xStort,yStart,hIcon) 
;<BR>本函数在指定设备上画一个图标。(xStart,yStart)为图标的左上角,hIcon标识要画的图标,它与hBitmap一样,可以由SDKPAINT画出,在. 
rc文件中定义,用LoadIcon获得。<BR>ScrollWindow 
(hwnd,xScroll,yScroll,&amp;rectScroll,&rectClip) 
;<BR>本函数通过移动一个窗口用户区域的内容来滚动该窗口,沿X轴移动xScroll个单位,沿Y轴移动yScroll个单位,rectScroll表示用户区域要滚动的那一部分内容,rectClip表示要滚动的裁剪矩形。<BR>ScrollDC(hdc,dx,dy,lprcScroll,lprcClip, 
hrgnUpdate,lprcUpdate);&nbsp;<BR>此函数水平地和垂直地滚动由位构成的矩形。lprcScroll指向要滚动的矩形,dx表示水平滚动单位,dy表示垂直滚动单位,lprcClip指向裁剪矩形,hrgnUpdate返回滚动过程没有覆盖的区域,lprcUpdate返回需要重画的最大矩形区域。<BR><BR>OpenGL是近几年发展起来的一个性能卓越的三维图形标准,它是在SGI等多家 
世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准。目前,包括Microsoft、SGI、IBM、DEC、SUN、HP等大公司都采用了OpenGL做为三维图形标准,许多软件厂商也纷纷以OpenGL 
为基础开发出自己的产品,其中比较著名的产品包括动画制作软件Soft Image 和3D Studio MAX、仿真软件Open 
Inventor、VR软件World Tool 
Kit、CAM软件ProEngineer、GIS软ARC/INFO等等。值得一提的是,随着Microsoft公司在Windows NT和最新的Windows 
95中提供了OpenGL标准及OpenGL三维图形加速卡(如北京黎明电子技术公司的AGC-3D系列三维图形加速卡)的推出,OpenGL将在微机中有广泛地应用,同时也为广大用户提供了在微机上使用以前只能在高性能图形工作站上运行的各种软件的机会。<BR>OpenGL实际上是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与Visual 
C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性。<BR>OpenGL使用简便,效率高。它具有七大功能:&nbsp;<BR>1) 
建模 OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面 
(如Bezier、Nurbs等曲线或曲面)绘制函数。&nbsp;<BR>2) 变换 
OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、旋转、变比镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。其变换方法与机器人运动学中的坐标变换方法完全一致,有利于减少算法的运行时间,提高三维图形的显示速度。&nbsp;<BR>3) 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -