实验一  OpenGL图形编程入门

这篇博客旨在引导初学者入门OpenGL图形编程,通过在Windows环境下建立项目,理解OpenGL的基本程序结构,设置窗口属性,调整背景颜色,并绘制简单图形如矩形、直线和三角形。此外,还涉及了绘图颜色的设定以及窗口位置和大小的调整。
摘要由CSDN通过智能技术生成

ZZU的学弟学妹们不要抄作业哦~(`Д´)

一、实验目的

1.了解和掌握OpenGL的安装。

2.掌握一个简单的基于OpenGL的C++程序结构。

3.掌握win32程序框架。

4.掌握OpenGL中若干基本图形的绘制。

二、实验内容

1.准备好OpenGL库文件。

  1. Glut32.dll路径为%system root&\SysWOW64。
  2. Glut32.lib路径为PATH\lib。
  3. Glut.h路径为PATH\Include。
  4. System root为Windows安装路径
  5. PATH为Visual Studio安装路径。

2.建立一个工程文件,并运行样本程序my_first_program.cpp,观看结果。

1)启动Microsoft Visual Studio,在菜单栏中单击“文件”→“新建”→“项目”,如实验图1-1所示。

(实验图1-1 新建项目)

 

 

 

2)在“新建项目”对话框中选择“Windows桌面向导”(书上的联机模板找不到),然后输入项目名称和保存位置,如实验图1-2所示,单击“确定”按钮。

(!!!!注意!!!我的实验一、二、三、六用的是Windows桌面向导,但是后面的其他实验都是创建的Windows桌面应用程序!创建的项目及头文件会有所不同!!! 可以看这个:OpenGL的创建

 

(图1-2)

  1. 创建一个C++源文件并输入样本程序1-3

 

//样本程序 my_first_program.cpp

#include<glut.h>

#include<stdio.h>

#include<windows.h>

void display(void)

{

glClearColor(0.0f, 0.0f, 0.0f, 1.0f);//设置清屏颜色

glClear(GL_COLOR_BUFFER_BIT);//刷新颜色缓存区

glFlush();//刷新命令队列和缓存区,是所有尚未执行的OpenGL命令得到执行

}

int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)

{

UNREFERENCED_PARAMETER(hPrevInstance);

UNREFERENCED_PARAMETER(lpCmdLine);

char *argv[] = {"hello "," " };

int argc = 2;

glutInit(&argc, argv);    //初始化GLUT库;

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);   //设置显示模式;(缓冲,颜色类型)

glutInitWindowSize(500, 500);//绘制窗口大小

glutInitWindowPosition(1024 / 2 - 250, 768 / 2 - 250);//窗口左上角在屏幕的位置

glutCreateWindow("hello");  //创建窗口,标题为“hello”;

glutDisplayFunc(display);  //显示回调函数用于绘制当前窗口;

glutMainLoop();   //表示开始运行程序,用于程序的结尾;

return 0;

}

//以上样例的运行结果是创建一个名为“hello”的窗口,如实验图1-4所示。

(图1-4 hello窗口)

 

 

3.认真阅读以上样本程序,理解每个函数的作用,并修改窗口标题,让其显示为“我的第一个OpenGL程序”。如图1-5所示。

(图1-5 我的第一个OpenGL程序)

4.窗口设置。

在默认情况下,窗口的出现位置在屏幕的左上角,大小为300X300。

要求:

1)修改窗口位置,使之处于屏幕中央。

2)将窗口大小修改为整个屏幕大小。

3)修改窗口大小为其他尺寸。

参考函数

glutInitWindowsPosition(int x,int y);

//为窗口指定初始位置,窗口左上角在屏幕的位置为(x,y)

//如果不写该函数,或者写成“glutInitWindowsPosition(0,0);”均表示窗口的位置出现在屏幕左上角

glutInitWindowsPosition(int width,int height);//设置窗口大小

//如果不写该函数,表示窗口大小默认为300X300

 

5.背景颜色设置

在默认情况下,背景颜色是黑色。

要求:

1)将窗口颜色设置为白色,如图1-6

(图1-6 白色背景)

2)将窗口颜色设置为其它颜色,灰色(0.5,0.5,0.5,0),如图1-7

(1-7 灰色背景)

参考函数:

glClearColor(float r, float g, float b, float alpha);//设置背景,次函数放在display()中,并且放在glClear(GL_COLOR_BUFFER_BIT);前面

 

其中r,g,b取值范围是[0,1],可以是浮点数;alpha取值范围为[0~1],在这里其值不起作用,以后再讨论该参数。

例如glClearColor(0,0,0,0)为黑色背景,glClearColor3f(1,1,1,0)为白色背景,其他颜色应该如何设置请读者思考。

6,基本图形绘制

绘制函数一般放置在清屏语句

glClear(GL_COLOR_BUFFER_BIT);//刷新颜色缓存区

和刷新语句

glFlush();//用于刷新命令队列和缓存区,是所有尚未被执行的OpenGl命令得到执行。

之间

矩形绘制:

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

(图1-8 矩形绘制)

  1. 修改矩形的对角坐标,看看有什么变化和问题,如图1-9所示。

(0.2, 0.3, 0.4, 0.5)

(图1-9 矩形坐标改变)

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

//绘制直线

glBegin(GL_LINES);

glVertex2f(0,0);

glVertex2f(0.8,0.8,0);

glEnd();

//画三角形,x1,y1,x2,y2,x3,y3为三角形定点坐标

glBegin(GL_TRIANGLES);

glVertex2f(0,0);

glVertex2f(0.5,0.5);

glVertex2f(0.0,0.8);

glEnd();

图形分别如图1-10和图1-11所示。

(图1-10 直线绘制)

(1-11 三角形绘制)

 

 

 

7,绘图色的设置

1)将绘制的图形修改成红色,如图1-12所示。

(1-12 红色矩形)

2)将绘制的不同基本图元设为不同的颜色,如实验图1-13所示。

(1-13 三角形绘制)

参考参数:

glColor3f(r,g,b);//设置绘图色r,g,b取值范围为[0,1],可以为浮点数。

例如:

glColor3f(1,0,0);//设置为红色

glColor3f(0,1,0);//设置为绿色

glColor3f(0,0,1);//设置为蓝色

其他绘图颜色应如何设置请读者思考。

 

8.绘制几何图形

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

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

3)设置三种颜色,如图1-14。

 

 

三、思考题

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

答:默认窗口在屏幕的左上角;若要改变窗口在屏幕的位置应使用glutInitWindowsPosition(int x,int y)函数,在x和y处修改窗口左上角的坐标;改变窗口大小用glutInitWindowSize(int width, int height)函数,在wide和height处修改窗口的宽和高。

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

答:在窗口中心。

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

答:修改背景颜色用glClearColor(float r, float g, float b, float alpha)函数,修改r,g,b的值。颜色写在要在位置之前。

4.对于“#include<glut.h>”,头文件glut.h放在哪个文件夹下?

答:在:\packages\nupengl.core.0.1.0.1\build\native\include下。

5.图形函数的顺序与位置有什么要求?试改变程序中一些图形函数的顺序,看运行结果是否有改变。

答:如果坐标冲突的话,后画的图形会覆盖先画的图形。

 

四、完整代码

//样本程序
#include<glut.h>
#include<stdio.h>
#include<windows.h>
void display(void)
{
	glClearColor(0,0,0,0);//设置清屏颜色
	glClear(GL_COLOR_BUFFER_BIT);//刷新颜色缓存区
	glColor3f(0.7, 0.2, 0.3);
	glRectf(0.3, 0.3, 0.7, 0.7);
	glBegin(GL_LINES);
	glVertex2f(0.5, 0.5);
	glVertex2f(-0.8, 1);
	glEnd();
	glColor3f(0.5, 0.5, 0.3);
	glBegin(GL_TRIANGLES);
	glVertex2f(-1, -1);
	glVertex2f(-0.6, -0.3);
	glVertex2f(0, 0);
	glEnd();
	glColor3f(0.1, 0.2, 0.3);
	glBegin(GL_TRIANGLES);
	glVertex2f(0, 0);
	glVertex2f(-0.5, -0.5);
	glVertex2f(0.0, 0.8);
	glEnd();
	glFlush();//刷新命令队列和缓存区,是所有尚未执行的OpenGL命令得到执行
}
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR 						lpCmdLine, int nCmdShow)
{
	UNREFERENCED_PARAMETER(hPrevInstance);
	UNREFERENCED_PARAMETER(lpCmdLine);
	char *argv[] = { "hello "," " };
	int argc = 2;
	glutInit(&argc, argv);    //初始化GLUT库;
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);   //设置显示模式;(缓冲,颜色类型)
	glutInitWindowSize(500, 500);//绘制窗口大小
	glutInitWindowPosition(1024 / 2 - 250, 768 / 2 - 250);//窗口左上角在屏幕的位置
	glutCreateWindow("201684G0214刘克楠");  //创建窗口,标题为“hello”;
	glutDisplayFunc(display);  //显示回调函数用于绘制当前窗口;
	glutMainLoop();   //表示开始运行程序,用于程序的结尾;
	return 0;
}

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱吃狮子头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值