2D初始化及图形
- 格式:docx
- 大小:16.09 KB
- 文档页数:11
在Blender中绘制2D图形的技巧Blender是一个功能强大的3D建模和动画软件,但很多人可能不知道它同样适用于绘制2D图形。
下面将介绍一些在Blender中绘制2D图形的技巧,希望对初学者有所帮助。
首先,打开Blender并选择2D动画模板。
这个模板已经为您设置好了适用于2D绘图的默认配置。
接下来,您可以按照以下步骤开始绘制您的2D图形:1. 添加2D对象:在Blender的工具栏中,点击“Add”按钮,然后选择“Mesh”下的“Plane”。
这将在场景中创建一个平面对象。
您可以调整平面的大小和位置以适应您的需求。
2. 绘制形状:在平面对象上选择“Edit Mode”,然后使用“Ctrl + 左键”来绘制您想要的形状。
您可以自由绘制直线、曲线或任何其他形状。
对于复杂的形状,您可以使用多个线条来绘制。
3. 编辑形状:您可以选择“Edit Mode”下的“Vertex”工具,对形状进行进一步编辑。
您可以移动、旋转或缩放顶点,以调整形状的大小和形状。
您还可以使用“Extrude”工具来创建立体形状。
4. 添加颜色:回到“Object Mode”,在属性窗口中选择“Material”,然后点击“New”按钮创建一个新的材质。
可以给形状添加颜色、纹理或者其他特效。
5. 渲染图形:点击窗口顶部的“Render”按钮,选择“Render Image”以渲染您的2D图形。
您可以调整光照、背景和其他渲染设置以获得更好的效果。
除了上述基本技巧外,Blender还提供了许多其他工具和功能,用于2D绘图和动画制作。
以下是一些值得尝试的功能:- Grease Pencil:这是Blender的一个独特功能,允许您在3D场景中绘制2D素描。
您可以使用Grease Pencil绘制草图、动画或任何其他2D元素。
在“Object Mode”下选择“Grease Pencil”工具,然后开始绘制。
- 动画制作:利用Blender的动画功能,您可以为2D图形添加动态效果。
二维数组初始化什么是二维数组在编程中,数组是一种用于存储相同类型的数据元素的数据结构。
通常,数组是一维的,即只有一个维度。
然而,有时候我们需要存储更加复杂的数据结构,例如表格、矩阵等等,这时就需要使用二维数组。
二维数组可以看作是一个由多个一维数组组成的数组。
它由行和列组成,每个行都是一个一维数组,而每个元素则表示在行和列的交叉点上的值。
可以将二维数组看作是一个表格,每行表示一个记录,每列表示一个属性。
二维数组的初始化在使用二维数组之前,我们需要对其进行初始化。
通过初始化,可以为二维数组中的每个元素赋予一个初始值,使其可以被正确访问和使用。
声明和初始化一个二维数组在大多数编程语言中,我们可以使用以下方式来声明和初始化一个二维数组:type arrayName[rowSize][colSize] = {{val11, va l12, val13, ...}, {val21, val22, val23, ...}, ...}其中,type表示数组元素的数据类型,arrayName是数组的名称,rowSize表示数组的行数,colSize表示数组的列数,val11, val12, val13, ...表示数组中第一行的元素值,val21, val22, val23, ...表示数组中第二行的元素值,以此类推。
例如,如果我们想要创建一个 3x3 的二维整数数组,并将其初始化为特定的值,我们可以使用以下代码:int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};动态初始化二维数组除了静态初始化,我们还可以使用动态初始化的方式来创建二维数组。
动态初始化的好处是可以根据需要在运行时确定数组的大小。
在某些编程语言中,我们可以使用以下方式动态初始化一个二维数组:type arrayName = new type[rowSize][colSize];其中,type是数组元素的数据类型,arrayName是数组的名称,rowSize是数组的行数,colSize是数组的列数。
Java标准教程:Java 2D绘图--第3章基本几何图形在之前的课程中,您已经学习了绘图的基本概念,包括坐标系和graphic对象创建的基本信息。
现在,您将了解2D 绘图类的更详细的信息。
本科展示如何使用Graphics2D类绘制基本的几何图形和任意的形状,以及如何使用花哨的轮廓和填充风格展示图形。
这些主题分为以下几个章节。
●绘制基本几何图形:本节展示如何创建标准的集合图形,例如点,线,曲线,圆弧,矩形和椭圆。
●绘制任意图形:本节展示如何直接使用基本几何图形组合绘制任意形状,使用GeneralPath类进行绘制。
●填充和笔画:本节解释如何设置笔画和打印属性,控制应用到Shape对象和文本的轮廓和填充风格。
1.1 绘制基本几何图形Java 2D API提供很多类,定义了基本的几何对象,例如点,线,弧线和矩形。
这些几何类是java.awt.geom包的一部分。
PathIterator接口定义了从路径中获取元素的方法。
Shape接口提供了一组描述和解析几何路径的对象。
这个接口由GeneralPath类和其他几何类实现。
本节的所有例子中创建的几何图形都使用java.awt.geom,然后使用Graphics2D类进行渲染。
要得到Graphics2D对象,可以cast paint()方法的Graphics参数:1.1.1 点Point类创建了位于坐标系中(x, y)位置的点。
子类Point2D.Float和Point2D.Double提供了使用float和double精度存储点。
要创建位于坐标系(0, 0)的点,使用默认的构造函数Point2D.Double()。
您可以使用setLocation方法设按照下面的方法设置点的位置:●setLocation(double x, double y):使用double坐标值设置点的位置。
●setLocation(Point2D p):使用坐标系中的其他点设置位置。
易语言 directx2d 的使用方法易语言是一种用于编写Windows应用程序的简单易学的编程语言,而DirectX是一组用于开发游戏和多媒体应用程序的API。
在易语言中,通过调用DirectX2D的相关函数,可以实现2D图形的绘制、渲染和动画效果。
下面将详细介绍DirectX2D的使用方法。
一、引入DirectX2D库文件在使用DirectX2D之前,需要先将相关的库文件引入到易语言的开发环境中。
具体步骤如下:1. 下载并解压DirectX2D库文件。
2. 打开易语言的开发环境,点击菜单栏的“工程”-“库文件管理器”。
3. 在库文件管理器中,点击“添加”按钮,选择解压后的DirectX2D库文件,点击“确定”。
二、初始化DirectX2D在使用DirectX2D之前,需要先初始化相关的资源。
具体步骤如下:1. 在程序的初始化部分,添加以下代码:```初始化图形系统()```2. 在程序的结束部分,添加以下代码:```释放图形系统()```三、绘制基本图形使用DirectX2D可以绘制各种基本图形,如点、线、矩形、圆等。
具体步骤如下:1. 绘制点:```绘制点(点的X坐标, 点的Y坐标, 颜色)```2. 绘制线:```绘制线(起点的X坐标, 起点的Y坐标, 终点的X坐标, 终点的Y坐标, 颜色, 线宽)```3. 绘制矩形:```绘制矩形(左上角的X坐标, 左上角的Y坐标, 右下角的X坐标, 右下角的Y坐标, 颜色, 是否填充)```4. 绘制圆:```绘制圆(圆心的X坐标, 圆心的Y坐标, 半径, 颜色, 是否填充)```四、图形变换与动画效果使用DirectX2D可以对图形进行平移、旋转、缩放等变换操作,以及实现动画效果。
具体步骤如下:1. 平移:```图形平移(水平偏移量, 垂直偏移量)```2. 旋转:```图形旋转(旋转角度)```3. 缩放:```图形缩放(水平缩放比例, 垂直缩放比例)```4. 动画效果:```设置动画帧率(帧率)开始动画()结束动画()```五、文本绘制使用DirectX2D还可以绘制文本,可以设置文本的字体、大小、颜色等。
FIT2D简明使用手册FIT2D是由ESRF(European Synchrotron Radiation Facility)工作人员编写的一款软件,其功能较为丰富,本文仅就其小角散射部分进行介绍。
启动和运行本软件无需安装和注册,直接在FIT2D文件夹下双击fit2d.exe文件即可开始运行,其界面包括文本窗口和图形窗口:图1:文本窗口图2:图形窗口在图形窗口下单击I ACCEPT,进入程序初始化设置界面:图3:初始化界面单击X-DIMENSION按钮可对X轴初始长度进行设置,同样可设置Y轴,注意如果设置值小于载入图像的尺度,图像将不能完全显示。
MEMORY按钮用于为程序分配内存,如果设定为NO,则程序将不分配占用内存序列。
通常设定为YES。
V ARIANCE按钮将使程序占用双倍内存,通常设定为NO,仅当某些数据分析出错时开启。
设置完毕后,单击OK,进入主菜单:图4:主菜单小角散射分析在主菜单下单击SAXS/GISAXS选项,进入小角散射数据分析界面(可以看出,此部分程序是由粉末衍射程序移植而来)。
图5:小角散射点击INPUT键,输入文件:图6:文件的读入路径的默认值是在FIT2D文件夹下,左侧窗口可选择上一层或下一层文件夹,右侧显示文件名。
注意:所有操作均为单击,与通常windows习惯不同。
图7:示例(衍射图)文件打开后程序界面如图7 所示,其主要功能均以下方按键形式定义,下文将主要介绍两种数据采集模式。
确定光束线中心点点击BEAM CENTER,进入子菜单。
图8:BEAM CENTER本软件提供的定位方法包括2维高斯拟合、平均值定位、圆环定位、椭圆环定位等。
常用的是2维高斯拟合,首先点击2D GAUSSIAN FIT:根据图形概略的选择束线中心的位置,注意不能偏差太多。
图10:得到光束线中心计算完毕,自动退回到小角散射界面。
求解光束线中心是一项重要的准备工作,下文将要介绍的两种数据采集模式都需要确定光束线中心。
二维数组的定义和初始化1. 什么是二维数组二维数组是一种特殊的数组,它可以理解为元素为一维数组的一种容器。
与一维数组不同,二维数组可以看作是一个表格,由行和列组成。
每个元素都可以通过两个索引进行访问,一个用于指定行,一个用于指定列。
2. 二维数组的声明和初始化二维数组的声明和初始化可以分为静态方式和动态方式。
2.1 静态方式静态方式的声明和初始化在编译时就确定了数组的大小。
// 声明并初始化一个二维数组数据类型[][] 数组名 = {{元素1, 元素2, ...},{元素1, 元素2, ...},...{元素1, 元素2, ...}};上述代码中,元素可以是任意数据类型的值。
2.2 动态方式动态方式的声明和初始化在运行时根据需要确定数组的大小。
// 声明一个二维数组数据类型[][] 数组名;// 创建并初始化一个二维数组数组名 = new数据类型[行数][列数];3. 二维数组的访问和操作访问二维数组的元素需要通过两个索引进行定位,即行索引和列索引。
// 访问二维数组的元素数据类型元素 = 数组名[行索引][列索引];3.1 遍历二维数组遍历二维数组可以使用嵌套的循环来逐个访问每个元素。
for (int i = 0; i < 数组名.length; i++) {for (int j = 0; j < 数组名[i].length; j++) {// 访问数组元素数据类型元素 = 数组名[i][j];// 进行操作...}}3.2 修改二维数组的元素可以通过索引直接修改二维数组的元素。
数组名[行索引][列索引] = 新值;4. 二维数组的应用场景二维数组广泛应用于各种场景,例如表示矩阵、图像处理、游戏地图等。
4.1 矩阵运算二维数组可以方便地表示和计算矩阵。
通过二维数组,可以进行矩阵的加法、减法、乘法、转置等运算。
4.2 图像处理在图像处理中,图像可以被表示为一个二维数组。
每个元素代表图像上的一个像素点,通过修改二维数组的元素可以对图像进行处理,如调整亮度、对比度、色彩等。
F I T2D简明使用手册FIT2D简明使用手册FIT2D是由ESRF(European Synchrotron Radiation Facility)工作人员编写的一款软件,其功能较为丰富,本文仅就其小角散射部分进行介绍。
启动和运行本软件无需安装和注册,直接在FIT2D文件夹下双击fit2d.exe文件即可开始运行,其界面包括文本窗口和图形窗口:图1:文本窗口图2:图形窗口在图形窗口下单击I ACCEPT,进入程序初始化设置界面:图3:初始化界面单击X-DIMENSION按钮可对X轴初始长度进行设置,同样可设置Y轴,注意如果设置值小于载入图像的尺度,图像将不能完全显示。
MEMORY按钮用于为程序分配内存,如果设定为NO,则程序将不分配占用内存序列。
通常设定为YES。
VARIANCE按钮将使程序占用双倍内存,通常设定为NO,仅当某些数据分析出错时开启。
设置完毕后,单击OK,进入主菜单:图4:主菜单小角散射分析在主菜单下单击SAXS/GISAXS选项,进入小角散射数据分析界面(可以看出,此部分程序是由粉末衍射程序移植而来)。
图5:小角散射点击INPUT键,输入文件:图6:文件的读入路径的默认值是在FIT2D文件夹下,左侧窗口可选择上一层或下一层文件夹,右侧显示文件名。
注意:所有操作均为单击,与通常windows习惯不同。
图7:示例(衍射图)文件打开后程序界面如图7 所示,其主要功能均以下方按键形式定义,下文将主要介绍两种数据采集模式。
确定光束线中心点点击BEAM CENTER,进入子菜单。
图8:BEAM CENTER本软件提供的定位方法包括2维高斯拟合、平均值定位、圆环定位、椭圆环定位等。
常用的是2维高斯拟合,首先点击2D GAUSSIAN FIT:图9:选择束线中心根据图形概略的选择束线中心的位置,注意不能偏差太多。
图10:得到光束线中心计算完毕,自动退回到小角散射界面。
求解光束线中心是一项重要的准备工作,下文将要介绍的两种数据采集模式都需要确定光束线中心。
点——GL_POINTS表示。
线——GL_LINES表示。
一连串线——GL_LINE_STRIP表示。
用线组成的环——GL_LINE_LOOP表示。
多边形——用GL_POLYGON表示。
三角形——用GL_TRIANGLES表示。
若干三角形串起来的——GL_TRIANGLE_STRIP表示。
若干三角形组成扇形——GL_TRIANGLE_FAN表示。
四边形——GL_GUADS表示。
若干四边形串起来——GL_QUAD_STRIP表示View.hprotected:CDC *m_pDC;HGLRC m_hRC;Void DrawScene();BOOL SetupPixelFormat(PIXELFORMATDESCRIPTOR *pPFD=0);BOOL CCTY817View::PreCreateWindow(CREATESTRUCT& cs){// TODO: Modify the Window class or styles here by modifying// the CREATESTRUCT cscs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN;return CView::PreCreateWindow(cs);}void CCTY817View::OnDraw(CDC* pDC){CCTY817Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereDrawPoints();}CCTY817Doc* CCTY817View::GetDocument() // non-debug version is inline {ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCTY817Doc)));return (CCTY817Doc*)m_pDocument;}void CCTY817View::OnDestroy(){CView::OnDestroy();// TODO: Add your message handler code hereif(wglMakeCurrent(0,0) == FALSE)::AfxMessageBox( "wglMakeCurrent failed" );if(m_hRC && (wglDeleteContext(m_hRC)== FALSE))::AfxMessageBox( "wglDeleteContext failed" );if(m_pDC)delete m_pDC;}int CCTY817View::OnCreate(LPCREATESTRUCT lpCreateStruct) {if (CView::OnCreate(lpCreateStruct) == -1)return -1;// TODO: Add your specialized creation code herem_pDC = new CClientDC(this); // get device contextif( m_pDC == NULL ){::AfxMessageBox( "fail to get device context" );return FALSE;}if( !SetupPixelFormat() ) // setup pixel format{::AfxMessageBox( "SetupPixelFormat failed" );return FALSE;}// get rendering contextif( ( m_hRC = wglCreateContext(m_pDC->GetSafeHdc()) ) == 0 ) {::AfxMessageBox( "wglCreateContext failed" );return FALSE;}// make current rendering contextif( wglMakeCurrent(m_pDC->GetSafeHdc(), m_hRC) == FALSE ) {::AfxMessageBox( "wglMakeCurrent failed" );return FALSE;}return 0;}BOOL CCTY817View::OnEraseBkgnd(CDC* pDC){// TODO: Add your message handler code here and/or call default//return CView::OnEraseBkgnd(pDC);return TRUE;}BOOL CCTY817View::SetupPixelFormat(PIXELFORMATDESCRIPTOR* pPFD){PIXELFORMATDESCRIPTOR pfd = {sizeof( PIXELFORMATDESCRIPTOR ),1,PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL,PFD_TYPE_RGBA,24,0, 0, 0, 0, 0, 0,0, 0, 0,0, 0, 0, 0,16,0, 0,PFD_MAIN_PLANE,0, 0, 0, 0 };int pixelformat;PIXELFORMATDESCRIPTOR* pPFDtoUse;pPFDtoUse = (0 == pPFD)? &pfd : pPFD;if ( 0 == ( pixelformat = ::ChoosePixelFormat( m_pDC->GetSafeHdc(), pPFDtoUse ) ) ) {::AfxMessageBox( "ChoosePixelFormat failed" );return FALSE;}if ( FALSE == ::SetPixelFormat( m_pDC->GetSafeHdc(), pixelformat, pPFDtoUse ) ) {::AfxMessageBox( "SetPixelFormat failed" );return FALSE;}return TRUE;}void CCTY817View::OnSize(UINT nType, int cx, int cy) {CView::OnSize(nType, cx, cy);glViewport(0,0,cx,cy);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0,500,0,500);}2D图形实心矩形void CCTY817View::DrawPolygon(){CRect rect;this->GetWindowRect(rect);Draw2D(rect.Width(),rect.Height());glClearColor(1.0f,1.0f,1.0f,1.0f);glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0f,0.0f,0.0f);glBegin(GL_POLYGON);glVertex2f(100,100);glVertex2f(100,200);glVertex2f(200,200);glVertex2f(200,100);glEnd();glFlush();}四个点void CCTY817View::DrawPoints(){CRect rect;this->GetWindowRect(rect);Draw2D(rect.Width(),rect.Height());glClearColor(1.0f,1.0f,1.0f,1.0f);glClear(GL_COLOR_BUFFER_BIT);glPointSize(5.0);glBegin(GL_POINTS);glColor3f(1.0f,0.0f,0.0f);glVertex2f(100,100);glColor3f(0.0f,1.0f,0.0f);glColor3f(0.0f,0.0f,1.0f);glVertex2f(200,200);glColor3f(0.0f,0.0f,0.0f);glVertex2f(200,100);glEnd();glFlush();}两条线void CCTY817View::DrawLines(){CRect rect;this->GetWindowRect(rect);Draw2D(rect.Width(),rect.Height());glClearColor(1.0f,1.0f,1.0f,1.0f);glClear(GL_COLOR_BUFFER_BIT);glLineWidth(5.0);glBegin(GL_LINES);glColor3f(1.0f,0.0f,0.0f);glVertex2f(100,100);glColor3f(0.0f,1.0f,0.0f);glVertex2f(100,200);glColor3f(0.0f,0.0f,1.0f);glVertex2f(200,200);glColor3f(0.0f,0.0f,0.0f);glVertex2f(200,100);glEnd();glFlush();}不封闭矩形void CCTY817View::DrawLineStrip() {CRect rect;this->GetWindowRect(rect);Draw2D(rect.Width(),rect.Height());glClearColor(1.0f,1.0f,1.0f,1.0f);glClear(GL_COLOR_BUFFER_BIT);glLineWidth(5.0);glBegin(GL_LINE_STRIP);glColor3f(1.0f,0.0f,0.0f);glVertex2f(100,100);glColor3f(0.0f,1.0f,0.0f);glColor3f(0.0f,0.0f,1.0f);glVertex2f(200,200);glColor3f(0.0f,0.0f,0.0f);glVertex2f(200,100);glEnd();glFlush();}封闭矩形void CCTY817View::DrawLineLoop() {CRect rect;this->GetWindowRect(rect);Draw2D(rect.Width(),rect.Height());glClearColor(1.0f,1.0f,1.0f,1.0f);glClear(GL_COLOR_BUFFER_BIT);glLineWidth(5.0);glBegin(GL_LINE_LOOP);glColor3f(1.0f,0.0f,0.0f);glVertex2f(100,100);glColor3f(0.0f,1.0f,0.0f);glVertex2f(100,200);glColor3f(0.0f,0.0f,1.0f);glVertex2f(200,200);glColor3f(0.0f,0.0f,0.0f);glVertex2f(200,100);glEnd();glFlush();}虚线矩形void CCTY817View::DrawLineStipple() {CRect rect;this->GetWindowRect(rect);Draw2D(rect.Width(),rect.Height());glClearColor(1.0f,1.0f,1.0f,1.0f);glClear(GL_COLOR_BUFFER_BIT);glEnable(GL_LINE_STIPPLE);glLineWidth(5.0);glLineStipple(3,0xcccc);glBegin(GL_LINE_LOOP);glColor3f(1.0f,0.0f,0.0f);glColor3f(0.0f,1.0f,0.0f);glVertex2f(100,200);glColor3f(0.0f,0.0f,1.0f);glVertex2f(200,200);glColor3f(0.0f,0.0f,0.0f);glVertex2f(200,100);glEnd();glDisable(GL_LINE_STIPPLE);glFlush();}实心三角形void CCTY817View::DrawTriangles() {CRect rect;this->GetWindowRect(rect);Draw2D(rect.Width(),rect.Height());glClearColor(1.0f,1.0f,1.0f,1.0f);glClear(GL_COLOR_BUFFER_BIT);glLineWidth(1.0);glBegin(GL_TRIANGLES);glColor3f(1.0f,0.0f,0.0f);glVertex2f(100,100);glColor3f(0.0f,1.0f,0.0f);glVertex2f(100,200);glColor3f(0.0f,0.0f,1.0f);glVertex2f(200,200);glColor3f(0.0f,0.0f,0.0f);glVertex2f(200,100);glEnd();glFlush();}交叠三角形void CCTY817View::DrawTriangleStrip() {CRect rect;this->GetWindowRect(rect);Draw2D(rect.Width(),rect.Height());glClearColor(1.0f,1.0f,1.0f,1.0f);glClear(GL_COLOR_BUFFER_BIT);glLineWidth(1.0);glBegin(GL_TRIANGLE_STRIP);glColor3f(1.0f,0.0f,0.0f);glVertex2f(100,100);glColor3f(0.0f,1.0f,0.0f);glVertex2f(100,200);glColor3f(0.0f,0.0f,1.0f);glVertex2f(200,200);glColor3f(0.0f,0.0f,0.0f);glVertex2f(200,100);glEnd();glFlush();}实心矩形void CCTY817View::DrawTriangleFan(){CRect rect;this->GetWindowRect(rect);Draw2D(rect.Width(),rect.Height());glClearColor(1.0f,1.0f,1.0f,1.0f);glClear(GL_COLOR_BUFFER_BIT);glLineWidth(1.0);glBegin(GL_TRIANGLE_FAN);glColor3f(1.0f,0.0f,0.0f);glVertex2f(100,100);glColor3f(0.0f,1.0f,0.0f);glVertex2f(100,200);glColor3f(0.0f,0.0f,1.0f);glVertex2f(200,200);glColor3f(0.0f,0.0f,0.0f);glVertex2f(200,100);glEnd();glFlush();}两个三角形框void CCTY817View::DrawQuads(){CRect rect;this->GetWindowRect(rect);Draw2D(rect.Width(),rect.Height());glClearColor(1.0f,1.0f,1.0f,1.0f);glClear(GL_COLOR_BUFFER_BIT);glLineWidth(1.0);glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);glColor3f(1.0f,0.0f,0.0f);glBegin(GL_QUADS);glVertex2f(100,100);glVertex2f(100,200);glVertex2f(200,200);glVertex2f(200,100);glVertex2f(300,100);glVertex2f(300,200);glVertex2f(400,200);glVertex2f(400,100);glEnd();glFlush();}两个矩形框void CCTY817View::DrawQuadStrip(){CRect rect;this->GetWindowRect(rect);Draw2D(rect.Width(),rect.Height());glClearColor(1.0f,1.0f,1.0f,1.0f);glClear(GL_COLOR_BUFFER_BIT);glLineWidth(1.0);glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);glColor3f(1.0f,0.0f,0.0f);glBegin(GL_QUAD_STRIP);glVertex2f(100,100);glVertex2f(100,200);glVertex2f(200,100);glVertex2f(200,200);glVertex2f(300,100);glVertex2f(300,200);glVertex2f(400,100);glVertex2f(400,200);glEnd();glFlush();}三个矩形框void CCTY817View::DrawPolygon2(){CRect rect;this->GetWindowRect(rect);Draw2D(rect.Width(),rect.Height());glClearColor(1.0f,1.0f,1.0f,1.0f);glClear(GL_COLOR_BUFFER_BIT);glLineWidth(1.0);glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);glColor3f(1.0f,0.0f,0.0f);glBegin(GL_POLYGON);glVertex2f(100,100);glVertex2f(100,200);glVertex2f(200,200);glVertex2f(300,200);glVertex2f(400,200);glVertex2f(400,100);glVertex2f(300,100);glVertex2f(200,100);glEnd();glFlush();}长矩形框void CCTY817View::DrawQuadStrip2(){CRect rect;this->GetWindowRect(rect);Draw2D(rect.Width(),rect.Height());glClearColor(1.0f,1.0f,1.0f,1.0f);glClear(GL_COLOR_BUFFER_BIT);glLineWidth(1.0);glColor3f(1.0f,1.0f,0.0f);glBegin(GL_QUAD_STRIP);glVertex2f(100,100);glVertex2f(100,200);glVertex2f(200,100);glVertex2f(200,200);glVertex2f(300,100);glVertex2f(300,200);glVertex2f(400,100);glVertex2f(400,200);glEnd();glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);glColor3f(1.0f,0.0f,0.0f);glBegin(GL_QUAD_STRIP);glVertex2f(100,100);glVertex2f(100,200);glVertex2f(200,100);glVertex2f(200,200);glVertex2f(300,100);glVertex2f(300,200);glVertex2f(400,100);glVertex2f(400,200);glEnd();glFlush();}诡异三角形void CCTY817View::Gasket(){CRect rect;this->GetWindowRect(rect);Draw2D(rect.Width(),rect.Height());glClearColor(1.0f,1.0f,1.0f,1.0f);glClear(GL_COLOR_BUFFER_BIT);glLineWidth(1.0);glColor3f(1.0f,0.0f,0.0f);typedef GLfloat point2[2];/* arbitrary triangle */point2 vertices[3] = {{0.0,0.0},{250.0,500.0},{500.0,0.0}};/* any desired initial point */point2 p = {75.0,75.0};for(int i=0; i<5000; i++) {/* pick a random vertex from 0,1,2 */int j=rand()%3;/* compute new point */p[0] = (p[0]+vertices[j][0])/2.0;p[1] = (p[1]+vertices[j][1])/2.0;/* display new point */glBegin(GL_POINTS);glVertex2fv(p);glEnd();}glFlush();}。