南邮计算机图形学实验报告(完整版)

  • 格式:doc
  • 大小:62.50 KB
  • 文档页数:9

下载文档原格式

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

实验报告

实验名称指导教师

实验类型综合实验学时 2 实验时间

一、实验目的和要求

能够灵活的运用OpenGL图形API函数,基于C++程序语言,自行设计出各种各样的计算机图形方案并调整不同的透视模型。学会配置OpenGL 图形函数API,设计(1)在屏幕上显示基本3D图形;(2)设置图形的表面光照模型及投影变换模型。

1.所有图形(例如球体,正方体)有清晰的轮廓。

2.学会设置图形表面的光照色彩以及投影变换模型。

3.尽可能采用高效的算法,以降低时间复杂性和空间复杂性。

二、实验环境(实验设备)

硬件:微机

软件:vs2012

实验报告三、实验过程描述与结果分析

实验代码:

#include

// 绘制立方体

// 将立方体的八个顶点保存到一个数组里面static const float vertex_list[][3] =

{

-0.5f, -0.5f, -0.5f,

0.5f, -0.5f, -0.5f,

-0.5f, 0.5f, -0.5f,

0.5f, 0.5f, -0.5f,

-0.5f, -0.5f, 0.5f,

0.5f, -0.5f, 0.5f,

-0.5f, 0.5f, 0.5f,

0.5f, 0.5f, 0.5f,

};

// 将要使用的顶点的序号保存到一个数组里面static const GLint index_list[][2] =

{

{0, 1},

{2, 3},

{4, 5},

{6, 7},

{0, 2},

{1, 3},

{4, 6},

{5, 7},

{0, 4},

{1, 5},

{7, 3},

{2, 6}

};

//光照模型

void init(void)

{

GLfloat ambient[] = { 0.0, 0.0, 0.0, 1.0 };

GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 };

GLfloat position[] = { 0.0, 3.0, 2.0, 0.0 };

GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 1.0 };

GLfloat local_view[] = { 0.0 };

glClearColor(0.0, 0.1, 0.1, 0.0);

glEnable(GL_DEPTH_TEST);

glShadeModel(GL_SMOOTH);

glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);

glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);

glLightfv(GL_LIGHT0, GL_POSITION, position);

glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);

glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view);

glEnable(GL_LIGHTING);

glEnable(GL_LIGHT0);

}

// 绘制立方体

void DrawCube(void)

{

int i,j;

glBegin(GL_LINES);

for(i=0; i<12; ++i) // 12 条线段

{

for(j=0; j<2; ++j) // 每条线段2个顶点

{

glVertex3fv(vertex_list[index_list[i][j]]);

}

}

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

glVertex2f(0.0f, 0.0f);

for(i=0; i<=8; ++i)

{

glColor3f(i&0x04, i&0x02, i&0x01);

}

glEnd();

}

static float rotate = 0;

static int times = 0;

void renderScene(void)

{

int w;int h;

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glMatrixMode(GL_PROJECTION);

// gluPerspective(45.0f,0.5,0.1f,200.0f);

// glMatrixMode(GL_MODELVIEW);

// glLoadIdentity();

// gluPerspective()

glPushMatrix();

// glTranslatef(-0.2, 0, 0); // 平移

// glScalef(2, 1, 1); // 缩放

times++;

if(times > 100)

{

times = 0;

}

if(times % 100 == 0)

{

rotate += 0.3;

}

glRotatef(rotate, 0, 1, 0);

glRotatef(rotate, 1, 0, 0);

glColor3f(1, 0, 0);

DrawCube();

glPopMatrix();

glutSwapBuffers();

}

void main(int argc, char **argv)

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);