openGL学习笔记

openGL,open Graphics Library,开放图形库,用来渲染2D、3D的跨平台、跨语言API,其中内含的库GLFW、GLUT和GLAD就是我现在要用要学的,个人喜欢在vscode上面编辑,所以下面的都是基于本机win10系统和vscode上面的配置开发。

  1. 下载
    GLFW下载
    首先就是这个包的下载,对应官网有两个版本:
    最上面的source package和下面对应windows系统的windows pre-compiled binaries,前者是源代码版本,下载后需要另外编译配置,我没去试,我选择后面的已经构架好的,直接就用,这里是64位。
    在这里插入图片描述
    下载后解压是这样的
    在这里插入图片描述
    GLAD下载
    在这里插入图片描述
    在上面的语言项选择[c/c++],API选择最新的[我这里是4.6],profile中选择[core],options选中generate a loader,最后点击generate生成下载即可。
    GLUT下载
    和上面的类似的,找到压缩包,点击下载即可。
  2. 下载好后就是应用配置。
    vscode下创立工程文件夹test,创建include、src和lib目录,开始配置…然后发现,没有我要的lib-mingw-w64目录(glfw目录下),然后我只能回头找到32位的来用一下,发现居然有。。。。。。

在这里插入图片描述
接下来的工作就是复制粘贴了
glfw-3.3.3.bin.WIN32目录下:
include目录中GLFW目录复制到新建的include目录下;
lib-mingw目录中glfw3.dll和libglfw3dll.a文件复制到新建lib目录下;
glad目录下:
include目录中glad目录和KHR目录复制到新建include目录下;
src目录下glad.c复制到新建src目录下
承接上文,根据大佬起见,我把glad.c编成静态库
进入cmd命令行,进行编译

E:\>h:

H:\>cd H:\project\vscode course\c++_course\test

H:\project\vscode course\c++_course\test>gcc .\src\glad.c -c -I.\include\

H:\project\vscode course\c++_course\test>ar -rc libglad.a glad.o

H:\project\vscode course\c++_course\test>

gcc -I 命令是把后接目录作为第一个查找头文件目录
生成静态库文件
ar –rc test.a test.o
得到的结果如下:
在这里插入图片描述
然后复制上面的libglad.a到lib目录,结果是否可行,现在还不确定。
3. 测试
好了,准备工作好像ok了,来测试一下
src目录新建一个test.cpp文件,网上找一个测试代码:

#include "glad.h"
#include "glfw3.h"
#include <iostream>
// 设置窗口尺寸
const unsigned int SCR_WIDTH = 400;
const unsigned int SCR_HEIGHT = 300;
int main()
{
    // glfw: 初始化
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#ifdef __APPLE__
    // uncomment this statement to fix compilation on OS X
       glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif
    // glfw 创建窗口
    GLFWwindow *window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "Test<GLFW+GLAD>", NULL, NULL);
    if (window == NULL)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);
    // glad: load all OpenGL function pointers
    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    {
        std::cout << "Failed to initialize GLAD" << std::endl;
        return -1;
    }
    // render loop
    while (!glfwWindowShouldClose(window))
    {
        glClearColor(0.0f, 1.f, 0.0f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);
        // glfw: swap buffers and poll IO events (keyspressed/released, mouse moved etc.)
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    // glfw: terminate, clearing all previously allocated GLFWresources.
    glfwTerminate();
    system("pause");
    return 0;
}

然后可以看到的是vscode显示无法查找头文件<glad/glad.h>和<GLFW/glfw3.h>,也就是说接下来得配置头文件查找路径:
捣鼓了半天,干脆破罐子破摔,直接把这两个文件给复制到当前工作目录下:

#include "glad.h"
#include "glfw3.h"

后面继续修改,各种头文件无法查找,粗暴放在了工作目录上然后#include" "
然后就是undefined reference to `glfwTerminate’错误了,编译链接的问题
然后问题实在太多,只好放了
回到vs2015进行简单使用先
创立空项目
打开项目属性,点击VC++目录
在这里插入图片描述
在包含目录里面加进所下载的glad和glfw的include目录路径,然后是库目录加进glfw对应vs版本的路径,我的是vs2015,所以加进去的是lib-vc2015目录,然后是链接器的输入项,
在这里插入图片描述
附加依赖项输入glfw3.lib进行链接。最后往源文件一项复制进glad目录中src目录下的glad.c文件,新建main.cpp进行测试
在这里插入图片描述

#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
using namespace std;

void framebuffer_size_callback(GLFWwindow* window, int width, int height);

int main() {
	glfwInit();
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

	GLFWwindow *window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
	if (window == NULL) {
		cout << "Failed to create GLFW window" << endl;
		glfwTerminate();
		return -1;
	}
	glfwMakeContextCurrent(window);

	if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
		std::cout << "Failed to initialize GLAD" << std::endl;
		return -1;
	}

	glViewport(0, 0, 800, 600);

	glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

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

	glfwTerminate();
	return 0;
}

void framebuffer_size_callback(GLFWwindow* window, int width, int height) {
	glViewport(0, 0, width, height);
}

要注意的是,我这里是64位系统,对应的glfw也是选中的64位文件,还有vs2015中配置也改一下:debug那里,点击配置管理器,平台选中x64,活动解决方案平台x64,最后编译运行就可以了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面就是我的测试结果。学习先搁置,现在求职ing。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值