OpenGL学习笔记01--GLFW、GlAD、GLUT安装

OpenGL 专栏收录该内容
1 篇文章 0 订阅

OpenGL学习笔记01–GLFW、GLAD、GLUT安装

1.GLFW

https://www.glfw.org/download.html

进入该网站直接下载32-bit Windows binaries

ps:注意旁边的提示,vs10及以上的下载64位,其他下载32位,但通常建议都使用32位。下载好后直接解压。
在这里插入图片描述

2.GLAD

https://glad.dav1d.de/

在这里插入图片描述

如图所示,其中gl选择最新版的即可。选择好后,Options中勾选 Generate a loader,再点击下方GENERATE。

在这里插入图片描述
3.GLEW

http://glew.sourceforge.net/
在这里插入图片描述
通常都是下载32位!

下载后解压,此时你将得到这三个文件夹。

在这里插入图片描述

再新建一个文件夹(例如:OpenGL,不要是中文),新建三个子文件夹,分别为include,lib,src。

将glfw-3.3.2.bin.WIN32->include->GLFW和glew-2.1.0->include->GL复制到OpenGL->include中
在这里插入图片描述

在这里插入图片描述

将glfw-3.3.2.bin.WIN32->lib-vc2019(对应你所使用的版本)->glfw3.lib和glew-2.1.0->lib->Release->Win32->glew32.lib、glew32s.lib复制到OpenGL->lib中
在这里插入图片描述

在这里插入图片描述

将glad->include下面的两个文件夹全部复制到OpenGL->include中

在这里插入图片描述

将glad->src下的内容复制到OpenGL->src中

在这里插入图片描述

在vs中新建一个空项目

在这里插入图片描述

将刚刚建好的OpenGL文件夹复制到和项目同级目录中

在这里插入图片描述

右键项目选择属性,VC++目录->包含目录,将OpenGL中的include文件夹添加进来,再选择VC++目录->库目录,将OpenGL中的lib文件夹添加进来。

ps:记得选择所有配置,所有平台

在这里插入图片描述
在这里插入图片描述

在链接器->输入->附加依赖项选项卡里添加
opengl32.lib
glew32s.lib
glfw3.lib
在这里插入图片描述

填写完成后,点击应用,确定后退出。

右键源文件,添加现有项,将OpenGl->src下的glad.c文件添加进来

在这里插入图片描述
在这里插入图片描述

一切完成后,新建一个cpp文件,跑测试代码。
vs有个小问题,就是没有添加c++文件,在属性里面是没有C/C++这栏的,再添加cpp文件后,再次打开属性页,在C/C+±>常规->附件包含目录中添加OpenGL文件夹中的include文件夹,在链接器->常规->附加库目录中添加OpenGL文件夹中的lib文件夹,一切完成。

#define GLEW_STATIC
#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
//#include <glm/>


void processInput(GLFWwindow* window);


//模型顶点数据
float vertices[] = {
	0.5f, 0.5f, 0.0f,   /* Postion 右上角  Color*/  1.0f, 0.0f, 0.0f,
	0.5f, -0.5f, 0.0f,  /* 右下角 */			    0.0f, 1.0f, 0.0f,
	-0.5f, -0.5f, 0.0f, /* 左下角 */			    0.0f, 0.0f, 1.0f,
	-0.5f, 0.5f, 0.0f,  /* 左上角*/					1.0f, 0.0f, 1.0f,
};


unsigned int indices[] = { // 注意索引从0开始! 
	0, 1, 3, // 第一个三角形
	1, 2, 3  // 第二个三角形
};

const char* vertexShaderSource =
"#version 330 core                                \n		"
"layout(location = 0) in vec3 aPos;              \n			"
"layout(location = 1) in vec3 aColor;              \n			"
"out vec4 vertexColor;                                      \n"
"void main(){\n												"
"		gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n	"
"		vertexColor = vec4(aColor.x,aColor.y,aColor.z,1.0);}\n					";

const char* fragmentShaderSource =
"#version 330 core                             \n	"
"in vec4 vertexColor; \n"
"out vec4 FragColor;                           \n	"
"void main(){\n										"
"		FragColor = vertexColor;}\n";

