opengl

main()函数模板:

所有opengl程序main()函数内都有的操作有:

(a)初始化 GLFW库;
(b)实例化 GLFWwindow;
(c)初始化 GLEW 库;
(d)调用一次 init()函数;
(e)重复调用 display()函数。

下面在代码中进一步解释以上步骤:

#include <GL/glew.h> 
#include <GLFW/glfw3.h> 
#include <iostream> 
using namespace std; 
void init(GLFWwindow* window) { } 
void display(GLFWwindow* window, double currentTime) { 
	 glClearColor(1.0, 0.0, 0.0, 1.0); 
	 glClear(GL_COLOR_BUFFER_BIT); 
} 
int main(void) { 
	// GLFW 和 GLEW 库先分别使用 glfwInit()和 glewInit()初始化。
	 if (!glfwInit()) { exit(EXIT_FAILURE); } 
	 /*
		glfwCreateWindow()命令负责创建 GLFW 窗口,同时其相关的 OpenGL 上下文由glfwCreateWindow() 命令创建,
		其可选项由前面的WindowHint 设置。WindowHint 指定了计算机必须与OpenGL 版本 4.3 兼容(主版本号为 4,次版本号为 3)。
     */
	 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); 
	 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); 
	 /*
	 glfwCreateWindow 命令的参数指定了窗口的宽、高(以像素为单位)以及窗口顶部的标题(将这里没有用到的另外两个参数设为 NULL,这两个参数分别用来允许全屏显示和资源共享)。
	 */
	 GLFWwindow* window = glfwCreateWindow(600, 600, "Chapter2 - program1", NULL, NULL); 
	 /*
	创建 GLFW 窗口并不会自动将它与当前 OpenGL 上下文关联起来,所以需要调用 glfwMakeContextCurrent()
	*/
	 glfwMakeContextCurrent(window);
	 if (glewInit() != GLEW_OK) { exit(EXIT_FAILURE); } 
	 /*
	glfwSwapInterval()命令和 glfwSwapBuffers()命令用来开启垂直同步,因为 GLFW 窗口默认是双缓冲的
	*/
	 glfwSwapInterval(1); 
	 init(window); 
	 /*
	main()函数包括一个简单的渲染循环,用来反复调用 display()。
	它同时也调用了 glfwSwapBuffers()以绘制屏幕,以及 glfwPollEvents()以处理窗口相关事件(如按键事件)。
	当 GLFW 探测到应该关闭窗口的事件(如用户单击了右上角的“×”)时,循环就会终止。
	*/
	 while (!glfwWindowShouldClose(window)) { 
		 display(window, glfwGetTime()); 
		 glfwSwapBuffers(window); 
		 glfwPollEvents(); 
	 } 
	 /*
	我们将一个 GLFW窗口对象的引用传入了 init()和 display()调用。这些函数在特定环境下需要访问 GLFW 窗口对象。
	同时我们也将当前时间传入了 display()调用,若要保证动画在不同计算机上以相同速度播放,这样做会很有用。
	在这里,我们用了 glfwGetTime(),它会返回 GLFW 初始化之后经过的时间。
	*/
	 glfwDestroyWindow(window); 
	 glfwTerminate(); 
	 exit(EXIT_SUCCESS); 
	 /*
	当用户尝试关闭 GLFW 窗口时,程序将退出渲染循环。这时,main()会通过分别调用
	glfwDestroyWindow()和 glfwTerminate()通知 GLFW 销毁窗口并终止运行
	*/
}
glDrawArrays(GLenum mode, Glint first, GLsizei count); 
// mode 参数表示图元的类型。对于三角形,我们使用 GL_TRIANGLES。
// first 参数表示从哪个顶点开始绘制(通常是顶点 0,即第一个顶点),
// count 表示总共要绘制的顶点数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值