- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机图形学实验报告
实验 1 OpenGL 初识
实验目的
熟悉编程环境;了解光栅图形显示器的特点;了解计算机绘制图形的特点;利用 VC+OpenGL
作为开发平台设计程序,以能够在屏幕上生成任意一个像素点作为本实验的目标
实验内容
了解和使用 vc 的开发环境,理解简单的 OpenGL 程序结构
掌握 OpenGL 提供的基本图形函数,尤其是生成点的函数
实验原理
基本语法
OpenGL 基本函数均使用 gl 作为函数名的前缀;为了便于移植,OpenGL 定义了一些自己的数据类型
程序的基本结构
OpenGL 程序的基本结构可以分为三个部分,第一部分是初始化部分,主要是设置一些 OpenGL 的状态开关,如颜色模式的选择,是否作光照处理,深度检测,裁剪等; 第二部分设置观察坐标系下的取景模式和取景框位置大小; 第三部分是OpenGL 的主要部分,使用OpenGL 的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系、几何变换和光照处理等。
状态机制
OpenGL 的工作方式是一种状态机制,它可以进行各种状态或模式设置,这些状态或模式在重新改变它们之前一直有效。例如 ,当前颜色就是一个状态变量, 在这个状态改变之前, 绘制的每个像素都将使用该颜色 , 直到当前颜色被设置为其他颜色为止。OpenGL 中大量使用了这种状态机制,如颜色模式、投影模式、单双显不 1 缓存区的设置、背景色的设置、光源的位置和特性等。许多状态变量可以通过 glEnable0、 glDisable0 这两个函数来设置成有效或无效状态, 如是否设置光照、 是否进行深度检测等; 在被设置成有效状态之后 , 绝大部分状态变量都有一个默认值。通常情况下,可以用下列四个函数来获取某个状态变量的值: glGetBooleanv 、 glGetDouble. 、. glGetF1oatv 和glGetIntegerv。究竟选择哪个函数应该根据所要获得的返回值的数据类型来决定。 还有些状态变量有特殊的査询函数 , 如 glGetLight*、 glGetError 和glPolygonStipple 等。另外,使用 glPushAttrib 和 glPopAttrib 函数,可以存储和恢复最近的状态变量的值。只要有可能,都应该使用这些函数,因为它们比其他査询函数的效率更局。
实验代码#include<Gl/glut.h> void myDisplay(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f,1.0f,1.0f); glRectf(-0.5f,-0.5f,0.5f,0.5f);
glBegin(GL_TRIANGLES); glColor3f(1.0f,0.0f,0.0f); glVertex2f(0.0f,1.0f); glColor3f(0.0f,1.0f,0.0f); glVertex2f(0.8f-,0.5f);
glColor3f(0.0f,0.0f,1.0f); glVertex2f(-0.8f,-0.5f); glEnd();
glPointSize(3); glBegin(GL_POINTS);
glColor3f(1.0f,0.0f,0.0f); glVertex2f(-0.4f,-0.4f); glColor3f(0.0f,1.0f,0.0f); glVertex2f(0.0f,0.0f); glColor3f(0.0f,0.0f,1.0f); glVertex2f(0.4f,0.4f); glEnd();
}
int main(int argc, char *argv[])
{
glFlush();
glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE); glutInitWindowPosition(100,100); glutInitWindowSize(400,400); glutCreateWindow("Hello world!"); glutDisplayFunc(&myDisplay);
}glutMainLoop(); return 0;
}
实验提高#include<Gl/glut.h> void myDisplay(void)
{
glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f,1.0f,1.0f); glRectf(-0.5f,-0.5f,0.5f,0.5f);
glBegin(GL_TRIANGLES); glC
文档评论(0)