计算机图形学实验 实验一 OpenGL 图形编程入门

您所在的位置:网站首页 opengl编程基础第三版pdf 计算机图形学实验 实验一 OpenGL 图形编程入门

计算机图形学实验 实验一 OpenGL 图形编程入门

2023-08-21 05:10| 来源: 网络整理| 查看: 265

实验一 OpenGL图形编程入门 实验目的 了解和掌握OpenGL的安装。掌握一个简单的基于OpenGL的C++程序结构。掌握Win32程序框架。掌握OpenGL中若干基本图形的绘制。 实验环境 硬件要求:

PC:主流配置,最好为独立显卡,显存为512MB以上

软件环境

操作系统: Windows7/Windows8

语言开发工具:Microsoft Visual Studio 2010,Visual C++

程序框架:

Win32应用程序。

实验要求与内容

要求:将所有实验步骤生成的效果截图拷贝到实验报告文档里备查,并附上相应的代码。

内容:

准备并配置好OpenGL库文件建立一个工程文件,并运行样本程序my_first_program.cpp,观看结果。

(1)启动Microsoft Visual Sudio 2010,在菜单栏中单击“文件-新建-项目”,截图如下。

(2)在“新建项目”对话框创建中选择Visual C++的Win32项目,然后输入项目名称,选择项目的保存位置,单击确定。截图如下。 

(3)将工程文件中的源文件中C++源文件替换成如下样本程序。截图以及代码如下:

// GraphicExperment.cpp : 定义应用程序的入口点。  //    #include "stdafx.h"  #include "GraphicExperment.h"  #include     void display(void){      glClearColor(0.0f,0.0f,0.0f,1.0f);      glClear(GL_COLOR_BUFFER_BIT);      glFlush();  }  int APIENTRY _tWinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){      UNREFERENCED_PARAMETER(hPrevInstance);      UNREFERENCED_PARAMETER(lpCmdLine);      char *argv[]={"hello"," "};      int argc = 2;      glutInit(&argc,argv);      glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);      glutInitWindowSize(500,500);      glutInitWindowPosition(1024/2-250,768/2-250);      glutCreateWindow("hello");      glutDisplayFunc(display);      glutMainLoop();      return 0;  }  

 以上样本程序的运行结果是创建一个名为“hello”的窗口,截图如下:

认真阅读以上样本程序,理解每个函数的作用,并修改窗口标题,让其显示为“我的第一个OpenGL程序”,实验代码和运行结果截图如下所示。 // GraphicExperment.cpp : 定义应用程序的入口点。  //    #include "stdafx.h"  #include "GraphicExperiment1.h"  #include     void display(void){      glClearColor(0.0f,0.0f,0.0f,1.0f);      glClear(GL_COLOR_BUFFER_BIT);      glFlush();  }  int APIENTRY _tWinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){      UNREFERENCED_PARAMETER(hPrevInstance);      UNREFERENCED_PARAMETER(lpCmdLine);      char *argv[]={"我的第一个OpenGL程序"," "};      int argc = 2;      glutInit(&argc,argv);      glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);      glutInitWindowSize(500,500);      glutInitWindowPosition(1024/2-250,768/2-250);      glutCreateWindow("我的第一个OpenGL程序");      glutDisplayFunc(display);      glutMainLoop();      return 0;  } 

 

窗口的设置

(1)修改窗口位置,使之位于屏幕正中央。实验代码和运行截图如下

// GraphicExperment.cpp : 定义应用程序的入口点。  //    #include "stdafx.h"  #include "GraphicExperiment1.h"  #include     void display(void){      glClearColor(0.0f,0.0f,0.0f,1.0f);      glClear(GL_COLOR_BUFFER_BIT);      glFlush();  }  int APIENTRY _tWinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){      UNREFERENCED_PARAMETER(hPrevInstance);      UNREFERENCED_PARAMETER(lpCmdLine);      char *argv[]={"我的第一个OpenGL程序"," "};      int argc = 2;      glutInit(&argc,argv);      glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);      glutInitWindowSize(500,500);      int cx = glutGet(GLUT_SCREEN_WIDTH);      int cy = glutGet(GLUT_SCREEN_HEIGHT);      glutInitWindowPosition((cx-500)/2,(cy-500)/2);      glutCreateWindow("我的第一个OpenGL程序");      glutDisplayFunc(display);      glutMainLoop();      return 0;  }  

(2)窗口大小改为整个屏幕大小。实验代码和运行效果截图如下:

