计算机图形学实验报告二.docx

上传人:b****1 文档编号:20122280 上传时间:2023-04-25 格式:DOCX 页数:18 大小:253.98KB
下载 相关 举报
计算机图形学实验报告二.docx_第1页
第1页 / 共18页
计算机图形学实验报告二.docx_第2页
第2页 / 共18页
计算机图形学实验报告二.docx_第3页
第3页 / 共18页
计算机图形学实验报告二.docx_第4页
第4页 / 共18页
计算机图形学实验报告二.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

计算机图形学实验报告二.docx

《计算机图形学实验报告二.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验报告二.docx(18页珍藏版)》请在冰豆网上搜索。

计算机图形学实验报告二.docx

计算机图形学实验报告二

《计算机图形学》实验报告

一、实验目的

1、使用opengl函数写一个控制台程序,要求输出一些简单的三维图形,包括:

球体、圆锥、立方体、茶壶等。

2、使用opengl函数写一个程序,要求实现对一个图形的平移、旋转和缩放的处理

3、使用opengl函数写一个控制台程序,要求实现对鼠标、键盘、窗口缩放等事件的处理。

4,在显示窗口的左下1/4处显示一个球的1/2.

 

二、实验要求

1.掌握Window图形编程的基本方法;

2.使用opengl编写控制程序

3.掌握如何进行图形变化

 

三、实验设备(环境)

 

Windows系统,vs2017

 

四、实验内容与步骤

1、使用opengl函数写一个控制台程序,要求输出一些简单的三维图形,包括:

球体、圆锥、立方体、茶壶等。

圆锥:

 

代码:

voiddisplay(void)

{

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glColor3f(0.0,1.0,0.0);//绿色绘制

glEnable(GL_DEPTH_TEST);//深度缓冲区

glutWireCone(2.5,3,30,4);//绘制圆锥

glFlush();

glutSwapBuffers();

}

voidreshape(intw,inth)

{

glViewport(0,0,w,h);//设置视口

glMatrixMode(GL_PROJECTION);//将当前矩阵指定为投影模式

glLoadIdentity();

 

gluPerspective(60,(GLfloat)w/(GLfloat)h,1.0,20);//创建透视投影矩阵

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(0,5,5,0,0,0,0,-1,0);//观测点

}

 

茶壶

voiddisplay(void)

{

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glColor3f(0.0,1.0,0.0);//绿色绘制

glEnable(GL_DEPTH_TEST);//深度缓冲区

glutWireTeapot

(2);//绘制茶壶

glFlush();

glutSwapBuffers();

}

voidreshape(intw,inth)

{

glViewport(0,0,w,h);//设置视口

glMatrixMode(GL_PROJECTION);//将当前矩阵指定为投影模式

glLoadIdentity();

 

gluPerspective(60,(GLfloat)w/(GLfloat)h,1.0,20);//创建透视投影矩阵

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(0,5,5,0,0,0,0,1,0);//观测点

}

voiddisplay(void)

{

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glColor3f(0.0,1.0,0.0);//绿色绘制

glEnable(GL_DEPTH_TEST);//深度缓冲区

glutWireSphere(1,20,16);//绘制球体

glFlush();

glutSwapBuffers();

}

voidreshape(intw,inth)

{

glViewport(0,0,w,h);//设置视口

glMatrixMode(GL_PROJECTION);//将当前矩阵指定为投影模式

glLoadIdentity();

 

gluPerspective(60,(GLfloat)w/(GLfloat)h,1.0,20);//创建透视投影矩阵

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(0,3,3,0,0,0,1,1,0);//观测点

}

立方体

voiddisplay(void)

{

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glColor3f(0.0,1.0,0.0);//绿色绘制

glEnable(GL_DEPTH_TEST);//深度缓冲区

glutWireCube(3);//绘制立方体

glFlush();

glutSwapBuffers();

}

voidreshape(intw,inth)

