OpenGL 教程 —— 一个在线教育工具.doc
《OpenGL 教程 —— 一个在线教育工具.doc》由会员分享,可在线阅读,更多相关《OpenGL 教程 —— 一个在线教育工具.doc(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、武汉科技大学本科毕业论文外文翻译本科毕业论文外文翻译外文译文题目:OpenGL教程 一个在线教育工具学 院:计算机科学与技术专 业:计算机科学与技术(电)学 号:201312237035学生姓名: 指导教师: 日 期:二一七年六月OpenGL Tutorial - An Online Education ToolHarish MuseboyinaOpenGL Tutorial - An Online Education tool, Harish Museboyina. Montana State University, 2012OpenGL 教程 一个在线教育工具哈里斯穆塞博伊纳OpenGL
2、教程 一个在线教育工具,哈里斯穆塞博伊纳蒙大拿州立大学,20121 简单光源(无材质效果)1.1 代码举例下面的代码是用来产生一束简单的光照,它又被投射到一个球体上。由于这是第一个光照实例,因此我们现在并不关注材质效果,这将在下一节再进行描述。OpenGL的实现需要至少8个主要灯光从GL_LIGHT0到GL_LIGHT7。为了能在代码中使用光照,我们必须首先通过调用程序glEnable(GL_LIGHTING)来开启光照。glLookAt()程序用来设置相机位置,我们可以使用glLightfv()来设置光照的位置。这个程序实际是用来设置光照的方向,而并不是光照的实际位置。虽然我们好像能够将光源
3、设置在一个位置,但它实际表现出来反而像在无限远处。#include stdafx.h#include static double yVal = 50.0;void drawSphere()GLUquadricObj* cyl;GLfloat light_position = 0.0, 20.0, yVal, 10.0 ;glLightfv(GL_LIGHT0, GL_POSITION, light_position); / Using lighting (effects all the objects drawn below)glMatrixMode(GL_PROJECTION);glLoad
4、Identity();gluPerspective(35.0, 1.0, 1.0, 100.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(20.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0);cyl = gluNewQuadric();gluQuadricDrawStyle(cyl, GLU_FILL);gluSphere(cyl, 2.0, 50, 100);glFlush();void display(void)/* clear all pixels */glClear(GL_COL
5、OR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);drawSphere();glFlush();void init(void)glClearColor(0.5, 0.5, 0.5, 0.0);glEnable(GL_DEPTH_TEST);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluLookAt(30.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);void keyboard(unsigned c
6、har key, int x, int y)switch (key)case 27:/ esc on keyboardexit(0);break;case 97:/ a on keyboardyVal = yVal - 5.0;glutPostRedisplay();break;int main(int argc, char* argv)glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowSize(600, 600);glutInitWindowPosition(100, 100);gl
7、utCreateWindow(Simple Light.);init();glutDisplayFunc(display);glutKeyboardFunc(keyboard);glutMainLoop();return 0;1.2 输出1.3 使用的关键方法void glLightfv(GLenum light, GLenum pname, const GLfloat *params)2 光照(材质效果)2.1 材质材质参数指定表面如何反射光。应用可以更改OpenGL的材质参数用以模拟不同颜色的材料、光泽平坦的材料、高光泽材料如泳池球等。程序glColor3f()用来设置原色,只要我们不使用
8、光照效果,调用这个程序就是个好方法。OpenGL的光照不会使用原色,而是使用材料颜色。因此在谈论光照时介绍材料是很重要的。2.2 代码举例到目前为止,我们已经看到了一个没有物质影响的简单照明示例。但是,为了使场景更具吸引力,我们必须利用材料。在下面的代码中,我们就使用了一个绿色的材料。我们根据实际要求使用GL_SPECULAR, GL_AMBIENT, GL_SHININESS等参数。相同的参数也适用于照明方法。#include stdafx.h#include static double yVal = 50.0;void drawSphere()GLUquadricObj* cyl;GLfl
9、oat light_position = 0.0, 40.0, yVal, 0.0 ;glLightfv(GL_LIGHT0, GL_POSITION, light_position);GLfloat mat_specular = 0.3f, 1.0f, 0.3f, 1.0f ; / Green color materialGLfloat mat_shininess = 70.0 ; / Defines shininessglMaterialfv(GL_FLOAT, GL_SPECULAR, mat_specular);/ Using materialsglMaterialfv(GL_FRON
10、T, GL_AMBIENT, mat_specular);glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(35.0, 1.0, 1.0, 100.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(30.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0);cyl = gluNewQuadric();gluQuadricDra
11、wStyle(cyl, GLU_FILL);gluSphere(cyl, 2.0, 10, 10);glFlush();void display(void)glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);drawSphere();glFlush();void init(void)glClearColor(0.5, 0.5, 0.5, 0.0);glEnable(GL_DEPTH_TEST); / enabling z-bufferglMatrixMode(GL_PROJECTION);glLoadIdentity();gluLookAt(3
12、0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);void keyboard(unsigned char key, int x, int y)switch (key)case 27:/ esc on keyboardexit(0);break;case 97:/ a on keyboardyVal = yVal - 5.0;glutPostRedisplay();break;int main(int argc, char* argv)glutInit(&argc, ar
13、gv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowSize(600, 600);glutInitWindowPosition(100, 100);glutCreateWindow(Light Material effect.);init();glutDisplayFunc(display);glutKeyboardFunc(keyboard);glutMainLoop();return 0;2.3 输出2.4 不同的材料3 点光源到目前为止,我们已经看到了具有以下属性的照明效果:l 光线是从无线远的距离投射出来的。l 圆
14、周上亮度的消失速度是非常慢的。但是,我们可能想要生成的灯光,它们在场景中与一个位置,而并不会像我们迄今为止看到的普通光照一样,从一个无限远的光源投影出来。就像一盏书房台灯或是台球桌上的点光源等。对于点光源,它发射的射线被限制在一个锥形区域内,在锥形区域外,点光源不会发射光线。因此,为了是普通光源表现得像一个点光源,我们必须对代码进行一些修改。3.1 代码举例对以下代码的修改是为了引入诸如GL_SPOT_CUTOFF的参数,该参数定义了以点光源放置的地方为中心发射光线形成的椎体的角度。GL_SPOT_EXPONENT参数则定义了光的集中程度。#include stdafx.h#include s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenGL 教程 一个在线教育工具 一个 在线教育 工具
限制150内