C++ OpenGL學習筆記(1、Hello World空窗口程序)

終于抽出時間系統學習OpenGL 教程,同時也一步一步記錄怎樣利用openGL進行加速計算。

目錄

    • 1、環境準備
      • 1.1、庫的下載
      • 1.2、庫的選擇及安裝
    • 2、OpenGL第一個項目,Hello World!
      • 2.1、新建hello world控制臺項目
      • 2.2、配置openGL環境
        • 2.2.1 包含目錄配置
        • 2.2.2 庫目錄配置
        • 2.2.3 庫文件配置
        • 2.2.4 glad.c文件包含
      • 2.3、Hello World主程序代碼

1、環境準備

1.1、庫的下載

需下載glfw庫、glad庫
1、glfw庫:官方下載地址

在這里插入圖片描述

2、glad庫:官方下載地址

訪問官網后,根據下圖配置下載的版本等信息,點擊右下角的按鈕進入下載界面

在這里插入圖片描述在這里插入圖片描述

在下載界面,下載壓縮包即可,如下圖
在這里插入圖片描述
這里我也提供一下云盤下載地址,方便學習使用

通過網盤分享的文件:openGL_Lib
鏈接: https://pan.baidu.com/s/13Piu-gvnDoBylxkjZ5buJQ?pwd=6pk1 提取碼: 6pk1 
--來自百度網盤超級會員v5的分享

1.2、庫的選擇及安裝

1、glad.zip文件解壓后如下圖
在這里插入圖片描述
看看文件樹如下圖,里面沒有lib文件,都是源碼文件。所以glad.c文件后續跟著工程項目進行加載即可。
在這里插入圖片描述
2、glfw-3.4.bin.WIN64.zip解壓后如下,工程中重點使用include文件夾和下面各個VS庫即可
在這里插入圖片描述

我用的是VS2017,lib-vc2017文件夾如下,是個動態庫
在這里插入圖片描述

2、OpenGL第一個項目,Hello World!

2.1、新建hello world控制臺項目

在這里插入圖片描述

2.2、配置openGL環境

2.2.1 包含目錄配置

在這里插入圖片描述

2.2.2 庫目錄配置

在這里插入圖片描述

2.2.3 庫文件配置

在這里插入圖片描述

2.2.4 glad.c文件包含

把glad.zip解壓的src中的glad.c文件拷貝到項目main.cpp同級目錄,并且添加進工程里

2.3、Hello World主程序代碼

主程序main.cpp文件代碼修改如下,一個空的openGL窗口即可彈出

#include <glad/glad.h>
#include "GLFW/glfw3.h"
#include <iostream>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);//把關閉狀態設置為true}
}int main()
{glfwInit();//初始化上下文環境glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);//要求opengl 3版本以上glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3);glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);//GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL Core", 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))//創建的window關掉后就退出while循環{processInput(window);//glClearColor(0.2f,0.3f,0.3f,1.0f);//設置顏色glClear(GL_COLOR_BUFFER_BIT);//用設置的顏色把畫布進行清零掉glfwSwapBuffers(window);glfwPollEvents();}glfwTerminate();std::cout << "Hello World!\n";return 0;
}

運行后如下空窗口彈出,本篇完結。
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63704.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63704.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63704.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux系統命令基礎

Linux命令? [pypylinux ~]$ 普通?戶py&#xff0c;登陸后 [rootpylinux ~]# 超級?戶root&#xff0c;登錄后root代表當前登錄的?戶 分隔符pylinux 主機名~ 當前的登錄的位置&#xff0c;此時是家?錄# 超級?戶身份提示符 $ 普通?戶身份提示符操作系統?錄分隔符 Linux目錄…

不同版本的 Redis 的鍵值對內存占用情況示例

不同版本的 Redis 的鍵值對內存占用情況示例 文章目錄 不同版本的 Redis 的鍵值對內存占用情況示例Redis 6.0redisObjectdictEntrysds&#x1f340; 數據結構&#x1f340; sdslen() 函數&#x1f340; sdsReqType() 函數&#x1f340; sdsHdrSize() 函數 內存分配 - malloc() …

實現 WebSocket 接入文心一言

目錄 什么是 WebSocket&#xff1f; 為什么需要 WebSocket&#xff1f; HTTP 的局限性 WebSocket 的優勢 總結&#xff1a;HTTP 和 WebSocket 的區別 WebSocket 的劣勢 WebSocket 常見應用場景 WebSocket 握手過程 WebSocket 事件處理和生命周期 WebSocket 心跳機制 …

2024.7 XAI 遇見 LLM:可解釋 AI 與大型語言模型之間關系的調查

https://arxiv.org/pdf/2407.15248 問題 Q1&#xff1a;XAI 技術當前如何與 LLMs 集成&#xff1f;Q2&#xff1a;將 LLMs 與 XAI 方法融合的新興趨勢是什么&#xff1f;Q3&#xff1a;當前相關文獻存在哪些差距&#xff0c;哪些領域需要進一步研究&#xff1f; 挑戰 LLMs …

前端滾動錨點(點擊后頁面滾動到指定位置)

三個常用方案&#xff1a; 1.scrollintoView 把調用該方法的元素滾動到屏幕的指定位置&#xff0c;中間&#xff0c;底部&#xff0c;或者頂部 優點&#xff1a;方便&#xff0c;只需要獲取元素然后調用 缺點&#xff1a;不好精確控制&#xff0c;只能讓元素指定滾動到中間&…

前端筆記——大數據量瀏覽器卡頓優化思路

