计算机图形学基本概念,应用,前沿技术。
1. ISO 图形学的定义:应用计算机技术进行图形 的生成、处理和输出。
研究对象 —— 图形。
2.图形:是从客观世界物体中抽象出来的带有颜色及形状信息的图和形。
图形的构成要素:
几何要素:点、线、面、体等。
非几何要素:描述对象的颜色、材质等。
图形的表示方法:点阵法:枚举出图形中所有点;参数法:由图形的形状参数(方程表达式的系数,线段端点坐标)和属性参数(颜色)表示
3 图形与图像
图像image:由像素点组合而成。一般用二维矩阵表示,矩阵的每一点称为一个像素。
特点:颜色丰富。所占的体积很大。放大图像,点数不变。
图形:按照数学公式表达的线条构成。含有几何属性。可能用参数表示,比如线段用两个点和中间的一些参数。
特点:占空间小,放大图形,线条依然可以保持良好的光滑性。
4、计算机图形学基本研究内容
1、图形系统(硬、软、标准化)
2、基本图形生成 如何显示点、线段、多边形及圆等几何图形
3、图形的处理 几何变换(图形动起来);投影变换(如何显示三维 图形);真实感图形(光照、阴影。。。)
4、物体造型 实体表示;曲线曲面;真实感
5 研究热点:
1计算几何 :几何形体在计算机中的表示
2 DIP数字图像处理:如何对一幅连续图像采样、量化变成数字图像,对数字图像做一些处理,比如图像去噪、边缘处理。
3 模式识别:从图像中抽取一些特征和信息,从而把图像分成 预定的类别,比如指纹识别
4 计算机视觉:由计算机来代替大脑完成图像处理和解释。分析图像,提取特征。然后分类。比如机器人的视觉系统。
6 应用:
GUI图形用户界面、计算机动画、虚拟现实、科学可视化
虚拟现实:计算机技术来生成一个逼真的三维感官世界。让用户可以身临其境得,利用头盔、数据手套等和这个虚拟世界进行交互
7 图形学的研究热点
一、造型技术 (现实中客观存在的物体建模)
二、真实感图形绘制技术:光照模型,阴影,映射,纹理算法
三、人机交互技术 :机器可以更高的理解
四、与计算机网络技术的紧密结合:远程医疗
基本概念
(1) 像素(Pixel: Picture Cell):构成屏幕(图像)的最小元素
(2) 分辨率(Resolution) CRT在水平或竖直方向单位长度上能识别的最大像素个数
(3) 窗口:需要显示的场景区域
(4) 视口:显示设备行用来显示图形的区域.从屏幕的不同位置观察场景的不同部分。
(5) 裁剪(Clip):从场景中确定位于窗口内的图形
第二章
(硬件和软件,其中硬件:)
硬件组成:
n 帧缓冲存储器:存储屏幕上像素的颜色值
n 视频控制器:将帧缓存里得数据扫描生成图形,射到屏幕里
n 显示处理器:处理图形,比如几何变换、剪裁
n 显示器:CRT、液晶
有的还有GPU: 图形处理器。做图像和图形相关运算工作的微处理器,减轻了CPU的负担
显示器:
CRT:电子枪、聚焦系统、 加速电极、偏转系统、 荧光屏
液晶显示器:
https://www.docin.com/p-1520255600.html
图形的扫描转换
1. 随机扫描(random scan) 电子束可以任意移动。画线设备
2. 光栅扫描(raster scan) 电子束按固定扫描线和次序进行。画点设备
-------------------------------------------------三------------------------------------------
图形的显示过程:
图形显示过程:原始数据进行计算,放到帧缓存里,(形成点阵数据),再通过视频控制器扫描生成图形,射到屏幕里。
生成线段方法:直线方程法、DDA算法(y相应的增加)、中点算法(判断+0.5在直线上还是下)
生成圆的方法:(由八分之一圆弧上的点确定整个圆得点。)
列出圆得表达式,判断每个点到圆心得距离小于R还是等于R
等面积正多边形迫近法
多边形表示方法:顶点表示,点阵表示(会失去很多重要的几何信息,占地)
------------------------------------上色-变换-----------------------------------------------
扫描转换与区域填充(填充颜色的方法)
扫描转换:顶点表示到点阵表示的转换,给多边形包围的区域着色。(区域表示方法变了)
填充(种子填充):将指定的颜色从种子点开始扩展到整个区域。递归的方法实现(种子点的上下左右四个像素递归判断)(区域表示方法没变)
扫描转换的三种方法:
1. 确定哪些像素位于填充图元的内部 :逐点(射线法)判断,或者扫描线(一条条线进行扫描,计算多边形的相交区间) 或者边缘填充(对于每一条扫描线和每条多边形边的交点 (x1,y1) ,将该扫描线上交点右方的所有像素取补)
2. 用指定颜色绘制这些像素
逐点判断多边形凹凸:图形在边的延长线同一侧:凸的。或者用向量积的方法
判断点在多边形的内外:
u 射线法 :从待判别点 发出射线与多边形交点个数,偶数:外。奇数:内
u 累计角度法:
u 编码法*
扫描转换多边形
1. 逐点判断:
2. 扫描线:(x扫描线)
计算扫描线与多边形的相交区间,交点排序,两两配对,然后用要求的颜色显示这些像素。
问题:交点配对时顶点不好选择。顶点部分难判断:
解决:若共享顶点的两条边分别落在扫描线的两边,交点算一个;若在同一边,交点算0个或两个。
3. 边缘填充:(以边为中心的边缘填充算法) M为填充黑色 第一步:将绘图窗口的背景色置为 M拔 ; 第二步:对多边形的每一条非水平边做:从该边上的每个像 素开始向右求余
适合用于具有帧缓存的图形系统。算法简单,但是如果图像复杂,每次像素多次访问,输入输出的量比扫描线算法大。
扫描转换扇形区域:
与多边形类似:对每条扫描线,首先计算与扇形区域边 界的交点,交点经排序后,再用指定颜色绘制绘制配对 交点间的像素。
区域填充(种子填充)
将指定的颜色从种子点开始扩展到整个区域
缺点:有些像素需要重复判断,降低算法效率 n 栈结构占空间 n 递归执行,算法简单,但效率不高
多边形扫描转换与区域填充方法比较
1. 基本思想不同 u 前者:顶点表示转换成点阵表示 u 后者:只改变区域内填充颜色,没有改变表示方法
2. 对边界的要求不同 u 前者:扫描线与多边形边界交点个数为偶数 u 后者:区域封闭,防止递归填充跨界
3. 基本的条件不同 u 前者:从边界顶点信息出发 u 后者:从区域内种子点出发
用图像填充区域:
1. 均匀着色方法:将图元内部像素置成同一颜色
2. 位图不透明:若像素对应的位图单元为1,则以前景色显示该 像素;若为0,则以背景色显示该像素;
3. 位图透明:若像素对应的位图单元为1,则以前景色显示该像 素;若为0,则不做任何处理。
4. 像素图填充:以像素对应的像素图单元的颜色值显示该像素
方法1:建立整个绘图空间与图像空间的1-1映射
方法2:建立区域局部坐标空间与图像空间的1-1映射
字符的表示与输出:
点阵字体: 每一个字符用位图表示。这个位是1,表示这个笔画经过此处,0表示不经过此处
矢量字体:笔画用曲线(参数)表示
二维光栅图形的走样与反走样
走样的现象和原因:
走样定义:用离散的像素表示连续的图形而引起的失真
光栅图像走样现象:
1. 阶梯(锯齿)状边界 -> 像素间距大
2. 图形细节失真 -> 比较细的矩阵会消失:因为像素是最小单位,没有更小的了
3. 狭小图形遗失:动画序列中时隐时现,产生闪烁 -> 图形比较小,运动的时候没有覆盖像素的中心,所以不显示。
反走样的方法:antialiasing
定义:在图形显示过程中,用于减少或消除走样(混淆)现象的方法
方法: 1. 提高分辨率方法 2. 非加权区域采样 3. 加权区域采样
根据覆盖像素的面积设置直线段上像素灰度,覆盖的少,亮度低
步骤: ①将直线段看作具有一定宽度的狭长矩形;
②当直线段与某像素有交时,求出两者相交区域的面积;
③根据相交区域的面积,确定该像素的灰度(亮度、颜色)值
计算盖像素的面积(相交面积)的方法:
1 用斜率和长度算相交面积。 2. 像素分割成 n 个更小的子像素,看线段内有多少个子像素中心点,记为k,k/n就是相交面积。
计算方法:离散的方法:
计算所有中心落在直线段内的子像素对原像素A亮度贡献之和(高斯函数表示) 。该值乘以像素A的最大灰度(颜色)值即为像素A的显示灰度(颜色)值
图形的几何变换:(平移、旋转、放缩)
用齐次坐标定义:x维度变成x+1维度。比如点(x,y) 的标准齐次坐标为 (x,y,1). 齐次坐标的目的:使得这 3 种基本变换能很容易地结合在一起,形成各种复杂的组合变换。
1 用齐次坐标定义
2 然后乘相应的矩阵。
第三章二维图形的基本操作和图形处理算法
几何变换:
基本操作:图形的平移、缩放、旋转、镜像、错切
二维图形的裁剪,投影,多边形填充以及二维图形的布尔运算(并、交、差)
齐次:每一维次数都是1,如(x,y,z);(x,y,1)就不是。
齐次坐标的原因,齐次的优点:
几何变换时 运算矩阵的 形式统一(因此便于合成,连续变换时可以先得到变换矩阵;便于硬件实现,只用矩阵乘法)
齐次坐标定义;(Xh, Yh ,h) Xh = hx, Yh = hy, h ¹ 0
平移和旋转变换具有可加性,放缩变换具有可乘性
复合变换:先计算变换矩阵,再计算坐标。先作用的放在连乘的右端,后作用的放在连 乘的左端。
镜像(对称reflection):
错切(shear), 仿射变换(affine transformation)
若三维几何变换剪裁:则(x,y,z)-> (x,y,z,h) 用到右手坐标系
三维几何变换的一般形式:
(1)前三行和前三列对应旋转和放缩变换 (2)第四列的前三个元素对应平移变换 (3)第四行前三个元素对应投影变换
投影:降维度显示
布尔运算:
二维观察
两口定义:
裁剪窗口(Clipping Window) :需要显示的场景区域。用户坐标系定义
视口(Viewport):指显示设备上用来显示图形的区域。屏幕坐标系定义
二者作用:
改变窗口:影响显示对象的多少
改变视口:改变视口尺寸实现图形对象的缩放。改变视口位置实现在屏幕不同位置看到场景。
二维观察变换:窗口到视区的变换。
剪裁(clip):(第7个)
裁剪的基础:图元关于窗口内外关系的判别、图元与窗口的求交。
A 点裁剪:点 (x, y) 在窗口内的充分必要条件是, X 属于 XMIN,XMAX , Y 同理
B 直线裁剪
二.点剪裁
三.直线求交点:
法1. 直接求
判断端点和窗口位置关系
(待裁剪线段和窗口的关系若为线段完全可见、显然不可见,可直接处理;若线段至少有一端点在窗口之外,但非:不可见,需求交。)
显然不可见:求线段与窗口边延长线的交点,这个交点将线段分为两段,其中一段显然不可见,丢弃
判断显然可见、显然不可见:
法2.编码(Cohen-Sutherland )算法: 通过延长四个边,分成9块,然后给每块编码,用来判断线段是否显然可不可见、然后求交点,再判断,这么迭代。
法3.中心分割法:
法4.Liang-Barsky裁剪算法: 将二维裁剪化为一维裁剪,向X(或Y)方向投影以决定可见线段
C 多边形裁剪:
不能用线段剪裁。Why? : 剪裁后,多边形的边界不再封闭,需要用窗口边界来封闭。
Sutherland-Hodgman 算法:SH算法、逐边剪裁。
基本思想:流水线的方式,每次用窗口的一条边裁剪凸多边形。
步骤:将顶点序列P1P2…Pn作为输入
依次对窗口的每个边做下列处理:
输入顶点序列、依次对顶点序列中相邻顶点构成的边PiPi+1进行剪裁处理、输出剪裁后的顶点序列。
D 字符裁剪
A 以串为单位的裁剪:把整个字符串作为整体来处理。或全部显示,或全不显示。
B 字符裁剪:每 1 个字符堪称一个矩形的字符框,这个框完全落在窗口之内时显示
C 矢量裁剪:把每个字符都看作是一些短直线 ( 笔划 ) 的组合,每一笔划都进行直线的裁剪。
窗口到视区的变换:
1 平移:在世界坐标系中,平移窗口使(xmin, ymin)移动至坐标原点,变换为T (-xmin, -ymin)
2 放缩:使窗口的大小与视区相等,变换为S(Eu/Ex, Ev/Ey)
3 在设备坐标系中,平移使窗口与视区重合
三维观察
1. 投影(8章)
2. 三维形体的表示(11章)
3. 消除隐藏面与隐藏线(9章)
4. 建立光照明模型、真实感图形绘制方法(10章)
两大方法:u 投影(降维) u 三维显示设备(还没普及
三维成像基本步骤:
灭点vanishing point:不平行于投影平面的平行线,经过透视投影之后收敛 于一点,称为灭点。
主灭点:平行于坐标轴的平行线的灭点。 n 一点透视:1个灭点 n 两点透视:2个灭点 n 三点透视:3个灭点
视见体 : 视见体是三维裁剪窗口,确定可见空间
(3)三维裁剪 ——取景
(4)投影和显示——成像
流程:
二、如何表示三维物体?
模型变换 Modeling Transformation)
每个物体有自己的坐标系。有可能有多个物体,要从模型坐标系变成世界坐标系。
观察变换: 从世界坐标系到观察坐标系的变换
先投影后裁剪:
先剪裁后投影:
三维裁剪:
涉及到多边形裁剪:逐面裁剪算法
·关于直线
·关于面的:
三、如何反映遮挡关系?
消除隐藏面与隐藏线
1. 投影窗口内的像素为处理单元:对窗口内的每一个像素遍历,确定距视点最近的物体,以该物体表面的颜色来显示像素
2. 场景中的物体为处理单元:场景中的每一个物体,将其与场景中的其它物体比较,确定其表面的可见部分并显示。
b)
4. 提高消隐算法效率:
一、利用连贯性
二、透视投影转换为平行投影
三、包围盒技术:包围一个复杂性体的简单形体
四、背面剔除
五、空间分割技术
六、物体的分层表示
5. 画家算法:先画远景后画近景
6. Z 缓冲器算法
6 Z-Buffer算法(深度缓冲 depth-buffer)
一种隐藏面消除算法
(Z 缓冲器中的单元与帧缓冲器中的单元一一对应)
先将 Z 缓冲器中各单元的初始化为最小值
多边形投影时,当要改变某个像素的颜色值时,首先检查当前多边形的深度值是否大于该像素原来的深度值
A:如果大于,说明当前多边形更靠近观察点, 用它的颜色替换像素原来的颜色;并保存深度值
B:否则说明在此像素处,当前多边形被遮挡了,是不可见的,因此颜色值不变。
·扫描线z buffer:
解决的问题:Z 缓冲器算法中所需要的 Z 缓冲器容量较大
将整个绘图区域分割成若干个小区域,这样 Z 缓冲器只用存一个区域中的像素而不是所有像素。把小区域取成扫描线。
步骤:找出与当前扫描线相关的多边形,以及每个多边形与该扫描线的相交线段上的各像素,计算深度,并与 Z-buffer中的值比较,找出各像素处可见平面,然后把颜色写到帧缓存。
四、如何产生真实感图形
重点掌握光照方程、基本纹理映射及多边形绘制
n 何谓真实感图形
真实感图形绘制主要内容: 光照、纹理、阴影
10.1 简单光照模型
建立数学模型模拟三种不同类型的光:环境光、漫反射光、镜面反射光
1. 环境光(Ambient light) 在物体和周围环境之间多次反射后,最终达到平衡时的一 种光,又称为背景光。
光强(度):分布均匀Ia
反射系数:表面性质有关K
Ie =Ka* Ia
2. 漫反射(Diffuse Reflection)(Lambert)
粗糙不平引起的,均匀地向各个方向传播,与视点无关。分布均匀。
3. 镜面反射光和冯(Phong)反射模型
高光(high light):光滑物体表面在点光源的照射下形成一 块特别亮的区域
镜面反射(Specular Reflection) n 物体表面对入射光的反射
包括反射系数、夹角、镜面高光系数
局部光照明模型:仅处理光源直接照射物体表面的光照明模型。
10.2 多边形绘制方法
颜色插值和法向插值
多边形上各点处的颜色一样:入射光矢量不一样,颜色也不同
绘制方法:
利用光照明方程计算出它的颜色。适合光源或视点在无穷远
一个多边形只用计算一次光照模型。
(1)计算多边形的单位法向量
(2)计算多边形顶点的单位法向量(共享顶点的多边形法 向量的平均值)
(3)利用光照明方程计算顶点颜色
(4)对多边形顶点颜色进行双线性插值,获得多边形内部各点的颜色
双线性插值:在两个方向分别进行一次线性插值;根据待插值周围四个近邻点的位置估测待插值的位置。
(1)计算多边形单位法向量
(2)计算多边形顶点单位法向量 (以上两步同Gouraud着色方法)
(3)对多边形顶点法向量进行双线性插值,获得内部各点的法向量
(4)利用光照明方程计算多边形内部各点颜色
均匀着色、Gouraud 和Phong方法比较
(1)均匀着色(Flat)块状现象明显,计算开销小
(2) Gouraud方法光变化过渡不连续,计算开销较大
(3)Phong方法光变化过渡连续,计算开销大
10.3 纹理texture映射
纹理:是物体表面的细小结构,它可以是光滑表面的花纹、图案,即颜色纹理(2D)或三维结构 或粗糙表面(几何纹理)
纹理来源 :数字图像,用二维数组表示 :
数学公式定义得纹理函数
纹理映射(Texture Mapping):将一块纹理图案映射到物体表面上,产生物体表面的细节
1. 确定纹理与物体表面的对应关系
2. 用表面上点对应的纹素值代替该点的颜色值(或漫反射系数)
圆柱映射、球的映射、圆环映射等映射关系。
10.4 阴影shadow
与消隐算法本质上一致
光源对位于阴影中的点的亮度(颜色)没有贡献,修改光照模型
基于Z缓冲消隐的实现算法
步骤:
(1)将图形变换到以光源为原点的 坐标系,利用Z缓冲器消隐算法 按光线方向对图形消隐,把距 光源最近的物体表面上点的深度值保存在Z缓冲器中
(2)利用Z缓冲器消隐算法按视线方向对图形消隐,将得到的每 个可见点变换到第 i 个光源的坐标系中,若它在光源坐标系中 的深度值小于阴影缓冲器中相应单元的值,则该可见点位于阴 影中(Si =0),否则( Si =1),再用光照模型计算颜色
算法简单,但存储量大(每个光源需要1个Z缓冲器)
n 人们观察现实世界产生的真实感来源于
纹理、光照、阴影、遮挡
n 解决方法----建立光照明模型、研发真实感图形绘制方法
曲线与曲面
曲线的表示方法 ;掌握Bezier和 B样条曲线
曲线的表示形式:非参数表示和参数表示
n 容易确定曲线边界。由参数区间确定
n 表示形式不变性。不依赖于坐标系的选取
n 表示能力强。利于控制点来控制曲线形状,如后面将要学到的Bezier曲线
用到的数学: 切矢量、法矢量(与切矢量垂直)、曲率(曲线的弯曲程度)
三次Hermite曲线
Bezier曲线 贝塞尔
Bezier曲面
文章浏览阅读2.9k次,点赞8次,收藏14次。测试主要做什么?这完全都体现在测试流程中,同时测试流程是面试问题中出现频率最高的,这不仅是因为测试流程很重要,而是在面试过程中这短短的半小时到一个小时的时间,通过测试流程就可以判断出应聘者是否合适,故在测试流程中包含了测试工作的核心内容,例如需求分析,测试用例的设计,测试执行,缺陷等重要的过程。..._测试过程管理中包含哪些过程
文章浏览阅读870次,点赞16次,收藏19次。1.背景介绍政府数字化政务是指政府利用数字技术、互联网、大数据、人工智能等新技术手段,对政府政务进行数字化改革,提高政府工作效率,提升政府服务质量的过程。随着人工智能(AI)和机器学习(ML)技术的快速发展,政府数字化政务中的人工智能与机器学习应用也逐渐成为政府改革的重要内容。政府数字化政务的人工智能与机器学习应用涉及多个领域,包括政策决策、政府服务、公共安全、社会治理等。在这些领域,人工...
文章浏览阅读219次,点赞2次,收藏4次。系统主要的用户为用户、管理员,他们的具体权限如下:用户:用户登录后可以对管理员上传的学习视频进行学习。用户可以选择题型进行练习。用户选择小程序提供的考研科目进行相关训练。用户可以进行水平测试,并且查看相关成绩用户可以进行错题集的整理管理员:管理员登录后可管理个人基本信息管理员登录后可管理个人基本信息管理员可以上传、发布考研的相关例题及其分析,并对题型进行管理管理员可以进行查看、搜索考研题目及错题情况。_mysql刷题软件
文章浏览阅读1.4k次。myelipse里有UML1和UML2两种方式,UML2功能更强大,但是两者生成过程差别不大1.建立Test工程,如下图,uml包存放uml类图package com.zz.domain;public class User {private int id;private String name;public int getId() {return id;}public void setId(int..._根据以下java代码画出类图
文章浏览阅读174次。需求:一个topic包含很多个表信息,需要自动根据json字符串中的字段来写入到hive不同的表对应的路径中。发送到Kafka中的数据原本最外层原本没有pkDay和project,只有data和name。因为担心data里面会空值,所以根同事商量,让他们在最外层添加了project和pkDay字段。pkDay字段用于表的自动分区,proejct和name合起来用于自动拼接hive表的名称为 ..._flume拦截器自定义开发 kafka
文章浏览阅读380次。原标题:Java Spring中同时访问多种不同数据库 多样的工作要求,可以使用不同的工作方法,只要能获得结果,就不会徒劳。开发企业应用时我们常常遇到要同时访问多种不同数据库的问题,有时是必须把数据归档到某种数据仓库中,有时是要把数据变更推送到第三方数据库中。使用Spring框架时,使用单一数据库是非常容易的,但如果要同时访问多个数据库的话事件就变得复杂多了。本文以在Spring框架下开发一个Sp..._根据输入的不同连接不同的数据库
文章浏览阅读3.6k次,点赞9次,收藏25次。本案例描述了晶振屏蔽以及开关电源变压器屏蔽对系统稳定工作的影响, 硬件设计时应考虑。_eft电路图
文章浏览阅读1.1k次。对于物料价格的更改,可以采取不同的手段:首先,我们来介绍MR21的方式。 需要说明的是,如果要对某一产品进行价格修改,必须满足的前提条件是: ■ 1、必须对价格生效的物料期间与对应会计期间进行开启; ■ 2、该产品在该物料期间未发生物料移动。执行MR21,例如更改物料1180051689的价格为20000元,系统提示“对于物料1180051689 存在一个当前或未来标准价格”,这是因为已经对该..._mr21 对于物料 zba89121 存在一个当前或未来标准价格
文章浏览阅读7.4k次,点赞3次,收藏13次。[文章导读]联想启天M420是一款商用台式电脑,预装的是win10系统,用户还是喜欢win7系统,该台式机采用的intel 8代i5 8500CPU,在安装安装win7时有很多问题,在安装win7时要在BIOS中“关闭安全启动”和“开启兼容模式”,并且安装过程中usb不能使用,要采用联想win7新机型安装,且默认采用的uefi+gpt模式,要改成legacy+mbr引导,那么联想启天M420台式电..._启天m420刷bios
文章浏览阅读2.7k次,点赞2次,收藏9次。一,为什么要冗余数据互联网数据量很大的业务场景,往往数据库需要进行水平切分来降低单库数据量。水平切分会有一个patition key,通过patition key的查询能..._保证冗余性
文章浏览阅读88次。是时候闭环Java应用了 原创 2016-08-16 张开涛 你曾经因为部署/上线而痛苦吗?你曾经因为要去运维那改配置而烦恼吗?在我接触过的一些部署/上线方式中,曾碰到过以下一些问题:1、程序代码和依赖都是人工上传到服务器,不是通过工具进行部署和发布;2、目录结构没有规范,jar启动时通过-classpath任意指定;3、fat jar,把程序代码、配置文件和依赖jar都打包到一个jar中,改配置..._那么需要把上面的defaultjavatyperesolver类打包到插件中
文章浏览阅读909次。1.得下载一个番茄插件,按alt+g才可以有函数跳转功能。2.不安装番茄插件,按F12也可以有跳转功能。3.进公司的VS工程是D:\sync\build\win路径,.sln才是打开工程的方式,一个是VS2005打开的,一个是VS2013打开的。4.公司库里的线程接口,在CmThreadManager.h 里,这个里面是我们的线程库,可以直接拿来用。CreateUserTaskThre..._番茄助手颜色