int main(int argc, char* argv[]) {


	glfwInit();
	//设置opengl版本3.3
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//告诉glfw主要版本3
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//告诉glfw次要版本3
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//告诉glfw使用core-profile

	GLFWwindow* window = glfwCreateWindow(800, 600, "Test window", NULL, NULL);

	if (window == NULL)
	{
		std::cout << "Failed to create GLFW window" << std::endl;
		glfwTerminate();//销毁窗口,释放资源
		//return EXIT_FAILURE;
	}
	glfwMakeContextCurrent(window);//指定线程

	glewExperimental = true;

	if (glewInit() != GLEW_OK)//初始glew工具
	{
		std::cout << "glew init failed." << std::endl;
		glfwTerminate();
		return EXIT_FAILURE;
	}
	//设置视口视角
	glViewport(0, 0, 800, 600);
	/*
	//框线模式 Wireframe Mode
	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
	//剔除多边形背面
	//glEnable(GL_CULL_FACE);
	//glCullFace(GL_FRONT);//GL_BACK:剔除背面 ,GL_FRONT:剔除正面
	*/
	//VAO 绑定Vertex Arrays
	unsigned int VAO;
	glGenVertexArrays(1, &VAO);
	glBindVertexArray(VAO);
	//VBO
	unsigned int VBO;
	glGenBuffers(1, &VBO);
	glBindBuffer(GL_ARRAY_BUFFER, VBO);
	glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

	//EBO
	unsigned int EBO;
	glGenBuffers(1, &EBO);

	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
	glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);


	//编译
	unsigned int vertexShader;
	vertexShader = glCreateShader(GL_VERTEX_SHADER);
	glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
	glCompileShader(vertexShader);

	unsigned int fragmentShader;
	fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
	glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
	glCompileShader(fragmentShader);
	//link 程序
	unsigned int shaderProgram;
	shaderProgram = glCreateProgram();
	glAttachShader(shaderProgram, vertexShader);
	glAttachShader(shaderProgram, fragmentShader);
	glLinkProgram(shaderProgram);


	glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)0);
	glEnableVertexAttribArray(0);
	glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3 * sizeof(float)));
	glEnableVertexAttribArray(1);

	while (!glfwWindowShouldClose(window))
	{
		//1.input
		//--------
		processInput(window);

		//2.render
		//--------
		//设置要填充的颜色(r 0-1.0,g 0-1.0,b 0-1.0,不透明度0-1.0)
		glClearColor(0.2f, 0.3f, 0.3f, 0.1f);
		//清空colorbuff的缓冲区
		glClear(GL_COLOR_BUFFER_BIT);
		//--------

		//Draw Triangle
		glBindVertexArray(VAO);
		glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);

		glUseProgram(shaderProgram);
		//glDrawArrays(GL_TRIANGLES, 0, 6);

		glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

		//3.swap buffers and Poll IO events
		//-------
		glfwSwapBuffers(window);
		glfwPollEvents();

	}

	glfwTerminate();
	//std::cin.get();
	return 0;
}
//Esc按键响应程序
void processInput(GLFWwindow* window) {
	if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
	{
		glfwSetWindowShouldClose(window, true);
	}


}

正确运行结果如下:
在这里插入图片描述

喜大普奔!!!安装成功!!!

3.GLUT

在这里插入图片描述

https://www.opengl.org/resources/libraries/glut/

从官网得知目前推荐使用freeglut。这里提供一个OpenGL库,比较方便。https://pan.baidu.com/s/1iXQTo2dBgkD8zLE8AblgqA 提取码:yvtx
下载后解压,配置OpenGL也就是需要把这include,dll,lib三个文件夹放到安装对应的文件夹中。

按照下图路径找到对应文件夹,下图是vs2019的路径,其他版本可以自行寻找。

在这里插入图片描述

将解压得到的lib文件夹和include文件夹复制到图中对应的文件夹中
再把dll文件夹中的5个dll文件粘贴到C:\Windows\System32和C:\Windows\SysWOW64

再运行测试代码,正确结果如下图所示:

#include <openGL/glut.h>
 
void init(void)
{
	glClearColor(1.0, 1.0, 1.0, 0.0);
 
	glMatrixMode(GL_PROJECTION);
	gluOrtho2D(0.0, 200.0, 0.0, 150.0);
}
 
void lineSegment(void)
{
	glClear(GL_COLOR_BUFFER_BIT);
	glColor3f(1.0, 0.0, 0.0);
	glBegin(GL_LINES);
	glVertex2i(180, 15);
	glVertex2i(10, 145);
	glEnd();
 
	glFlush();
}
 
void main(int argc, char** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	glutInitWindowPosition(50, 100);
	glutInitWindowSize(400, 300);
	glutCreateWindow("Demo OpenGL Program");
 
	init();
	glutDisplayFunc(lineSegment);
	glutMainLoop();
 
}

在这里插入图片描述

ps:这里是#include <openGL/glut.h>,因为glut.h头文件保存在openGL文件夹中。网上有的教程的测试代码或者教学代码是#include <GL/glut.h>,直接复制用来跑代码要先修改。

按照上述操作,你已经可以开始OpenGL学习,无论你是使用蓝宝书学习还是在https://learnopengl-cn.github.io/中学习,都够用了。

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值