华北电力大学 计算机图形学实验报告 联系客服

发布时间 : 星期四 文章华北电力大学 计算机图形学实验报告更新完毕开始阅读dee0be976137ee06eef91845

glutInitWindowPosition(100, 100); glutInitWindowSize(500, 500);

singleb=glutCreateWindow(\

glClearColor(1.0, 1.0, 0.0, 0.1);

glutDisplayFunc(display);

glutReshapeFunc(myReshape); glutIdleFunc(spinDisplay);

glutMouseFunc(mouse); glutInit(&argc,argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowPosition(600, 100); glutInitWindowSize(500, 500);

doubleb=glutCreateWindow(\

glClearColor(1.0, 1.0, 0.0, 0.1);

glutDisplayFunc(display);

glutReshapeFunc(myReshape);

glutIdleFunc(spinDisplay);

glutMouseFunc(mouse);

glutMainLoop(); }

六、 实验结果

实验二、OpenGL三维观察综合实验

一、 目的与要求

7. 掌握计算机图形学及交互式计算机图形学的定义,了解OpenGL的功能及工作流

程,掌握基于OpenGL Glut库的程序框架。

8. 掌握基本的二维线画图元的绘制算法及属性,掌握OpenGL基本图元的绘制。 9. 理解二维、三维图形的绘制流程,掌握二维图形和三维图形的图形变换。 10.了解形体的真实感表示的内容,包括消隐技术、简单光照明模型、多边形的明暗

绘制技术以及纹理映射技术。

11.要求使用OpenGL及GLUT库在Visual C++环境下编写图形绘制程序实现基本图

元绘制。

12.要求对绘制的简单场景综合利用几何变换或gluLookAt函数实现交互式三维观

察程序。

二、 实验内容

对于绘制的立方体(也可以自己拟定)通过键盘移动视点,利用鼠标或键盘控制立方体的旋转方向,从不同角度观察各面颜色不同的立方体,通过本实验加深理解计算机图形学中的三维图形绘制流程的工作原理和OpenGL三维观察流程及相应的函数实现。

三、 所用仪器、设备

Windows XP系统,Visual C++,OpenGL及GLUT库

四、 实验方法与步骤

先配置环境,把相关文件放到相应的文件夹

C:\\Program Files\\Microsoft Visual Studio\\VC98\\Include\\GL

C:\\WINDOWS\\system32

C:\\Program Files\\Microsoft Visual Studio\\VC98\\Lib

再通过VC++进行编译

五、 实验代码

#include #include float theta=0.0;

void drawPyramid() //该金字塔在以原点为中心,边长为2的立方体范围内 {

glBegin(GL_TRIANGLES);

glColor3f(1.0f,0.0f,0.0f); //前面为红色

glVertex3f( 0.0f, 1.0f, 0.0f); //前面三角形上顶点

glVertex3f(-1.0f,-1.0f, 1.0f); //前面三角形左顶点 glVertex3f( 1.0f,-1.0f, 1.0f); glColor3f(0.0f,1.0f,0.0f);

//前面三角形右顶点 //右面为绿色

glVertex3f( 0.0f, 1.0f, 0.0f); glVertex3f( 1.0f,-1.0f, 1.0f);

//右面三角形上顶点 //右面三角形左顶点

glVertex3f( 1.0f,-1.0f, -1.0f); //右面三角形右顶点 glColor3f(0.0f,0.0f,1.0f);

//背面为蓝色

glVertex3f( 0.0f, 1.0f, 0.0f); //背面三角形上顶点 glVertex3f( 1.0f,-1.0f, -1.0f); //背面三角形左顶点

glVertex3f(-1.0f,-1.0f, -1.0f); //背面三角形右顶点 glColor3f(1.0f,1.0f,0.0f);

//左面为黄色

glVertex3f( 0.0f, 1.0f, 0.0f); glVertex3f(-1.0f,-1.0f,-1.0f); glVertex3f(-1.0f,-1.0f, 1.0f); glEnd();

//左面三角形上顶点 //左面三角形左顶点 //左面三角形右顶点

glBegin(GL_POLYGON); //金字塔底面正方形

glColor3f(0.5f,0.5f,0.5f); //底面为灰色 }

void display() {

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); //清空颜色和深度缓存 glMatrixMode(GL_MODELVIEW); glLoadIdentity();

glTranslatef(0.0f,0.0f,-5.0f); glRotatef(theta,0.0f,1.0f,0.0f); drawPyramid(); glutSwapBuffers();

glVertex3f(-1.0f,-1.0f, 1.0f); glVertex3f(1.0f,-1.0f, 1.0f); glVertex3f(1.0f,-1.0f, -1.0f); glVertex3f(-1.0f,-1.0f, -1.0f); glEnd();

}

void reshape(int w, int h) { }

void init() { }

void myKeyboard(unsigned char key, int x, int y) {

if(key == 'a' || key == 'A')

theta += 5.0;

glClearColor (1.0, 1.0, 1.0, 1.0);

glEnable(GL_DEPTH_TEST); //启动深度测试模式 glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity();

glOrtho(-2.0, 2.0, -2.0, 2.0, 2.0, 10.0);

if(key == 's' || key == 'S')

theta -= 5.0;

if(key == 'c' || key == 'C') }

int main(int argc, char** argv) {

glutInit(&argc,argv);

glutInitDisplayMode (GLUT_DEPTH |GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosition(0,0);

glutCreateWindow(\金字塔---A键:顺时针旋转,S键:逆时针旋转,C键:退出\glutReshapeFunc(reshape); //指定重绘回调函数 glutDisplayFunc(display);

glutKeyboardFunc( myKeyboard); //指定键盘回调函数

exit(0);

if (theta>360) theta -=360; if (theta<0) theta +=360;

glutPostRedisplay(); //重新调用绘制函数

}

init(); glutMainLoop();

六、 实验结果