【Unity基础知识】OpenGL图形学创建窗口(二)

发布 : Unity培训      来源:Unity干货资料

2020-07-01 18:55:20

首先我们引入需要使用到的头文件并链接库:

#include //引入glew库

#include //引入freeglut库

#include //引入C++标准输入输出流文件

using namespace std; //使用标准命名空间

引入他们的目的是接下来我们会使用到这些.h头文件中所包含的库函数或工具。

我们现在不太想要这个控制台窗口,因此我们使用#pragma命令取消这个窗口:

#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")//取消控制台工程的控制台窗口

接下来我们还需要定义一下窗口的大小,注意这里是以像素(pixel)为单位:

GLint WIN_WIDTH = 1000;//窗口宽

GLint WIN_HEIGHT = 625;//窗口高

大家都知道游戏的流程是一个循环,而在这个循环中为了渲染游戏画面,我们需要使用一个渲染函数来负责游戏中画面的渲染工作,我们来定义一下这个函数:

【Unity基础知识】OpenGL图形学创建窗口(二)

static void RenderSceneCB()

{

glClear(GL_COLOR_BUFFER_BIT);// 清空颜色缓存

glutSwapBuffers();// 交换前后缓存

}

在这个函数中我们首先使用glClear来在每一帧开始前清除上一帧的内容,紧接着使用glutSwapBuffers交换前台缓冲区和后台缓冲区。

接下来我们重写主函数main,首先对glut的环境进行初始化:

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

这个函数可以直接对glut库进行初始化的参数设置,我们要想在接下来的程序中使用glut就必须做这一步。

紧接着我们配置一些GLUT的选项设置:

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);

其中GLUT_DOUBLE表明开启双缓冲机制,而GLUT_RGBA为使用颜色缓冲。

当然我们还要获取当前屏幕的分辨率大小以用来设置窗口的大小和位置:

//获取客户区屏幕大小

GLint ScreenWidth = glutGet(GLUT_SCREEN_WIDTH);

GLint ScreenHeight = glutGet(GLUT_SCREEN_HEIGHT);

// 窗口设置

glutInitWindowSize(WIN_WIDTH, WIN_HEIGHT); // 窗口尺寸

glutInitWindowPosition((ScreenWidth - WIN_WIDTH) / 2, (ScreenHeight - WIN_HEIGHT) / 2 - 50); // 窗口位置

glutCreateWindow("第1个OpenGL窗口"); // 窗口标题

还记得刚才写的渲染回调函数吗?我们现在就来指定它:

glutDisplayFunc(RenderSceneCB);//指定OpenGL程序的渲染函数

来指定一下擦除屏幕所用的颜色值吧,这个颜色值会当窗口什么都不绘制时填满整个窗口:

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);// 缓存清空后的颜色值

【Unity基础知识】OpenGL图形学创建窗口(二)

接下来初始化另外一个库,就是glew了:

GLenum res = glewInit();

if (res != GLEW_OK) {

fprintf(stderr, "Error: '%s'\n", glewGetErrorString(res));

return 1;

}

最后一步!!!!!!

我们通知这个C++窗口程序可以开始OpenGL主循环了:

glutMainLoop();// 通知开始GLUT的内部循环

这个函数调用传递指令给GLUT现在开始它的内部循环。在这个循环中它监听窗口系统中的事件并通过我们配置的回调传递出去。在我们这个例子中,GLUT将只会调用我们注册的那个display回调(RenderScenceCB),在这个回调函数中(RenderScenceCB)我们可以自定义代码来渲染这一帧的图像。

好了,一切都告一段落了,我们现在可以按下Ctrl+F5键来运行我们的第1个OpenGL窗口程序了,运行正确的话就会出现上面课件中所列举的画面。。

THE END  

声明:本站稿件版权均属中公教育优就业所有,未经许可不得擅自转载。

领取零基础自学IT资源

涉及方向有Java、Web前端、UI设计、软件测试、python等科目,内容包含学习路线、视频、源码等

点击申请领取资料

点击查看资料详情 

收起 


 相关推荐

问题解答专区
返回顶部