多任務數據量處理卡頓問題 任務分批次 為避免阻塞&#xff0c;可以將 長時間的單一任務 拆分成多個小任務并分批執行。這樣可以在兩次任務之間讓瀏覽器有時間處理渲染、用戶輸入等操作。兩種常見方法&#xff1a; setTimeout 方法&#xff1a; 使用 setTimeout 將任務分段&a…

數智化轉型是什么?

數智化轉型是指企業通過數字化&#xff08;Digitalization&#xff09;和智能化&#xff08;Intelligentization&#xff09;技術的結合&#xff0c;推動業務流程、產品服務、組織管理的全面升級&#xff0c;從而提升效率、增強創新能力&#xff0c;并實現更高價值。相比傳統的…

RIP實驗

要求及分析 路由器上分別配置環回 連接路由器的線路網段為12.1.1.0/24、23.1.1.1.0/24 R1和R3連接的網絡地址分別為192.168.1.0/24/192.168.2.0/24 整個網絡使用RIP達到全網可達 配置 先配置路由器各接口ip和環回和pc ip網關掩碼&#xff08;圖略&#xff09; 進行 RI…

Oracle 中間件 Webcenter Portal服務器環境搭建

環境信息 服務器基本信息 如下表&#xff0c;本次安裝總共使用2臺服務器&#xff0c;具體信息如下&#xff1a; Webcenter1服務器 歸類 SOA服務器 Ip Address 172.xx.xx.xx.xx HostName wcc01.xxxxxx.com Alias wccprd01 Webcenter2服務器 歸類 OSB服務器 Ip Addr…

macOS 配置 vscode 命令行啟動

打開 vscode 使用 cmd shift p 組合快捷鍵&#xff0c;輸入 install 點擊 Install ‘code’ command in PATH Ref https://code.visualstudio.com/docs/setup/mac

3、交換機IP路由功能

每個用例前自己最好先畫個圖&#xff0c;不然容易繞暈&#xff0c;這篇文章寫好久了&#xff0c;自己都覺得有點繞 一、直連路由 如果一個交換機與另一個交換機時直連著的并且他們用來連接的端口屬于同網段&#xff0c;那么這種情況下他們就屬于直連路由。不需要做任何配置便可…

分層架構 IM 系統之多媒體功能設計與實現

現在 IM 系統已經不僅限于文本消息的通訊了&#xff0c;多媒體數據占據越來越多的比重&#xff0c;比如&#xff1a;文件傳輸、語音通話、視頻通話等。 在前面的文章&#xff08;《基于需求分析模型來結構化剖析 IM 系統》&#xff09;中我們分析過&#xff0c;“多媒體消息”…

0.gitlab ubuntu20.04 部署問題解決

安裝依賴&#xff1a; ① sudo apt-get update 出現&#xff1a; 解決方式&#xff1a; 去 /etc/apt/sources.list.d 這個目錄刪除或注釋對應的list文件 第三方軟件的源一般都以list文件的方式放在 /etc/apt/sources.list.d 這個目錄 重新運行sudo apt-get update 安裝…

Next.js v15 - 服務器操作以及調用原理

約定 服務器操作是在服務器上執行的異步函數。它們可以在服務器組件和客戶端組件中調用&#xff0c;用于處理 Next.js 應用程序中的表單提交和數據修改。 服務器操作可以通過 React 的 “use server” 指令定義。你可以將該指令放在 async 函數的頂部以將該函數標記為服務器操…

什么是3DEXPERIENCE SOLIDWORKS,它有哪些角色和功能?

將業界領先的 SOLIDWORKS 3D CAD 解決方案連接到基于單一云端產品開發環境 3DEXPERIENCE 平臺。您的團隊、數據和流程全部連接到一個平臺進行高效的協作工作&#xff0c;從而能快速的做出更好的決策。 目 錄&#xff1a; ★ 1 什么是3DEXPERIENCE SOLIDWORKS ★ 2 3DEXPERIE…

【華為OD-E卷-開心消消樂 100分(python、java、c++、js、c)】

【華為OD-E卷-開心消消樂 100分&#xff08;python、java、c、js、c&#xff09;】 題目 給定一個 N 行 M 列的二維矩陣&#xff0c;矩陣中每個位置的數字取值為 0 或 1。矩陣示例如&#xff1a; 1 1 0 0 0 0 0 1 0 0 1 1 1 1 1 1 現需要將矩陣中所有的 1 進行反轉為 0&#…

[Unity]【圖形渲染】【游戲開發】Shader數學基礎4-更多矢量運算

在計算機圖形學和著色器編程中,矢量運算是核心的數學工具之一。矢量用于描述空間中的位置、方向、速度等各種物理量,并在圖形變換、光照計算、紋理映射等方面起著至關重要的作用。本篇文章將詳細講解矢量和標量之間的乘法與除法、矢量的加法與減法、矢量的模與單位矢量、點積…

【漏洞復現】CVE-2023-37461 Arbitrary File Writing

漏洞信息 NVD - cve-2023-37461 Metersphere is an opensource testing framework. Files uploaded to Metersphere may define a belongType value with a relative path like ../../../../ which may cause metersphere to attempt to overwrite an existing file in the d…

Bcrypt在線密碼加密生成器

具體前往&#xff1a;在線Bcrypt加密工具--使用bcrypt及生成salt的迭代次數強度參數計算生成哈希(摘要)

Django 模板分割及多語言支持案例【需求文檔】-->【實現方案】

Django 模板分割及多語言支持案例 這個案例旨在提供一個清晰的示范&#xff0c;展示如何將復雜的頁面分解為多個可復用的模板組件&#xff0c;使代碼更加模塊化和易于管理。希望這篇案例文章對你有所幫助。 概述 在 Django 項目開發中&#xff0c;使用模板分割和多語言支持能…