{

glViewport(0,0,w,h);//设置视口

glMatrixMode(GL_PROJECTION);//将当前矩阵指定为投影模式

glLoadIdentity();

gluPerspective(60,(GLfloat)w/(GLfloat)h,1.0,20);//创建透视投影矩阵

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(0,5,5,0,0,0,1,1,0);//观测点

}

 

2、使用opengl函数写一个程序,要求实现对一个图形的平移、旋转和缩放的处理

以茶壶为例进行

voidreshape(intw,inth)

{

if(h==0)h=1;

GLfloataspect=(GLfloat)w/(GLfloat)h;

GLfloatnRange=100.0f;

glViewport(0,0,w,h);//设置视口

glMatrixMode(GL_PROJECTION);//将当前矩阵指定为投影模式

glLoadIdentity();

if(w<=h)

{

glOrtho(-nRange,nRange,-nRange*aspect,nRange*aspect,-nRange,nRange);

}

else

{

glOrtho(-nRange,nRange,-nRange/aspect,nRange/aspect,-nRange,nRange);

}

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}

3、使用opengl函数写一个控制台程序,要求实现对鼠标、键盘、窗口缩放等事件的处理。

原图

 

数字键4、5、6控制视角向X、Y、Z正方向移动;

case'4':

xDirection+=0.5;

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluPerspective(65,1,1,50);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(xDirection,yDirection,zDirection,0,0,0,0,1,0);

glutPostRedisplay();

break;

case'5':

yDirection+=0.5;

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluPerspective(65,1,1,50);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(xDirection,yDirection,zDirection,0,0,0,0,1,0);

glutPostRedisplay();

break;

case'6':

zDirection+=0.5;

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluPerspective(65,1,1,50);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(xDirection,yDirection,zDirection,0,0,0,0,1,0);

glutPostRedisplay();

break;

 

数字键1、2、3控制视角向X、Y、Z负方向移动;

case'1':

xDirection-=0.5;

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluPerspective(65,1,1,50);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(xDirection,yDirection,zDirection,0,0,0,0,1,0);

glutPostRedisplay();

break;

case'2':

xDirection-=0.5;

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluPerspective(65,1,1,50);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(xDirection,yDirection,zDirection,0,0,0,0,1,0);

glutPostRedisplay();

break;

case'3':

xDirection-=0.5;

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluPerspective(65,1,1,50);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(xDirection,yDirection,zDirection,0,0,0,0,1,0);

glutPostRedisplay();

break;

 

键盘上W、A、S、D键控制模型向上、向左、向下、向右旋转:

voidKeyBoards(unsignedcharkey,intx,inty)

{

switch(key)

{

case'w':

glMatrixMode(GL_MODELVIEW);

glRotatef(angle,-1,0,0);

glutPostRedisplay();

break;

case'a':

glMatrixMode(GL_MODELVIEW);

glRotatef(angle,0,0,-1);

glutPostRedisplay();

break;

case's':

glMatrixMode(GL_MODELVIEW);

glRotatef(angle,1,0,0);

glutPostRedisplay();

break;

case'd':

glMatrixMode(GL_MODELVIEW);

glRotatef(angle,0,0,1);

glutPostRedisplay();

break;

4,在显示窗口的左下1/4处显示一个球的1/2.

 

//窗口调整子程序

voidmyReshape(intw,inth)

{

glViewport(-200,-300,(GLsizei)w,(GLsizei)h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

if(w<=h)

glOrtho(-1,1,-(float)h/w,(float)h/w,-1,1);

else

glOrtho(-(float)w/h,(float)w/h,-1,1,-1,0.5);

}

 

 

五、实验分析与讨论

1.掌握了OpenGL中的三维图形的制作

2.了解了图形的简单变换,旋转,缩放等

3.需要一定的数学知识作为铺垫

 

教师评语:

签名:

日期:

成绩:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 中考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1