OpenGL之旅(2):简单的创建一个窗口

title: OpenGL(2)窗口
date: 2020-06-28 10:07
category: 图形学
tags: opengl
链接:OpenGL(2)窗口

1. 视口

在开始渲染之前有一件重要的事情要做,就是告诉OpenGL渲染窗口的尺寸大小,即视口(Viewport).
这样OpenGL才能知道怎样根据窗口大小来显示数据和座标,通过glViewPort函数来设置窗口的维度

glViewPort(0,0,800,600);

glViewPort函数前两个参数控制窗口左下角的位置,第三个和第四个参数控制渲染窗口的宽度和高度(像素)。

OpenGL使用glViewport中定义的位置和宽高进行2D座标的转换,将OpenGL中的位置座标转换为屏幕座标,假如OpenGL中的座标(-0.5,0.5)被映射为屏幕中的座标(200,450),处理过的OpenGL座标范围只为-1到1,事实上就是将(-1,1)范围内的座标映射到(0,800)和(0,600)

2. 渲染

2.1 渲染循环(Render Loop)

如果不希望只绘制一个图像之后,应用程序就立即退出并关闭窗口,希望在主动关闭它之前不断的绘制图像,并能接受用户输入,需要在程序中添加一个while循环,让窗口在退出前一直保持运行。

while(!glfwWindowShouldClose(window)){
	glfwSwapBuffers(windo);
	glfwPollEvents();
}
  • glfwWindowShouldClose:每次循环的开始前检查一次GLFW是否被要求退出,如果是函数返回true,然后渲染循环结束,之后关闭应用程序。

  • glfwSwapBuffers:交换颜色缓冲,用来绘制,并且作为输出显示到屏幕上

  • glfwPollEvents:检查触发什么事件、更新窗口状态,并调用对应的回调函数。

2.2 流程

将所有的渲染操作放在渲染循环中,让渲染指令在每次渲染循环迭代中都能被执行。


while(!glfwWindowShouldClose(window)){

	//输入
	processInput(window);

	//渲染指令

	//检查并调用事件,交换缓冲
	glfwPollEvents();
	glfwSwapBuffers(window);
}

设置清屏颜色以及清空颜色缓冲:为了加速渲染,避免看见上一次迭代的渲染结果;
glClear函数用来清空屏幕的颜色缓冲,接收一个缓冲位(Buffer bit)状态使用函数
其中
GL_DEPTH_BUFFER_BIT: 深度缓冲
GL_STENCIL_BUFFER_BIT: 模板缓冲
GL_COLOR_BUFFER_BIT: 颜色缓冲

glClearColor函数来设置清空屏幕所用的颜色,整个颜色缓冲都会被填充为glClearColor里面所设置的颜色。状态设置函数

glClearColor(0.3f,0.2f,0.3f,1.0f);
glClear(GL_COLOR_BUFFER_BIT);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章