环境搭建

首先说一下自学的网址: https://learnopengl-cn.github.io/ 这个也是主要资料。

1.GLFW下载与配置:

下载地址:https://www.glfw.org/download.html

建议下载32位的,据说64位会有很多问题所以我就先不用了。

下载后里面有很多VS版本的类库,至于用哪一个就看使用的VS版本了。

打开VS创建一个空的C++项目,然后再解决方案中右击项目打开属性页。

 

2.GLAD下载与配置:

打开网址 http://glad.dav1d.de/ 按以下配置进行选择:

选完后

在生成后的页面下载生成后.zip文件:

把解压后的include里面的两个文件夹复制到glfw的include文件夹下,当然你也可以再创建个项目进行外链。

把src下的文件glad.c复制到自己的项目中去.按以下步骤把glfw3.lib和opengl32.lib加入链接器。

 

 3.测试:

创建.cpp文件把下面代码复制进去,看是否出现了窗口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include<iostream>
using namespace std;
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow *window);
int main()
{
    glfwInit();
    //设置glfw的版本为3.3
    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)
    {
        std::cout << "Failed to create GLFW window" << std::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))
    {
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);
        // 输入
        processInput(window);
 
        // 渲染指令
 
 
        // 检查并调用事件,交换缓冲
        glfwPollEvents();
        glfwSwapBuffers(window);
    }
    glfwTerminate();
    return 0;
}
//当窗口改变时调用
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
    glViewport(0, 0, width, height);
}
//给窗体注册输入事件
void processInput(GLFWwindow *window)
{
    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
    {
        glfwSetWindowShouldClose(window, true);
    }  
}

  

posted @   游戏鼻祖  阅读(177)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2017-05-24 Oracle的基本语法(增删改查)
2017-05-24 Oracle存储过程的学习
点击右上角即可分享
微信分享提示