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

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

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

code review!

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)

相关推荐

  1. OpenGL 着色器程序的保存和(二进制)

    2024-07-13 05:46:03       59 阅读
  2. [OpenGL教程05 ] glAccum() 函数对累积缓存设置

    2024-07-13 05:46:03       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 05:46:03       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 05:46:03       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 05:46:03       62 阅读
  4. Python语言-面向对象

    2024-07-13 05:46:03       72 阅读

热门阅读

  1. 数学基础 -- 三角学

    2024-07-13 05:46:03       29 阅读
  2. 07-7.5.2 散列函数的构造

    2024-07-13 05:46:03       30 阅读
  3. React vs Vue:谁是前端界的冠军?

    2024-07-13 05:46:03       26 阅读
  4. [NeetCode 150] Longest Consecutive Sequence

    2024-07-13 05:46:03       23 阅读
  5. sqlserver设置端口

    2024-07-13 05:46:03       24 阅读
  6. C++:using重新定义继承时访问权限

    2024-07-13 05:46:03       31 阅读
  7. git列出提交记录的文件路径

    2024-07-13 05:46:03       25 阅读
  8. 关于对于短视频的认识-复盘与再次复盘

    2024-07-13 05:46:03       26 阅读
  9. sqlalchemy反射视图

    2024-07-13 05:46:03       23 阅读
  10. vue 组件里面的方法修改外面的数据

    2024-07-13 05:46:03       26 阅读
  11. 使用Trie树高亮关键词

    2024-07-13 05:46:03       26 阅读
  12. qt 的布局

    2024-07-13 05:46:03       29 阅读
  13. 《每天十分钟》-红宝书第4版-函数

    2024-07-13 05:46:03       25 阅读
  14. 【Scrapy】Scrapy 中间件等级设置规则

    2024-07-13 05:46:03       25 阅读
  15. 智能运维提升企业长期安全防御能力

    2024-07-13 05:46:03       24 阅读