一、前言

画线与画点基本上代码是相同。区别在于glBegin()的参数。绘制的框架代码可以使用 Delphi下OpenGL2d绘图(01)-初始化 中的代码。修改的部份为 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();
// 两点间渐变色
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES); // 画线
// 设置起点线的颜色
glColor3f(, , );
// 绘制起点
glVertex2f(, );
// 设置末点线的颜色
glColor3f(, , );
// 绘画末点
glVertex2f(, );
glEnd;
// 两点间同颜色
glShadeModel(GL_FLAT);
glBegin(GL_LINES);
glColor3f(, , );
glVertex2f(, );
glColor3f(, , );
glVertex2f(, );
glEnd; // ----------- GL_LINE_LOOP -----------
// 三个点闭环形成一个三角形 glShadeModel(GL_SMOOTH); 不起作用
glLineWidth();
glBegin(GL_LINE_LOOP);
glColor3f(, , );
glVertex2f(, );
glVertex2f(, );
glVertex2f(, );
glEnd; // ----------- GL_LINE_STRIP -----------
// 多点折线 glShadeModel(GL_SMOOTH); 不起作用
glLineWidth();
glBegin(GL_LINE_STRIP);
glColor3f(, , );
glVertex2f(, );
glVertex2f(, );
glVertex2f(, );
glVertex2f(, );
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); //关闭

使用后发现抗锯齿效果不明显。又是我的问题?以后再研究。

源码下载:http://files.cnblogs.com/lin557/OpenGL_03.zip

2014-06-26 by lin

Delphi下OpenGL2d绘图(03)-画线的更多相关文章

  1. Delphi下OpenGL2d绘图(02)-画点

    一.前言 图形的绘制可以使用glBegin().glEnd()之间完成,绘制的框架代码可以使用 Delphi下OpenGL2d绘图(01)-初始化 中的代码.修改的部份为 Draw 函数的内容. 二. ...

  2. Delphi下OpenGL2d绘图(04)-画四边形

    一.前言 画四边形基本上与前几遍文字代码是相同.区别在于glBegin()的参数“GL_QUADS”.绘制的框架代码可以使用 Delphi下OpenGL2d绘图(01)-初始化 中的代码.修改的部份为 ...

  3. Delphi下OpenGL2d绘图(06)-画图(多窗口、多视图、多个DC)

    一.前言 在学习OpenGL的过程中,发现很多函数都是全局的.前面几章中都是在一个窗口DC中画图,那么要在多个窗口画图,需要怎么处理呢?网上方法有多种,这里采用其中一种,利用wglMakeCurren ...

  4. Delphi下OpenGL2d绘图(05)-画图片Bmp

    一.前言 找了不少资料,要画图片要先处理一下,需要引用别的单元,Delphi中没带,需要另外下载Gl.pas.看网上说是自带的OpenGl单元封装的是1.0版的,有此函数未声明.网上可以找到Gl.pa ...

  5. Delphi下OpenGL2d绘图(01)-初始化

    一.前言: Delphi默认支持OpenGl,可以uses OpenGL单元进行引用,便可以使用OpenGL的函数.OpenGl是跨平台的,而且Windows很早就支持并集成在系统中,存在于syste ...

  6. 两种画线算法(DDA&Bersenham)

    DDA(digital differential analyzer) 由直线的斜截式方程引入 对于正斜率的线段,如果斜率<=1,则以单位x间隔(δx=1)取样,并逐个计算每一个y值 Yk+1 = ...

  7. 用 eric6 与 PyQt5 实现python的极速GUI编程(系列03)---- Drawing(绘图)(3)-- 画线

    [概览] 本文实现如下的程序:(在窗体中绘画出各种不同风格的线条) 主要步骤如下: 1.在eric6中新建项目,新建窗体 2.(自动打开)进入PyQt5 Desinger,编辑图形界面,保存 3.回到 ...

  8. HTML5自学笔记[ 12 ]canvas绘图小示例之鼠标画线

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  9. DELPHI下API简述(1800个API)

    DELPHI下API简述 http://zero.cnbct.org/show.asp?id=144 auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属 ...

随机推荐

  1. rpm包的安装,查询,卸载,升级,校验,数据库重建,验证数据包

    rpm命名: 包:组成部分 主包:bind-9.7.1-1.i586.e15.rpm 子包:bind-lib-9.7.1-1.i586.e15.rpm bind-utils-9.7.1-1.i586. ...

  2. Mycat SqlServer Do not have slave connection to use, use master connection instead

    Do not have slave connection to use, use master connection instead 很奇怪啊 都是按照配置配置的 怎么就是不通呢 有点怀疑人生了吧 其 ...

  3. 浅谈由管理者角色引出的B端产品设计思考点

    本文来自网易云社区 作者:任琼瑶 最近一直都在持续跟进云课堂B端的交互设计,在此期间,多多少少遇到了一些不曾遇到过的问题,虽然同是做产品设计,但B端和C端产品的确存在很多不同之处. 首先,当我们在做C ...

  4. Exp1 PC平台逆向破解 20164323段钊阳

    实验目标 学习两种方法运行代码片段,并学习如何注入运行任何Shellcode. 三个实验内容如下: 1.手工修改可执行文件,改变程序执行流程,直接跳转到getshell函数 2.利用foo函数的bof ...

  5. MVC框架入门准备(二) - 语言包类与工厂模式

    语言包类: 相关配置项 LANG_FOLDER : 语言包目录名,默认为Lang LANG_AUTO : 自动识别语言,默认为true DEFAULT_LANG : 默认语言,默认为zh-cn方法 取 ...

  6. 【bash】今天你坑队友了吗

    需求: 压缩日志并删除压缩过的文件 很日常的运维需求!!! 好,来看代码 echo 'start' quke.log rm -f quke.log echo 'delete' 不管是初级运维还是高级运 ...

  7. 【bug】—— IE8 ajax 报错:no transport

    如题,我使用$.ajax()方法请求数据,在现代浏览器中工作正常,但在 IE 8 下,会有报错:no transport 从 stackoverflow 中获知,出现这个问题是因为** IE 8 不支 ...

  8. python数据类型详解(全面)

    python数据类型详解 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8.字典9.日期 1.字符串1.1.如何在Python中使用字符串a.使用单引号(')用单引号括起来表示字 ...

  9. leetcode-217-Contains Duplicate(使用排序来判断整个数组有没有重复元素)

    题目描述: Given an array of integers, find if the array contains any duplicates. Your function should re ...

  10. Win10将用户名修改为英文

    前言 最近重装了一次Win10系统,手贱地在引导里设置了中文的用户名.使用微软账户进行登录后,Win10以这个中文名建立了用户的文件夹,使得少数软件安装或使用过程中,保存路径不支持中文路径,从而报错, ...