OpenGL笔记二之glad加载opengl函数以及opengl-API(函数)初体验

news2024/11/13 11:28:08

OpenGL笔记二之glad加载opengl函数以及opengl-API(函数)初体验

总结自bilibili赵新政老师的教程

code review!

文章目录

  • OpenGL笔记二之glad加载opengl函数以及opengl-API(函数)初体验
    • 1.运行
    • 2.重点
    • 3.目录结构
    • 4.main.cpp
    • 5.CMakeList.txt

1.运行

在这里插入图片描述

2.重点

在这里插入图片描述

3.目录结构

01_GLFW_WINDOW/
├── CMakeLists.txt
├── glad.c
├── main.cpp
└── thirdParty
    ├── include
    │   ├── glad
    │   │   └── glad.h
    │   ├── GLFW
    │   │   ├── glfw3.h
    │   │   └── glfw3native.h
    │   └── KHR
    │       └── khrplatform.h
    └── lib
        └── glfw3.lib

6 directories, 8 files

4.main.cpp

#include <iostream>

//注意:glad头文件必须在glfw引用之前引用
#include<glad/glad.h>
#include <GLFW/glfw3.h>

/*
*┌────────────────────────────────────────────────┐
*│ 目	   标: OpenGL函数体验
*│ 讲    师: 赵新政(Carma Zhao)
*│ 拆分目标:
*│
*│ 		1	使用glad加载所有当前版本需要的opengl函数
*│ 		2	查看glad的源代码,并且理解她做了什么
*│ 		3	函数练习
*│ 			3.1	glViewport:规定视口大小
*│ 			3.2	glClearColor:设置画布清理的颜色
*│ 			3.3	glClear(GL_COLOR_BUFFER_BIT):执行画布清理操作
*│ 			3.4	glfwSwapBuffers(window):执行双缓存切换
*└────────────────────────────────────────────────┘
*/

//声明且实现一个响应窗体大小变化的函数
void frameBufferSizeCallBack(GLFWwindow* window, int width, int height) {
//	std::cout << "窗体最新大小:" << width << " , " << height << std::endl;
	glViewport(0, 0, width, height);
}

//声明且实现一个键盘消息回调函数
void keyCallBack(GLFWwindow* window, int key, int scancode, int action, int mods) {
	if (key == GLFW_KEY_W) {
		//触发了w
	}
	if (action == GLFW_PRESS) {
		//键位按下
	}
	if (action == GLFW_RELEASE) {
		//键位抬起
	}
	if (mods == GLFW_MOD_CONTROL) {
		//按下ctrl的同时,按下了key
	}
	if (mods == GLFW_MOD_SHIFT) {
		//按下shift的同时,按下了key
	}
	std::cout << "按下了:" << key << std::endl;
	std::cout << "action:" << action << std::endl;
	std::cout << "mods:" << mods << std::endl;
}

int main() {
//1 初始化GLFW基本环境
	glfwInit();
	//1.1 设置OpenGL主版本号、次版本号
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	//1.2 设置OpenGL启用核心模式(非立即渲染模式)
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

//2 创建窗体对象
	GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGLStudy", NULL, NULL);
	//**设置当前窗体对象为OpenGL的绘制舞台
	glfwMakeContextCurrent(window);

	//设置监听,监听窗体大小变化的消息
	glfwSetFramebufferSizeCallback(window, frameBufferSizeCallBack);
	//设置监听,监听键盘消息
	glfwSetKeyCallback(window, keyCallBack);

//*****使用glad加载所有当前版本opengl的函数
	if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
		std::cout << "Failed to initialize GLAD" << std::endl;
		return -1;
	}

	//设置opengl视口以及清理颜色
	glViewport(0, 0, 800, 600);
	glClearColor(0.2f, 0.3f, 0.3f, 1.0f);

//3 执行窗体循环
	while (!glfwWindowShouldClose(window)) {
		//接收并分发窗体消息
		//检查消息队列是否有需要处理的鼠标、键盘等消息
		//如果有的话就将消息批量处理,清空队列
		glfwPollEvents();

		//执行opengl画布清理操作
		glClear(GL_COLOR_BUFFER_BIT);

		//渲染操作

		//切换双缓存
		glfwSwapBuffers(window);
	}


