<OpenGL系列> 1 . OpenGL的初步学习之环境的搭建

前 言

目前我现在是在做关于CAD方面的工作,可能在日常的需求中,会出现大量的牵扯到几何计算、图形处理、碰撞检测等此类问题。在项目中,我们之前的程序代码年代有些久远了,某些算法计算还是十分依赖CPU的性能,耗时令人无法接受,并且在图形绘制渲染中,依然是简单的GDI+。所以还是希望能了解、学习到一种流行的图形库来使问题简单。

选择什么样的图形库?

· Direct3D
· OpenGL
· Vulkan

我所知道的,可能仅限以上的三种库了,对于第一种,Direct3D是基于微软的COM的3D图形的API,目前只能在Windows平台上使用。第三种Vulkan是在2015年发表的,但是感觉支持的组织并不是很多,如果要深入学习的话,中文资料也不多,外文资料可能需要Google了。所以,我还是选择OpenGL来作为计算机图形领域的一个基石吧。

什么是OpenGL?

OpenGL是一个专业的图形程序接口。不管是三维,还是二维图形的渲染、处理都是可以的。一个很重要的特性是,跨平台、跨语言、硬件无关性。这样,不仅限于Windows,还可以在移动领域(Android / IOS),Web领域、虚拟现实领域都可以使用它来进行计算机图形处理。

学习的基础

我觉得还是具备一些高级程序设计语言的背景(C/C++、Java、C#等)、数据结构的理解、数学知识(线性代数、离散数学、基础数学、高等数学等)。
(我自己的数学并不好,所以我打算在学习OpenGL的过程中,重拾数学。)

另:我是我参考的学习教程链接: Learn OpenGL

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


1 . 开发环境

     · 操作系统平台:Windows系列(我是Windows 10)
     · 集成开发环境:Visual Studio系列(我的是Visual Studio 2015 Community),其他的也可以。
    
2 . 环境配置

      框架的选择

     当时在看这部分的时候,有点迷茫。因为当编写OpenGL程序运行时,肯定是要看到一个Windows窗口。而如果我们如果手动去完成Windows窗口在程序中的创建的话,并可以接收外部设备的信息的话,应该是十分麻烦的。所以就有几个流行的开源框架,帮助我们去进行窗口的创建,以及消息的捕获,图形的渲染等。这些库是基于OpenGL的。目前流行的,有GLUT、SDL、SFML、GLFW等。我在看一些教程的时候,有的用这个库作实例,有的用另外的库,感觉还是一头雾水。权衡了下,我还是用GLFW了。

     库文件准备

     GLFW的官方下载渠道: http://www.glfw.org/download.html  (下载的时候可能会非常慢)

     我上传的下载链接: http://download.csdn.net/detail/u010202481/9868766

     2.1 文件的位置

     最好。我的意思是,最好新建一个文件夹,放置在某个固定的本地磁盘里。不然你可能需要每次换一个项目就在工程文件中添加一次。

     这是我的文件位置:

    
     
     这是OpenGL / include文件夹:

    
     这是OpenGL / include / GL 文件夹:

    
    这是OpenGL / include / GLFW文件夹:

   
    这是OpenGL / lib 文件夹:

   
     以上就是库文件的位置放置,我觉得这样看起来比较直接,直接看文件在哪,没有哪个文件自己添加。


     2.2 Visual Studio的配置

     首先新建一个工程文件。File -> New ->   Project -> Empty Project->Finish
     然后,右键工程文件,新建一个*.cpp文件。
     打开Project->Property pages->VC++ Directories->include Directories->"C:\OpenGL\include",library Directories->"C:\OpenGL\lib"
     接着。Link->input->additional Dependencies->"opengl32.lib,glfw3.lib,glew32s.lib"

     2.3 运行测试

     首先,我是觉得先将窗口运行起来,至于程序的意思,当环境配置没有问题的时候,再仔细讨论,甚至也可以断点调试自己看,不然感觉不太好。

     复制下面的程序,运行试试看。
#include <iostream>

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

#include "../OpenGL/Variable/Define.h"
#include "../OpenGL\Vertices/Vertices.h"


void key_callback(GLFWwindow *window, int key, int scanmode, int action, int mode);


int main()
{
	//!1
	//!\brief GLFW 
	// INIT
	// MAJOR VERSION
	// MINOR VERSION
	// MODEL
	// WINDOW
	glfwInit();
	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);

	GLFWwindow* window = glfwCreateWindow(900, 800, "OpenGL", nullptr, nullptr);
	if (window == nullptr)
	{
		std::cout << "Failed to create window" << std::endl;
		glfwTerminate();
		return -1;
	}

	glfwMakeContextCurrent(window);

	//!2
	glfwSetKeyCallback(window, key_callback);

	//!3
	//!\brief GLEW
	glewExperimental = GL_TRUE;
	if (glewInit() != GLEW_OK)
	{
		std::cout << "Failed to initialize GLEW" << std::endl;
		return -1;
	}

	//!4
	//!\brief ViewPort
	int width, height;
	glfwGetFramebufferSize(window, &width, &height);
	glViewport(0, 0, width, height);
        //!brief Game Loop
	while (!glfwWindowShouldClose(window))
	{
		// check event
		glfwPollEvents();

		// Rendering
		glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
		glClear(GL_COLOR_BUFFER_BIT);

		// swap buffer
		glfwSwapBuffers(window);
	}

	glfwTerminate();
	return 0;
}

void key_callback(GLFWwindow *window, int key, int scanmode, int action, int mode)
{
	std::cout << key << std::endl;
	if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
		glfwSetWindowShouldClose(window, true);
}
今天先到这里,慢慢学这些了。可能有哪些纰漏,我会及时更改的。下一期说一下配置失败的情况,以及这些OpenGL程序到底是什么意思吧。
有兴趣的话,可以加微信,一起学习啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值