zoukankan      html  css  js  c++  java
  • (一)VS2015下配置OpenGL

    刚开始用OpenGL,一开始不太明白配置库的原理,在VS2015下耗费了大量时间。这里将配置过程做个笔记,以供日后查看。配置过程中,需要下载cmake构建工具以及glew和glfw库。
    下载地址为:

    配置库的基本知识

      在引用外来库时,很少使用源文件(.cpp),大部分库提对类进行声明的头文件和封装了类的链接库(lib静态库或dll动态库)。C++的库会把函数、类的声明放在.h中,实现放在.cpp或.cc中。编译之后,.cpp,.cc,.c会被打包成一个.lib文件,这样可以保护源代码。所以,要使用一个库,除了要include他的头文件以外,还要在链接过程中把lib加进去。

     一般而言,配置过程主要有2中方法:

    • 第一种  可以将我们需要的.lib文件和.h文件拷贝到我们的程序目录下。因为编译时,编译器会在程序所在的文件中逐个寻找。若我们使用的库文件存在动态链接文件时,一般我们把它拷贝到我们程序可执行文件所存在的文件中,这样我们就可以在我们的程序中使用。
    • 第二种  我们可以在我们的程序中加载我们所需要的库文件,从而不需要拷贝到自己程序的目录下。也就是说手动指定当前项目需要搜索库和头文件的位置。具体步骤为:打开一个项目,鼠标点击项目==》属性 VC++目录包含目录,在此出添加头文件的路径,可添加多个,中间用分号隔开。然后在包含目录下面的库目录中加.lib文件的路径。这样就可以在项目中引用外来库啦。

    在下面配置过程中,我们均采用第二种方案。首先新建一个文件夹OpenGL;在该文件夹下新建include文件夹用来存放头文件,新建libs文件夹来存放库文件。

    配置glew

     我们下载的windows版本的glew已经是VS项目(下载的是32位二进制文件),这里不需要cmake来构建。可以直接用VS2015来编译生成需要的库。

    • 找到build文件VC12下面工程文件(glew.sln),用VS2015启动工程文件,然后Ctrl+Shift+B生成解决方案。
    • 接下来将glew文件下的lib\Debug\Win32中的glew32sd.lib拷贝到OpenGL\libs下面。将glew文件夹下的include中的GL文件拷贝到OpenGL\include下。
      到此,glew配置完成,最后面将说明如何在项目中引用。

    配置glfw

      glfw不能像glew那样,这里需要先用cmake将项目构建成VS2015下的工程项目,然后再像glew那样去配置。

    • 在glew下面新建文件夹build,用来存放构建的项目。运行cmake的bin目录下的cmake-gui.exe
    • 分别选择source code路径和build后存的位置,点击configure配置为Vs2015,然后Generate。
    • 打开刚才build的项目,接下来和上面glew操作一样。

    在项目中使用glew和glfw

     新建一个空白项目,如前面讲到的,在项目属性中找到包含目录库目录,分别加入头文件路径和库路径。

    并将下面三个.lib文件加入到连接器,附加依赖项中。

    • opengl.lib
    • glew32sd.lib
    • glfw3.lib

    下面来写个代码测试一下

    #include <stdio.h>
    #include <iostream>
    //#include <fstream>
    
    //#include <OpenGL/gl.h>
    
    #define GLEW_STATIC
    #include <GL/glew.h>
    #include <GLFW/glfw3.h>
    
    void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
    {
    	std::cout << key << std::endl;
    	if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
    		glfwSetWindowShouldClose(window, GL_TRUE);
    }
    
    
    int main(int argc, const char * argv[])
    {
    
    	// glfw init
    	glfwInit();
    	glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    	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);
    
    
    
    	// Create window
    	GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", nullptr, nullptr);
    	if (window == nullptr)
    	{
    		std::cout << "Failed to create GLFW window" << std::endl;
    		glfwTerminate();
    		return -1;
    	}
    	glfwMakeContextCurrent(window);
    
    	// Set the required callback functions
    	glfwSetKeyCallback(window, key_callback);
    
    	// Set this to true so GLEW knows to use a modern approach to retrieving function pointers and extensions
    	glewExperimental = GL_TRUE;
    	// Initialize GLEW to setup the OpenGL Function pointers
    	if (glewInit() != GLEW_OK)
    	{
    		std::cout << "Failed to initialize GLEW" << std::endl;
    		return -1;
    	}
    
    	// Define the viewport dimensions
    	int width, height;
    	glfwGetFramebufferSize(window, &width, &height);
    	glViewport(0, 0, width, height);
    
    	while (!glfwWindowShouldClose(window))
    	{
    		// Event
    		glfwPollEvents();
    
    		// Render
    		glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
    		glClear(GL_COLOR_BUFFER_BIT);
    
    		// Swap buffer
    		glfwSwapBuffers(window);
    	}
    
    	// Terminate GLFW, clearing any resources allocated by GLFW.
    	glfwTerminate();
    
    
    	return 0;
    }
    

  • 相关阅读:
    张维迎:你必须知道的10个经济学原理
    艾德莱斯绸:“千年时尚”托起新产业
    Sending forms through JavaScript[form提交 form data]
    Sending form data
    Your first HTML form
    form submission
    <input type="file">
    web storm查看文件结构
    jQuery-File-Upload
    IHttpHandler
  • 原文地址:https://www.cnblogs.com/tandier/p/7979635.html
Copyright © 2011-2022 走看看