opengl学习指导实验 计算机图形学上机(2)

2019-04-13 22:52

auxInitWindow (\//初始化窗口,设置标题 myinit ();

auxMainLoop(display);

//循环运行display过程,display由用户编写 return(0); }

3、程序说明

每个函数的具体含义在程序注释中已作了叙述,不再多说。

OpenGL的函数在格式上很有特点,它以gl为前缀,并且函数名的最后一个字母指出所用的数据类型,如:glColor3f(),字母f指明要使用浮点数。字母前的数字指明参数个数或指明二维还是三维,如:glVertex2f()是要设置二维的点。

OpenGL采用的是状态机的方式,用户设定一种状态,程序照此运行。如:glBegin(GL_LINES)设定画线状态(GL_LINES是OpenGL已定义好的常量),glColor3f()设定绘图所用颜色。 我们关注的是display()函数,它是我们真正绘图的地方。

函数glColor3f()以RGB方式设置颜色,格式为:glColor3f(red, green, blue),每种颜色值在(0.0, 1.0)之间。为了能显示更多的颜色,最好把系统设置成16位真彩色模式。 函数glVertex2f(x, y)设置二维顶点。

main()函数中的几个aux前缀函数是OpenGL提供的辅助库,用以初始化窗口,大家不必深究,

函数glBegin(UINT State)、glEnd()是最基本的作图函数,下面对它作一介绍。 如上所述,OpenGL是一个状态机,glBegin(UINT State)可以设定如下状态:

GL_POINTS

画点

GL_LINES 画线,每两个顶点(Vertex)为一组 GL_LINE_STRIP 画线,把若干个顶点顺次连成折线 GL_LINE_LOOP 画线,把若干个顶点顺次连成封闭折线 GL_TRIANGLES 画三角形,每三个顶点为一组 GL_QUADS 画四边形,每四个顶点为一组 GL_POLYGON

试一试。

程序可以有多组glBegin()、glEnd()并列的形式,如:

... ...

画多边形

还有GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS_STRIP 等等。大家可以把每一种状态都

glBeing(GL_LINES);

5

......

glEnd();

glBeing(GL_QUADS);

... ...

glEnd(); ... ...

除了上述的基本图元外,函数glRectf(x1, y1, x2, y2)可以画一个矩形,但这个函数不能放在glBegin()和glEnd()之间,下面的两句程序是画一个蓝色的矩形。

glColor3f (0.0f, 0.0f, 1.0f); glRectf(10.0f, 10.0f, 50.0f,50.0f);

6

实验二 二维基本图元的生成

一、实验学时 2学时 二、实验类型 设计型实验 三、实验目的和要求

1、掌握二维基本图元直线段生成的DDA算法,中点算法; 2、掌握二维基本图元圆弧生成的中点算法; 3、掌握对线型线宽的属性的控制。 四、实验内容 1、编程实现DDA、中点算法生成直线

2、中点扫描转换生成圆、椭圆 五、建立工程步骤

1、新建一个项目。

选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32 Console Application项,然后填入你自己的Project name,如Test,回车即可。VC为你创建一个工作区(WorkSpace),你的项目Test就放在这个工作区里。

2、为项目添加文件

为了使用OpenGL,我们需要在项目中加入三个相关的Lib文件:glu32.lib、glaux.lib、opengl32.lib,这三个文件位于c:\\program files\\Microsoft Visual Studio\\vc98\\lib目录中。

选中菜单Project->Add To Project->Files项(或用鼠标右键),把这三个文件加入项目,在FileView中会有显示。这三个文件请务必加入,否则编译时会出错。或者将这三个文件名添加到Project->Setting->Link->Object/library Modules 即可。

点击工具条中New Text File按钮,新建一个文本文件,存盘为Test.c作为你的源程序文件,再把它加入到项目中,然后就可以开始编程了。

增量法画直线

void CALLBACK dda(void) {

int x1=10; int x2=400; int y1=10; int y2=500; int k,i;

float x, y, dx, dy; k = abs(x2-x1); if (abs(y2-y1)>k) k = abs(y2-y1); dx = (float)(x2-x1)/k; dy = (float)(y2-y1)/k; x = (float)x1; y = (float)y1;

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

//开始画一根白线

//清除缓存

glBegin(GL_LINES); //设置颜色为白色

//设置第一根线的两个端点,请注意:OpenGL坐标系的原点是在屏幕左下角 for(i = 0; i

7

{ glVertex2f((int)(x), (int)(y));

glVertex2f((int)(x+dx), (int)(y+0.5+dy));

//g.drawLine((int)(x+.5f), (int)(y+.5f), (int)(x+.5f), (int)(y+.5f));

x = x+dx; y = y+dy;

glColor3f (1.0f, 1.0f, 1.0f);

}

glEnd();

//画线结束

glFlush (); //绘图结束

}

//中点法画直线

//void CALLBACK bresenham(Graphics g, int xs, int ys, int xe, int ye) void CALLBACK bresenham(void) { int xs=10; int xe=400; int ys=10; int ye=500; int i;

int dx = xe-xs; int dy = ye-ys; int e = 2*dy-dx; int x = xs; int y = ys;

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

//清除缓存

glBegin(GL_LINES);

//开始画一根白线

glColor3f(1.0f, 1.0f, 1.0f);

for( i= 0;i < dx; i++) { glVertex2f((int)(x), (int)(y)); if(e>=0) {

y=y+1;

e=e-2*dx; } x=x+1; e=e+2*dy;

glVertex2f((int)(x), (int)(y)); //画点(x, y)

glColor3f (1.0f, 1.0f, 1.0f);

}

glEnd();

//画线结束 glFlush ();

//绘图结束

}

8

//中点法画圆

//void bresenham_arc(Graphics g,int radius) void CALLBACK bresenham_arc(void) { int radius= 200; int x,y,d; x = 0; y = radius; d = 3-2*radius;

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

//清除缓存

glBegin(GL_LINES);

//开始画一根白线

glColor3f(1.0f, 1.0f, 1.0f);

while (x < y) {

glVertex2f((int)(x), (int)(y));

if(d<0) d=d+4*x+6; else

{ d=d+4*(x-y)+10; y--; }

x++;

glVertex2f((int)(x), (int)(y));

glColor3f (1.0f, 1.0f, 1.0f);

}

glColor3f (1.0f, 1.0f, 1.0f); if(x == y)

{

glVertex2f((int)(x), (int)(y));

glVertex2f((int)(x), (int)(y));

}

glEnd();

//画线结束 glFlush (); //绘图结束 } // //主过程:

// 初始化Windows的窗口界面 // 并初始化OpenGL场景,绘图 int main(int argc, char** argv) {

auxInitDisplayMode (AUX_RGB);

//初始化显示模式,采用RGB彩色系统。

auxInitPosition (0, 0, 400, 850); //初始化窗口位置、大小 auxInitWindow (\//初始化窗口,设置标题 myinit ();

//auxMainLoop(dda);

//auxMainLoop(bresenham);

9


opengl学习指导实验 计算机图形学上机(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:仪器分析习题(色谱)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: