用opengl中的glfw库制作2d模型:三角形

用opengl中的glfw库制作2d模型:三角形

          最近在为模型制作而头痛,在搜索opengl的资料中,我发现了opengl的入门比较好的网站:http://learnopengl-cn.readthedocs.io/zh/latest/01%20Getting%20started/02%20Creating%20a%20window/

           glfw库的配置的话,按照上面一步一步的来,基本上就可以配置出来,这里的用到了一个工具Cmake:CMake是一个工程文件生成工具。用户可以使用预定义好的CMake脚本,根据自己的选择(像是Visual Studio, Code::Blocks, Eclipse)生成不同IDE的工程文件。

          比如glfw库,GLFW可以从它官方网站的网页上获取。GLFW已经有针对Visual Studio 2012/2013的预编译的二进制版本和相应的头文件,但是为了完整性我们将从编译源代码开始。编译完成后我们就可以在vs2013工程中链接使用这个库了。

          因为opengl中有些函数编译时比较繁琐,而相对的,glew这个库就被开发出来了,用以解决openl中有些函数编译繁琐此类的问题,这里我直接下载了glew的官方编译好的库,并没有利用Cmake这个工具自行编译。

          绘制图形时,分好几个步骤,刚开始时根据官网的指示,我们着重来了解两个过程:顶点着色器,片段着色器。

          定义声明顶点着色器:

const GLchar* vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 position;\n"
"void main()\n"
"{\n"
"gl_Position = vec4(position.x, position.y, position.z, 1.0);\n"
"}\0";

          定义声明片段着色器:

const GLchar* fragmentShaderSource = "#version 330 core\n"
"out vec4 color;\n"
"void main()\n"
"{\n"
"color = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n"
"}\n\0";

实例化glfw窗口:

        glfwInit();
	// Set all the required options for GLFW
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
	glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

接下来创建glfw窗口对象:

GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "LearnOpenGL", nullptr, nullptr);

之前说到glew用来管理OpenGL的函数指针的,所以在调用任何OpenGL的函数之前我们需要初始化GLEW。

glewExperimental = GL_TRUE;

设置渲染窗口大小

        int width, height;
	glfwGetFramebufferSize(window, &width, &height);
	glViewport(0, 0, width, height);

之后:

GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);//创建着色器对象
	glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
	glCompileShader(vertexShader);
	//编译着色器
	
	// 片段着色器
	GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
	glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
	glCompileShader(fragmentShader);
	
	// 着色器程序
	GLuint shaderProgram = glCreateProgram();
	glAttachShader(shaderProgram, vertexShader);
	glAttachShader(shaderProgram, fragmentShader);
	glLinkProgram(shaderProgram);
	glDeleteShader(vertexShader);
	glDeleteShader(fragmentShader);

接下来链接你的顶点并绘制就可以了:

while (!glfwWindowShouldClose(window))
	{
		
		glfwPollEvents();

		// Render
		// Clear the colorbuffer
		glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
		glClear(GL_COLOR_BUFFER_BIT);

		// Draw our first triangle
		glUseProgram(shaderProgram);
		glBindVertexArray(VAO);
		glDrawArrays(GL_TRIANGLES, 0, 3);
		glBindVertexArray(0);

		// Swap the screen buffers
		glfwSwapBuffers(window);
	}

最后运行图片附上:

用opengl中的glfw库制作2d模型:三角形_第1张图片





你可能感兴趣的:(opengl初学)