// GraphicExperment.cpp : 定义应用程序的入口点。  //    #include "stdafx.h"  #include "GraphicExperiment1.h"  #include     void display(void){      glClearColor(0.0f,0.0f,0.0f,1.0f);      glClear(GL_COLOR_BUFFER_BIT);      glFlush();  }  int APIENTRY _tWinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){      UNREFERENCED_PARAMETER(hPrevInstance);      UNREFERENCED_PARAMETER(lpCmdLine);      char *argv[]={"我的第一个OpenGL程序"," "};      int argc = 2;      glutInit(&argc,argv);      glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);      int cx = glutGet(GLUT_SCREEN_WIDTH);      int cy = glutGet(GLUT_SCREEN_HEIGHT);      glutInitWindowSize(cx,cy);      glutInitWindowPosition(0,0);      glutCreateWindow("我的第一个OpenGL程序");      glutDisplayFunc(display);      glutMainLoop();      return 0;  }  

 3)修改窗口大小为其他尺寸,实验代码和运行结果如下

// GraphicExperment.cpp : 定义应用程序的入口点。  //    #include "stdafx.h"  #include "GraphicExperiment1.h"  #include     void display(void){      glClearColor(0.0f,0.0f,0.0f,1.0f);      glClear(GL_COLOR_BUFFER_BIT);      glFlush();  }  int APIENTRY _tWinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){      UNREFERENCED_PARAMETER(hPrevInstance);      UNREFERENCED_PARAMETER(lpCmdLine);      char *argv[]={"我的第一个OpenGL程序"," "};      int argc = 2;      glutInit(&argc,argv);      glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);      int cx = glutGet(GLUT_SCREEN_WIDTH);      int cy = glutGet(GLUT_SCREEN_HEIGHT);      glutInitWindowSize(780,800);      glutInitWindowPosition(0,0);      glutCreateWindow("我的第一个OpenGL程序");      glutDisplayFunc(display);      glutMainLoop();      return 0;  } 

5. 背景色的设置

要求:

(1)将窗口背景设置为白色。实验代码和运行截图如下

   // GraphicExperment.cpp : 定义应用程序的入口点。  //    #include "stdafx.h"  #include "GraphicExperiment1.h"  #include     void display(void){      glClearColor(1.0f,1.0f,1.0f,0.0f);      glClear(GL_COLOR_BUFFER_BIT);      glFlush();  }  int APIENTRY _tWinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){      UNREFERENCED_PARAMETER(hPrevInstance);      UNREFERENCED_PARAMETER(lpCmdLine);      char *argv[]={"我的第一个OpenGL程序"," "};      int argc = 2;      glutInit(&argc,argv);      glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);      int cx = glutGet(GLUT_SCREEN_WIDTH);      int cy = glutGet(GLUT_SCREEN_HEIGHT);      glutInitWindowSize(780,800);      glutInitWindowPosition(0,0);      glutCreateWindow("我的第一个OpenGL程序");      glutDisplayFunc(display);      glutMainLoop();      return 0;  } 

  (2)将窗口背景设置为其他颜色。实验代码和运行效果截图如下

 // GraphicExperment.cpp : 定义应用程序的入口点。  //    #include "stdafx.h"  #include "GraphicExperiment1.h"  #include     void display(void){      glClearColor(0.5f,0.5f,0.5f,0.0f);      glClear(GL_COLOR_BUFFER_BIT);      glFlush();  }  int APIENTRY _tWinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){      UNREFERENCED_PARAMETER(hPrevInstance);      UNREFERENCED_PARAMETER(lpCmdLine);      char *argv[]={"我的第一个OpenGL程序"," "};      int argc = 2;      glutInit(&argc,argv);      glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);      int cx = glutGet(GLUT_SCREEN_WIDTH);      int cy = glutGet(GLUT_SCREEN_HEIGHT);      glutInitWindowSize(780,800);      glutInitWindowPosition(0,0);      glutCreateWindow("我的第一个OpenGL程序");      glutDisplayFunc(display);      glutMainLoop();      return 0;  }  

 

6. 基本图形绘制

 绘图语句一般放置在清屏语句和刷新语句之间。

 矩形绘制:

(1)在display绘图函数的“glClear(GL_COLOR_BUFFER_BIT);”语句后面增加“glRectf(0,0,1,1);”运行程序查看结果。

(2)修改矩形的对焦坐标,看看有什么变化。运行效果截图如下。

