openGL

openGL

一、搭建环境

下载vs

https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Professional&channel=Release&version=VS2022&source=VSLandingPage&cid=2030&passive=false

下载glfw

https://www.glfw.org/download.html(下旧版本,新版本没有找到一些文件)

接入

image-20220426135919109

http://glew.sourceforge.net/

二、创建项目

新建一个空的项目,选择添加空的项目

image-20220426141518296

选择c++

image-20220426141632116

然后再次右键属性,发现这里已经有c++了

image-20220426141719300

属性选择【常规】-> 【所有配置】+【所有平台】

image-20220426142000546

然后选择【附加包含目录】选进去这个include库

image-20220426145240569

接着选链接器的附加包含目录

image-20220426143308069

lib是编译的时候用到的,如果完成源代码的编译,只需要lib,如果要使得动态库的程序运行起来,只需要dll

image-20220426144807122

新增三个资料库

opengl32.lib
glfw3.lib
glew32s.lib

新建测试代码

#include<iostream>//使用print

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


int  main() {
    printf("hihihi");
    while (true) {
        //do nothing

    }
}

image-20220426145715944

三、helloworld window

#include<iostream>//使用print

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


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,"my opengl window",NULL,NULL);
    if (window == NULL)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);

    //Init GLEW
    glewExperimental = true;
    if (glewInit() != GLEW_OK) {//初始化不成功

        printf("Init GLEW failed.");
        glfwTerminate();
        return -1;
    }
    //
    glViewport(0, 0, 800, 600);

    //Render Loop
    while (!glfwWindowShouldClose(window)) {
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    //释放/删除之前的分配的所有资源
    glfwTerminate();
    return 0;

}
  • glfwCreateWindow

image-20220426150852510

  •   GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);//开窗
    

    空指针这里的两个参数要打NULL,大写!!!

  • glViewport(0, 0, 800, 600);
    

    glViewport函数前两个参数控制窗口左下角的位置。第三个和第四个参数控制渲染窗口的宽度和高度(像素)。

  • while (!glfwWindowShouldClose(window)) {
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    
    • glfwWindowShouldClose函数在我们每次循环的开始前检查一次GLFW是否被要求退出,如果是的话该函数返回true然后渲染循环便结束了,之后为我们就可以关闭应用程序了。
    • glfwPollEvents函数检查有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)。
    • glfwSwapBuffers函数会交换颜色缓冲(它是一个储存着GLFW窗口每一个像素颜色值的大缓冲),它在这一迭代中被用来绘制,并且将会作为输出显示在屏幕上。

运行结果:

image-20220426153750991
posted @ 2022-05-16 20:32  记录学习Blog  阅读(92)  评论(0编辑  收藏  举报