Delphi下OpenGL2d绘图之画线的方法_Delphi

一、前言:

Delphi画线方法与画点基本上是相同的。区别在于glBegin()的参数。绘制的框架代码可以参考Delphi下OpenGL2d绘图初始化中的代码,地址为http://www.jb51.net/article/52141.htm。修改的部份为 Draw 函数的内容。

二、画线步骤:

GL_LINES:把每一个顶点作为一个独立的线段,顶点2n-1和2n之间共定义了n条线段,总共绘制N/2条线段
GL_LINE_STRIP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,第n和n+1个顶点定义了线段n,总共绘制n-1条线段
GL_LINE_LOOP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,然后最后一个顶点和第一个顶点相连,第n和n+1个顶点定义了线段n,总共绘制n条线段

画线可能用到以下函数:

glLineWidth() 设置线条宽度
glShadeModel() 设置颜色过渡模式
glColor3f() 设置线条颜色

procedure TForm1.Draw;begin  // 清空缓冲区  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);  // ----------- GL_LINES -----------  // 设置线宽  glLineWidth(5);  // 两点间渐变色  glShadeModel(GL_SMOOTH);  glBegin(GL_LINES);  // 画线  // 设置起点线的颜色  glColor3f(1, 0, 0);  // 绘制起点  glVertex2f(50, 50);  // 设置末点线的颜色  glColor3f(0, 0, 1);  // 绘画末点  glVertex2f(200, 200);  glEnd;  // 两点间同颜色  glShadeModel(GL_FLAT);  glBegin(GL_LINES);  glColor3f(0, 1, 0);  glVertex2f(200, 50);  glColor3f(1, 1, 0);  glVertex2f(50, 200);  glEnd;  // ----------- GL_LINE_LOOP -----------  // 三个点闭环形成一个三角形  glShadeModel(GL_SMOOTH); 不起作用  glLineWidth(1);  glBegin(GL_LINE_LOOP);  glColor3f(0, 0, 1);  glVertex2f(250, 50);  glVertex2f(250, 200);  glVertex2f(280, 150);  glEnd;  // ----------- GL_LINE_STRIP -----------  // 多点折线    glShadeModel(GL_SMOOTH); 不起作用  glLineWidth(1);  glBegin(GL_LINE_STRIP);  glColor3f(1, 0, 255);  glVertex2f(350, 50);  glVertex2f(400, 200);  glVertex2f(480, 150);  glVertex2f(490, 60);  glEnd;  SwapBuffers(FDC); //交换双缓冲区内容,这将把刚绘制的图形翻印到屏幕上。end;

可以看到第一个X线条颜色渐变的,OpenGL默认情况下是这种样式。opengl中提供了一个函数glShadeModel来决定如何处理这种不同颜色的情况。

glShadeModel(GL_SMOOTH); // 平滑方式,这也是opengl的默认处理方式,实现颜色渐变的效果
glShadeModel(GL_FLAT);  // 单色方式,线段的颜色以某一个顶点的颜色为准,由具体实现决定。为了避免不确定性,应尽量在多边形中使用同一种颜色

经过测试后发现,在GL_LINE_LOOP与GL_LINE_STRIP样式下,渐变效果无效!具体原因有待进一步查明。

另外,OpenGL提供了抗锯齿的功能,函数为

glEnable(GL_LINE_SMOOTH); //启用
glHint(GL_LINE_SMOOTH,GL_NICEST);
glDisable(GL_LINE_SMOOTH); //关闭

使用后发现抗锯齿效果不明显。有待进一步继续再研究。

完整代码点此下载

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索delphi
, 方法
, 绘图
, 画线
OpenGL2d
opengl 2d绘图、opengl画线、ios opengl 画线、android opengl 画线、opengl画线函数,以便于您获取更多的相关知识。

时间: 2024-11-17 09:58:21

Delphi下OpenGL2d绘图之画线的方法_Delphi的相关文章

Delphi下OpenGL2d绘图之画四边形的方法_Delphi

