计算机图形学报告 (1)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机图形学实验报告

院系:计算机科学学院

专业:计算机科学与技术

学号:201003784

姓名:张林峰

班级:计科1002

设计时间:2012.10.22

设计地点:4#2号机房

指导教师:严圣华

目录

一、实验目的---------------------------------------1

二、应用程序的最终界面---------------------------1

三、图形绘制----------------------------------------2

1、绘制剑-----------------------------------2

2、绘制八卦------------------------------------2

四、视口和转动------------------------------------4

五、完整代码------------------------------------------4

六、实验小结--------------------------------------6

一、实验目的

学习了计算机图形学后,我们要掌握一些基本的绘图方法,画点、画线、、画矩形,画圆等,以及实现一些基本的功能,如:缩放、平移、旋转、人机交互等等。

二、应用程序的最终界面

三、图形绘制

1、绘制剑

要画一个由线条形成的剑,先要画出组成这些线条的点,OpenGL 要求:指定顶点的命令必须包含在glBegin函数之后,glEnd函数之前(否则指定的顶点将被忽略)。并由glBegin来指明如何使用这些点。用glBegin(GL_LINE_LOOP)来将这些点组成封闭的线,经过我的多次实验发现,在代码中画这些点的函数要按顺序摆放,按图形中点逆时针顺序写这些点的函数。实现剑的绘制代码如下:glBegin(GL_LINE_LOOP);

glVertex2f(0.0f, 1.0f);

glVertex2f(-0.1f, 0.8f);

glVertex2f(-0.1f, -0.4f);

glVertex2f(-0.2f, -0.4f);

glVertex2f(-0.3f, -0.6f);

glVertex2f(-0.1f, -0.6f);

glVertex2f(-0.1f, -0.9f);

glVertex2f(0.1f, -0.9f);

glVertex2f(0.1f, -0.6f);

glVertex2f(0.3f, -0.6f);

glVertex2f(0.2f, -0.4f);

glVertex2f(0.1f, -0.4f);

glVertex2f(0.1f, 0.8f);

glEnd();

3、绘制八卦

首先八卦是由一个大圆,两个半圆弧,两个小圆组成。画圆的函数可以用glBegin(GL_LINE_LOOP);

for(i=0; i

glV ertex2f(0.1*R*cos(2*Pi/n*i), 0.1*R*sin(2*Pi/n*i)-0.55f);

glEnd();

来实现。半圆也可以用画圆的函数实现,当然还要加一些限制。我开始想到的是用if语句来限制圆,使他成为半圆。

for(i=0; i

if(0.05f*cos(2*Pi/n*i)<0)

glVertex2f(0.05f*cos(2*Pi/n*i), 0.05f*sin(2*Pi/n*i)-0.45);

这是横坐标小于0的那部分半圆。画左边那个半圆成功了。但是画右边那个时出现了问题。后来想了想,控制i的范围来画那段圆弧的更好。圆心的位置可以在纵坐标上加减来进行适当调整。画八卦的完整代码就这样横空出世了:

glBegin(GL_LINE_STRIP);

for(i=90; i<270; ++i)

glVertex2f(0.05f*cos(2*Pi/n*i), 0.05f*sin(2*Pi/n*i)-0.45);

glEnd();

glBegin(GL_LINE_STRIP);

for(i=-90; i<90; ++i)

glVertex2f(0.05f*cos(2*Pi/n*i), 0.05f*sin(2*Pi/n*i)-0.55f);

glEnd();

glBegin(GL_LINE_STRIP);

glBegin(GL_LINE_LOOP);

for(i=0; i

glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i)-0.5f);

glEnd();

glBegin(GL_LINE_LOOP);

for(i=0; i

glVertex2f(0.1*R*cos(2*Pi/n*i), 0.1*R*sin(2*Pi/n*i)-0.45f);

glEnd();

glBegin(GL_LINE_LOOP);

for(i=0; i

glVertex2f(0.1*R*cos(2*Pi/n*i), 0.1*R*sin(2*Pi/n*i)-0.55f);

glEnd();

其中n=360,对应圆的360度。

四、视口与转动

视口,所画图形在人视觉上的投影,可以通过gluPerspective(30.0, (GLfloat) w/(GLfloat) h, 0.1, 20.0)来实现。

相关文档
最新文档