//4 退出程序前做相关清理
	glfwTerminate();

	return 0;
}

5.CMakeList.txt

# 指定 CMake 最低版本
cmake_minimum_required(VERSION 3.12)

# 项目名称
project(OpenGL_Lecture)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)

# 包含头文件目录
include_directories(
    ${CMAKE_CURRENT_SOURCE_DIR}/thirdParty/include
    /usr/include
)

# 包含库文件目录
link_directories(
    ${CMAKE_CURRENT_SOURCE_DIR}/thirdParty/lib
    /usr/lib/x86_64-linux-gnu
)

# 设置 CMAKE_PREFIX_PATH 以找到 GLFW
set(CMAKE_PREFIX_PATH "/usr/local/lib/cmake/glfw3")
set(GLFW_DIR "/usr/local/lib/cmake/glfw3")

# 查找 GLFW3 库
find_package(glfw3 REQUIRED CONFIG)

# 添加可执行文件
add_executable(openglStudy "main.cpp" "glad.c")

# 链接库
target_link_libraries(openglStudy glfw)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1922204.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

户用光伏项目开发流程

1、收集业主信息 管理业主基本信息&#xff0c;包括但不限于联系方式、地址、房屋信息等。 2、业主开卡 每户都需要办理银行卡&#xff0c;用于电费结算和划转。 3、合同签约 业主开卡完成之后&#xff0c;平台方发起签约&#xff08;支持线上签约&#xff09;&#xff0c…

运行前端项目提示 run `npm fund` for details,如何解决?

经常出现在前端的一个小坑&#xff0c;分享一下技巧。 运行npm install命令终端提示&#xff1a; 107 packages are looking for funding run npm fund for details 解决方案&#xff1a; npm install --no-fund

实践致知第15享:如何取消文件的格式后缀?

一、背景需求 小姑电话说&#xff1a;我新建了一个excel表格&#xff0c;修改名字的时候总是容易删掉后面的字母&#xff08;如下图所示&#xff09;&#xff0c;然后就打不开这个文件了&#xff01; 二、解决方案 文件后面的字母是文件的扩展名&#xff0c;如果删掉之后&…

基础弱口令暴力破解

一、实验介绍 本实验中我们针对网站中的登录页面进行暴力破解&#xff0c;通过使用 Burpsuite 工具对网页进行暴力破解&#xff0c;体会学习暴力破解的基本过程&#xff0c;以及学习如何使用Burpsuite 工具。 二、实验目的 BurpSuite工具抓包。暴力破解基本流程。 三、实验…

白杨SEO:小红书追百度,知乎已落伍,从APP日活看,搞精准流量去哪与怎么做?

前言&#xff1a;这是白杨SEO公众号原创第540篇。为什么分享这个&#xff1f;看到啸哥在分享国内APP日活&#xff0c;恰好白杨SEO主要就是实战分享搞精准流量&#xff0c;所以希望大家也了解目前在哪些渠道去搞流量更好。如果有用&#xff0c;记得收藏或帮忙分享更多需要的人。…

微信小程序毕业设计-学习资料库系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

粉笔推出国内首个职教行业大模型,助力学员高效学习

7月12日&#xff0c;粉笔正式推出其自主研发的首个专注于职教行业的垂域大模型&#xff0c;并将于8月1日上线粉笔AI老师 “粉笔头”&#xff0c;为学员提供个性化、智能化的辅导服务。 在垂域大模型的基础上&#xff0c;粉笔结合10年来的教研积累、独有数据搭建RAG系统&#x…

乘积末尾的0

区间删除 解题思路&#xff1a; 乘积末尾0的个数取决于2和5的因子的数量。因此我们要对所有的数进行统计2和5的因子个数。接下来使用滑动窗口算法&#xff1a; 构建一个滑动窗口&#xff0c;要求保证删除窗口内的元素后&#xff0c;保证剩余元素的乘积末尾0的个数>k。因此只…

从Centos7升级到Rocky linux 9后,网卡连接显示‘Wired connection 1‘问题解决方法

问题描述 从Centos7升级到Rocky9后, 发现网卡eth0的IP不正确。通过nmcli查看网卡连接&#xff0c;找不到name为eth0的连接&#xff0c;只显示’Wired connection 1’ 查看/etc/NetworkManager/system-connections/&#xff0c;发现找不到网卡配置文件。 原因分析 centos7使…

