首页 > 编程语言 >第一个OpenGL程序(使用原生的GLFW GLAD)

第一个OpenGL程序(使用原生的GLFW GLAD)

时间:2024-04-04 11:11:42浏览次数:16  
标签:set CMAKE .. OpenGL GLFW include GLAD

一、编译GLFW 

生成 glfw3.lib

 

二、获取GLAD

 1、将glad.c 改为 glad.cpp

(将glad.cpp 加入到项目中)

 

三、CMakeLists.txt 管理项目  

 

cmake_minimum_required(VERSION 3.5)

project(01_OpenglFirstProject LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(GLFW ${CMAKE_SOURCE_DIR}/../../../thirdParty/GLFW)
set(GLAD ${CMAKE_SOURCE_DIR}/../../../thirdParty/GLAD)

file(GLOB SOURCEFILE ./*cpp)

# GLFW
include_directories(${GLFW}/include)
link_directories(${GLFW}/lib)
# GLAD
include_directories(${GLAD}/include)

add_executable(${PROJECT_NAME} ${SOURCEFILE})

target_link_libraries(${PROJECT_NAME} PRIVATE glfw3)

include(GNUInstallDirs)
install(TARGETS ${PROJECT_NAME}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

 

四、main.cpp

#include <iostream>
#include <glad/glad.h>
#include <glfw3.h>

using namespace std;

// 回调函数,每当窗口改变大小,视口大小也跟随改变
void framebuffer_size_callback(GLFWwindow* window,int width,int height)
{
    glViewport(0,0,width,height);
}

int main()
{
    cout << "你好OpenGL" << endl;

// GLFW (窗口)
    glfwInit();                                                    // 初始化GLFW
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);                  // 主版本号
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3);                  // 次版本号
    glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);  // 使用核心模式
    //glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); Mac OS X系统

    // 创建一个GLFW窗口对象
    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);                                 // 窗口的上下文设置为当前线程的主上下文

// GLAD
    if(!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))         // 初始化GLAD(初始化OpenGL函数指针)
    {
        std::cout<<"Failed to initialize GLAD"<<std::endl;
        return -1;
    }

// 视口
    glViewport(0,0,800,600);

// 视口跟随窗口大小改变
    glfwSetFramebufferSizeCallback(window,framebuffer_size_callback);

// 渲染循环
    while(!glfwWindowShouldClose(window))                            // 检查GLFW是否被要求退出
    {
        glfwSwapBuffers(window);                                     // 交换颜色缓冲(它是一个储存着GLFW窗口每一个像素颜色值的大缓冲),它在这一迭代中被用来绘制,并且将会作为输出显示在屏幕上。
        glfwPollEvents();                                            // 有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态
    }

// 当渲染循环结束后我们需要正确释放/删除之前的分配的所有资源
    glfwTerminate();
    return 0;
}

 

五、效果

 

标签:set,CMAKE,..,OpenGL,GLFW,include,GLAD
From: https://www.cnblogs.com/RedWetPlace/p/18113984

相关文章

  • openGL学习笔记(更新ing)
    本文章暂不介绍GLFW以及GL_GLAD的配置方法。学习赵新政初识openGL #include<iostream>#include"glad/glad.h"#include<GLFW/glfw3.h>//以上是配置好的glad以及glfw需注意glad需要在glfw上面接下来看看GLFW官网提供的ExampleCode#include<GLFW/glfw3.h>intmai......
  • [openGL] qt5版本+mingw编译Assimp库+调用
    目录一版本二编译问题三CMAKE准备四开始编译4.1准备Assimp源码4.2编译工具准备4.3生成Assimp库4.4使用Assimp4.4.1准备4.4.2加载模型4.4.3模型效果一版本Assimp官网上已经停止更新截至在3.3.1版本,但是这个版本编译是最稳定的,较新的版本需要在gith......
  • opengl日记12-opengl坐标系统
    文章目录环境代码CMakeLists.txtvertexShaderSource.vsmain.cpp总结环境系统:ubuntu20.04opengl版本:4.6glfw版本:3.3glad版本:4.6cmake版本:3.16.3gcc版本:10.3.0在<opengl学习日记11-opengl的transformtions变换示例>的基础上,进行修改,实现坐标系统变换效果。代码CM......
  • opengl日记7-ubuntu20.04开发环境opengl拓展glfw和glad环境搭建
    文章目录ubuntu中安装opengl核心环境安装glfw安装glad测试验证程序vscode的task.json配置如下note参考ubuntu中安装opengl核心环境可执行如下命令进行整体安装:sudoapt-getinstalllibgl1-mesa-dev*或者单独安装1、提供编译程序必须软件包的列表信息sudoapt......
  • 【无标题】计算机图形学OpenGL基础
    一、OpenGL的主要功能模型绘制模型观察颜色模式光照应用图像效果增强位图和图像处理纹理映射实时动画交互技术二、OpenGL的绘制流程----------工作方式**一个完整的窗口系统的OpenGL图形处理系统的结构为:最底层为图形硬件,第二层为操作系统,第三层为窗口系统,第四层为OpenG......
  • opengl日记10-opengl使用多个纹理示例
    文章目录环境代码CMakeLists.txt文件内容不变。fragmentShaderSource.fsvertexShaderSource.vsmain.cpp总结环境系统:ubuntu20.04opengl版本:4.6glfw版本:3.3glad版本:4.6cmake版本:3.16.3gcc版本:10.3.0在<opengl学习日记9-opengl使用纹理示例>的基础上,拓展使用多个纹......
  • OpenGL万字超详解笔记(适合新手小白)
    OpenGL万字超详解笔记(适合新手小白)参考资料20分钟让你了解OpenGL——OpenGL全流程详细解读【OpenGL】基本API的详解及参考OpenGL初学者入门——学习指南【共9篇文章】LearnOpenlcnOpenGL状态机深度测试(DepthTest)概念[OpenGL]VBO,VAO和EBO详解基本概念OpenGL是什......
  • 【OpenGL原理】顶点着色器、片元着色器、几何着色器
    一、说明        我们除了对GLSL语言本身的理解,对真正的宏观管线认知是越早越好的事情。理解着色器的能力,以及使用局限性能够迫使我们修正设计思路。也许我们胸中有无限多的想象,一旦面对着色器的无能为力,精妙想向也就灰飞叶湮灭。有时需要引进其它的环节,但又不能确定......
  • Qt opengl和qlabel的update同时更新,内存泄漏问题
    工作要做一个类似播放器的软件,但是需要自己解码,然后可能多张图像合成再显示,所以不能直接用QT播放视频的模块,就用了QOpenGLWidget来渲染。后面发现内存一直在涨,一直以为是自己的原因,因为解码分配的内存挺多的,折腾了快一个月了,后面发现是update频繁更新导致;如下代码,XVideoWidget继......
  • Opengl不使用Glut单元显示字符
    在Opengl中显示字符多用Glut单元中的glutBitmapCharacter进行显示。这样有两个问题。1、是不能显示汉字。2、是要glut32.dll库支持。通过研究可以不用Glut,只用其它的GL库就能实现中文显示1、加入库usesOpenGLContext,GL,glu;2、生成Opengl显示窗口varGLBox:TOpenGLCont......