计算机图形学实验 实验一 OpenGL 图形编程入门 |
您所在的位置:网站首页 › opengl编程基础第三版pdf › 计算机图形学实验 实验一 OpenGL 图形编程入门 |
实验一 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 |