计算机图形学(二)输出图元_2_ OpenGL画线函数

 OpenGL画线函数

图形软件包一般都提供一个描述一条或多条直线段的函数,其中每一直线段由两个端点坐标位置定义。在OpenGL中,和选择一个点位置一样,我们使用glVertex函数选择单个端点的坐标位置。我们使用一对glBegin/g1End来引入一串端点位置。有三个OpenGL符号常量可用于指定如何把这一串端点位置连接成一组直线段。默认情况下,每一符号常量显示白色实线。

使用图元线常量GL_LINES可连接每一对相邻端点而得到一组直线段。通常,这会导致一组未连接的线段,除非重复某些坐标位置。如果只描述了一个端点则什么也不会显示,如果列出的端点数为奇数则最后一个不被处理。例如、如果我们有5个坐标位置,标成p1到p5,每一个用二维数组表示,则下列程序能生成图3.4(a)。

glBegin(GL_LINES);
    glVertex2iv(p1);
    glVertex2iv(p2);
    glVertex2iv(p3);
    glVertex2iv(p4);
    glVertex2iv(p5);
g1End();

这样,我们在第一和第二坐标位置之间得到一条直线段并在第三和第四位置间得到另一条直线段。此时,指定的端点数为奇数,因此最后一个坐标位置被忽略。

使用OpenGL的图元常量GL_LINE_STRIP,我们可获得折线(polyline )。此时,显示从第一个端点到最后一个端点之间一组首尾相连的线段。第一条线段在第一端点和第二端点之间显示;第二条线段在第二端点和第三端点之间显示;依次进行,直到最后一个端点。如果我们不列出至少两个坐标位置则什么也不显示。使用上例中的5个坐标位置,我们用下列程序显示图3
.4(b)。

glBegin  (GL_LINE_STRIP);
    glVertex2iv (p1);
    glVertex2iv (p2);
    glVertex2iv (p3);
    glVertex2iv (p4};
    g1Vertex2iv (p5);
glEnd();

第三个OpenGL图元常量是生成封闭折线的GL_LINE_LOOP。它在前面的折线基础上再增加了一条直线段,因此折线序列中最后一个端点与第一个端点相连接。图3.4(c)给出了使用这一线选项的显示。

glBegin(GL_LINE_LOOP);
    glVertex2iv(p1);
    glVertex2iv(p2);
    glVertex2iv(p3);
    g1Vertex2iv(p4);
    glVertex2iv(p5);
g1End();

如前所述,世界坐标系中描述的图形部分最终要映射到输出设备的坐标系统中。然后图中的几何信息被扫描转换到像素位置。下一节,我们将看到实现OpenGL画线函数的扫描转换算法。

时间: 2024-11-08 22:15:48

计算机图形学(二)输出图元_2_ OpenGL画线函数的相关文章

计算机图形学(二)输出图元_4_并行画线算法

并行画线算法 本来在word中是有右下数的,一编辑在csdn中编辑就没有了.                            上面讨论过的线段生成算法顺序地确定像素位置.而利用并行计算机,则可通过将计算分割到可用的多个处理器中来得到线段的像素位置.分割问题的一种解决方法是将现有的顺序算法放到多个处理器上.我们也可以寻找其他处理办法,从而使像素位置能以并行方式有效地计算.在设计并行算法中,重要的是要考虑平衡可用处理器间的处理负载. 给定np个处理器,我们可以通过把线段分割成np个子段,并在每

计算机图形学和OpenGL(二)坐标系和绘制点线函数

这节开始前我们先了解一下图元的概念.图形软件包中用来描述各种图形元素的函数称为图形输出原语,也称图元(primitive).而描述对象几何要素的输出图元一般称为几何图元.点和线是最简单的几何图元,本节就会简单介绍点和线段的绘制方法. 一.坐标系统. 坐标系统一般分为屏幕坐标和OpenGL中的绘图坐标. 在上一节中我们简单的写了个示例程序,程序中介绍了gluOrtho2D命令.我们可以利用该命令设定一个二维笛卡尔坐标系.该函数的四个变量制定的是显示图形x和y坐标范围.所以我们可以使用下面代码制定一

图形学复习4——光栅化(画线画圆扫描线反走样算法)

图形学复习 CH7 光栅化 前几章介绍了几何处理和裁剪变换,接下来的步骤就是光栅化 光栅化是将形式表示的几何图元转换为阵列表示的数据片元的过程,片元中每一个像素对应帧缓冲区中的每一个像素 7.1 线段生成算法 (1)DDA画线算法 设直线表达式为y=mx+b,输入直线两端点坐标(x0,y0)和(xend,yend),可以计算出m=yend?y0xend?x0和b=y0?m?x0 DAA是基于微分运算的线段生成算法,其主要计算式便是δy=mδx: 若|m|≤1则x方向的变化大于y方向的变化,以x方

[stm32] 利用uc-gui封装画图和画线函数移植51上的模拟动画

>_<:这里的动画是黄色矩形区域中一个模仿俯视图的起重机运作动画,一个是模仿主视图的吊钩的运动.通过改变初始Init函数中的数据b_x,b_y实现矩形区域的移动.当实时采集时要首先根据起重机的实际情况改变比例,当传感器传来数据时就相当于这里的run函数,只要把传感器数据接收函数和相关函数结合即可. >_<:main code: 1 #include "stdlib.h" 2 #include "GUI.H" 3 /* 4 颜色 5 */ 6

用OpenGL画线

. 两点之间的连线称之为线段,在屏幕上显示线段放在现在已经不是稀奇的事情,大多数高级图形API都可以轻松实现,我尝试用OpenGL画线,在这里记录一下收获. . OpenGL这个级别的图形API,通常会提供一些绘制基本图形的接口,这些基本图形称之为图元,而OpenGL提供了点,线段,三角形三种图元绘制接口,说出来你可能不信,OpenGL就只能绘制这三种图形,本篇博文的主题是画线,OpenGL能直接绘制的图元之一. 用OpenGL绘制线段图元 给出两点的坐标,调用API即可直接画出线段. // 伪

任我行二 - 高德地图篇3 - 画线

随机生成点 目前使用的是随机生成的点来绘制拆线. public void draw() {         Random random = new Random(100);         LatLng start= new LatLng(30.47523,114.385532);         List<LatLng> points = new ArrayList<LatLng>();         int i = 0;         while (i++ < 100

AGG第三十九课 rasterizer_scanline_aa画线函数疑惑

头文件 #include<agg_rasterizer_scanline_aa.h> 类型 template<class Clip =rasterizer_sl_clip_int> class rasterizer_scanline_aa 成员函数 void add_path(VertexSource&vs,unsigned path_id=0)加入顶点源 void reset() 清空上一次的渲染缓存数据,每次调用add_path函数之前都需要执行该操作 其中也提供了简单

Bresenham画线算法

[Bresenham画线算法] Bresenham是一种光栅化算法.不仅可以用于画线,也可以用用画圆及其它曲线. 参考:<计算机图形学>3.5.3 Bresenham画线算法 Bresenham画线算法

计算机图形学DDA画线法+中点画线法+Bresenham画线法

#include <cstdio> #include <cstring> #include <conio.h> #include <graphics.h> void line1(){ line(100, 100, 200, 400); line(100, 400, 200, 100); line(0, 200, 300, 300); line(0, 300, 300, 200); } void lineDDA(int x0, int y0, int x1,