3)根据给出的函数,试画出直线和三角形等基本图形

 绘制直线的运行代码和运行效果截图如下

 // GraphicExperment.cpp : 定义应用程序的入口点。  //    #include "stdafx.h"  #include "GraphicExperiment1.h"  #include     void display(void){      glClearColor(0.5f,0.5f,0.5f,0.0f);      glClear(GL_COLOR_BUFFER_BIT);      glBegin(GL_LINES);      glVertex2f(0,0);      glVertex2f(0.8,0.8);      glEnd();      glFlush();  }  int APIENTRY _tWinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){      UNREFERENCED_PARAMETER(hPrevInstance);      UNREFERENCED_PARAMETER(lpCmdLine);      char *argv[]={"我的第一个OpenGL程序"," "};      int argc = 2;      glutInit(&argc,argv);      glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);      int cx = glutGet(GLUT_SCREEN_WIDTH);      int cy = glutGet(GLUT_SCREEN_HEIGHT);      glutInitWindowSize(780,800);      glutInitWindowPosition(0,0);      glutCreateWindow("我的第一个OpenGL程序");      glutDisplayFunc(display);      glutMainLoop();      return 0;  } 

绘制三角形的代码和运行效果截图如下

// GraphicExperment.cpp : 定义应用程序的入口点。  //    #include "stdafx.h"  #include "GraphicExperiment1.h"  #include     void display(void){      glClearColor(0.5f,0.5f,0.5f,0.0f);      glClear(GL_COLOR_BUFFER_BIT);      glBegin(GL_TRIANGLES);      glVertex2f(0,0);      glVertex2f(0.5,0.5);      glVertex2f(0.0,0.8);      glEnd();      glFlush();  }  int APIENTRY _tWinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){      UNREFERENCED_PARAMETER(hPrevInstance);      UNREFERENCED_PARAMETER(lpCmdLine);      char *argv[]={"我的第一个OpenGL程序"," "};      int argc = 2;      glutInit(&argc,argv);      glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);      int cx = glutGet(GLUT_SCREEN_WIDTH);      int cy = glutGet(GLUT_SCREEN_HEIGHT);      glutInitWindowSize(780,800);      glutInitWindowPosition(0,0);      glutCreateWindow("我的第一个OpenGL程序");      glutDisplayFunc(display);      glutMainLoop();      return 0;  } 

7. 绘图色的设置。

 (1)将绘制的图形修改成红色。实验代码以及运行结果截图如下

// GraphicExperment.cpp : 定义应用程序的入口点。  //    #include "stdafx.h"  #include "GraphicExperiment1.h"  #include     void display(void){      glClearColor(0.5f,0.5f,0.5f,0.0f);      glClear(GL_COLOR_BUFFER_BIT);      glColor3f(1,0,0);      glBegin(GL_TRIANGLES);      glVertex2f(0,0);      glVertex2f(0.5,0.5);      glVertex2f(0.0,0.8);      glEnd();      glFlush();  }  int APIENTRY _tWinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){      UNREFERENCED_PARAMETER(hPrevInstance);      UNREFERENCED_PARAMETER(lpCmdLine);      char *argv[]={"我的第一个OpenGL程序"," "};      int argc = 2;      glutInit(&argc,argv);      glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);      int cx = glutGet(GLUT_SCREEN_WIDTH);      int cy = glutGet(GLUT_SCREEN_HEIGHT);      glutInitWindowSize(780,800);      glutInitWindowPosition(0,0);      glutCreateWindow("我的第一个OpenGL程序");      glutDisplayFunc(display);      glutMainLoop();      return 0;  }  

(2)将绘制的基本图元设置为不同的颜色。实验运行效果如下

8. 绘制几何图形。

1)更改标题栏,加上学号姓名

2)绘制两个以上基本几何形状

3)设置三种颜色

圆形

五边形

四. 思考题

1.默认窗口在屏幕的什么位置?如果要改变窗口在屏幕的位置应该如何处理?如何调整窗口的大小?

默认窗口在屏幕的左上角,改变窗口的位置使用glutInitWindowPosition函数,传入目标窗口位置的左上角坐标;调整窗口大小使用glutInitWindowSize函数,传入窗口的长宽。

2.本实验中默认的绘图坐标原点在窗口中的什么位置?

在窗口的右上角。

3.如何修改背景颜色和绘图颜色?绘图颜色的顺序和位置有什么要求?

修改背景颜色使用glClearColor函数,此函数放在display()中,并且放在glClear()语句前面。绘图颜色修改使用glColor3f函数,放在glBegin()之前。

4.对于“#include ”,头文件应当放在哪个文件夹下?

应当放在D:\vs2010\VC\include\下

供有需要的人复制文本,实验瞎写的,都是书上代码,随缘参考,图片不好传就取消了。新建项目时要按书上的做的话记得选Windows应用程序,建议直接下载VS2010,能省很多事。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3