[web]-代码审计-就这么直接

打开页面就是一个输入框&#xff0c;非sql注入 查看页面源代码&#xff0c;发现有一个hint.php,访问后看到源码&#xff0c;但是有随机种子&#xff0c;根据时间不同随机值是变化的。time()输出时间戳&#xff0c;如果在短时间内访问&#xff0c;就会固定这个种子。 <?php…

stm32——外部中断EXTI

上回书说到定时器的级联&#xff0c;今天来谈谈外部中断EXTI。我使用的是STM32F103C8T6的学习板。仅供大家参考。 什么是中断呢&#xff1f;中断是指计算机在执行程序的过程中&#xff0c;当出现某些异常情况或特殊事件&#xff08;例如外部设备请求、定时时间到达、程序错误等…

流程图怎么做?有三种制作方法

流程图怎么做&#xff1f;在日常生活和工作中&#xff0c;流程图作为一种直观展示步骤、流程或决策路径的工具&#xff0c;扮演着不可或缺的角色。它不仅能够帮助我们理清思路、规划任务&#xff0c;还能促进团队协作与沟通。那么&#xff0c;如何高效地绘制流程图呢&#xff1…

关于web、DNS、firewalld、SELinux综合实验

思路&#xff1a;最好先做DNS&#xff0c;然后再做web服务器 主&#xff1a; 1、写配置文件、/etc/hosts文件等&#xff0c;创建目录&#xff0c;写index.html文件等 [rootlocalhost ~]# cd /etc/httpd/conf.d [rootlocalhost conf.d]# cat vhost.conf <directory /dado…

python自动化之用flask库写一个登陆接口(代码示例)

用到的库&#xff1a; 1、flask&#xff08;写接口&#xff09; 2、cerberus&#xff08;校验数据&#xff09; 实现效果&#xff1a;输入账号和密码&#xff0c;校验数据类型是否是字符串&#xff0c;如果是&#xff0c;返回登陆成功&#xff1b;如果不是&#xff0c;返回数…

泛微E-Cology WorkflowServiceXml SQL注入漏洞复现

0x01 产品简介 泛微e-cology是一款由泛微网络科技开发的协同管理平台,支持人力资源、财务、行政等多功能管理和移动办公。 0x02 漏洞概述 2024年7月,泛微官方发布了新补丁,修复了一处SQL注入漏洞。经分析,攻击者无需认证即可利用该漏洞,建议受影响的客户尽快修复漏洞。…

pnpm9.5.0(catalog协议)

catalog(目录协议) 目录是工作区功能&#xff0c;用于将依赖版本范围定义为可重用常量&#xff0c;目录中定义的常量可以在package.json中使用&#xff0c; 结合 pnpm-workspace.yaml使用 定义pnpm-workspace.yaml packages&#xff1a;定义多仓库 packages:- packages/*cata…

CSS【详解】层叠 z-index (含 z-index 的层叠规则,不同样式的层叠效果)

仅对已定位的元素&#xff08; position:relative&#xff0c;position:absolute&#xff0c;position:fixed &#xff09;有效&#xff0c;默认值为0&#xff0c;可以为负值。 z-index 的层叠规则 z-index 值从小到大层叠 兄弟元素 z-index 值相同时&#xff0c;后面的元素在…

微信小程序毕业设计-高校校园交友系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

react-类组件2

setState 在开发中不能直接通过修改state的值来使界面发生变化&#xff0c;必须通过setState来修改才能使页面发生变化。 使用setState修改时&#xff0c;两次的修改结果会合并&#xff0c;在合并时会比较参数的变化&#xff0c;如果发生变化会覆盖原来的&#xff0c;然后再执…

一文读懂什么是GPU算力平台!

随着高性能计算&#xff08;HPC&#xff09;和人工智能&#xff08;AI&#xff09;技术飞速发展&#xff0c;GPU算力平台作为这些技术的重要支撑&#xff0c;正逐步成为各行各业数字化转型的核心驱动力。尚云sunclouds将带您深入了解GPU算力平台的基本概念、工作原理、优势以及…