一.前言: Delphi实现画四边形的方法基本上与前几遍文字代码是相同的.其区别知识在于glBegin()的参数"GL_QUADS".绘制的框架代码可以使用Delphi下OpenGL2d绘图初始化中的代码,地址为http://www.jb51.net/article/52141.htm.修改的部份为 Draw 函数的内容. 二.画四边形方法: 使用GL_QUADS:绘制由四个顶点组成的一组单独的四边形.顶点4n-3.4n-2.4n-1和4n定义了第n个四边形.总共绘制N/4个四边形.这

Delphi下OpenGL2d绘图之初始化流程详解_Delphi

一.前言: Delphi默认支持OpenGl,可以使用uses OpenGL单元进行引用,之后就可以使用OpenGL的函数.OpenGl是跨平台的,而且Windows很早就支持并集成在系统中,存在于system32中的opengl32.dll,不需要再额外进行安装.虽然windows本身有d3d,但是其能力有限,相关学习资料页相对较少. 通常OpenGL仅仅支持以下几种基本几何图形:点,线和多边形.没有表面或者更高级的图形(比如球状图形)能被作为基本图形元素绘制.但是它们能够用多边形来完美的模仿

js实现两点之间画线的方法

  本文实例讲述了js实现两点之间画线的方法.分享给大家供大家参考.具体分析如下: 最近有点无聊,琢磨了很久,想到了一消磨时间的点子,也就是做js版的连连看. 两点之间画线也只是连连看最基本功能的一部分,所以我画的线也仅是折线,而且还只能向左折,后面将根据连连看中图片位置点来确定折线的方向. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

js实现两点之间画线的方法_javascript技巧

本文实例讲述了js实现两点之间画线的方法.分享给大家供大家参考.具体分析如下: 最近有点无聊,琢磨了很久,想到了一消磨时间的点子,也就是做js版的连连看. 两点之间画线也只是连连看最基本功能的一部分,所以我画的线也仅是折线,而且还只能向左折,后面将根据连连看中图片位置点来确定折线的方向. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/

Delphi实现获取句柄并发送消息的方法_Delphi

本文以实例形式详细说明了Delphi获取句柄并发送消息的方法,具体用法说明如下: 查找另外一个窗口的句柄: handle := FindWindow(nil,PChar('窗口的标题'));//查到窗体句柄 查找子窗体: childHandle := FindWindowEx(handle,0,'子窗体类','子窗体标题'); 另外有个枚举子窗体的API, EnumChildWindows(主创体句柄,@回调函数,用户参数); 用这个函数需要自己写一个回调的函数,比如: function Enu

Delphi实现窗口文字淡入淡出渐变效果的方法_Delphi

本文所述实例为Dlephi实现的窗口渐变文字效果,文字可以不停的变化,颜色由浅入深,由清淅变模糊,文字渐变的时间可在代码中自己调整.主要实现代码如下: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer;

Word怎么清除页眉中带有的下画线

  在Word中插入页眉,但总是会在下面有一条横线,使用常规方法不能删除.清除下画线的方法如下: 1.确认插入点位于页眉. 2.选择"格式""边框和底纹",打开"边框和底纹". 3.切换到"边框"选项,级那个设置中的选择"无". 4.在"应用于"中选择"段落",单击"确定"即可.

自定义view-Android自定义绘图画线问题

问题描述 Android自定义绘图画线问题 如图所示,从起点处逆时针画圆,当再次回到起点角度时,因为当前时刻该角度半径变化,要求保留该角度当前半径的样子,清除之前的图形,此时其他角度不变,当再次画到其他角度时,与起点角度作一样的处理,该圆使用Path.quadTo方法作成,求教该怎么做 解决方案 不是一出来就是这样的,是从起点动态的画成这样的,有个过程

vb.net2008下画线控件

问题描述 .net下无法画静态线.如何处理. 解决方案 解决方案二:该回复于2011-01-17 13:15:23被版主删除解决方案三: 解决方案四:该回复于2011-01-19 09:02:09被版主删除解决方案五:不就是画一条线吗?creategrphics获取一个graphics.在grasphics里调用drawline就行了.解决方案六:可以用Drawcurve方法去画解决方案七:在窗体上画线PrivateSubButton1_Click(ByValsenderAsSystem.Obj