OpenGL初识01

powershell 复制代码
# CMakeList.txt: 顶层 CMake 项目文件,在此处执行全局配置
# 并包含子项目。
#
cmake_minimum_required (VERSION 3.8)

project ("OpenGLPrj")

# 包含子项目。

# 链接OpenGL库
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lOpenGL32")
# 链接GLEW库
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lglew32")
# 链接GLFW库
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lglfw3")
# 链接 spdlog
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lspdlog")

find_package(OpenGL REQUIRED)
if(OpenGL_FOUND)
    include_directories(
        "3rd_party/glew2.1.0/include"
        "3rd_party/glfw3.8/include"
        "3rd_party/glad/include"
        "3rd_party/spdlog/include"
        "3rd_party/glm")
    link_directories(
        "3rd_party/glew2.1.0/lib"
        "3rd_party/glfw3.8/lib"
        "3rd_party/spdlog/lib")
    set(HAVE_OpenGL)
    message(STATUS "Configure package with OpenGL!")
else()
    set(HAVE_OpenGL False)
    message(STATUS "Configure package without OpenGL!")
endif()

add_subdirectory ("OpenGLPrj")
powershell 复制代码
cmake_minimum_required (VERSION 3.8)

# 将源代码添加到此项目的可执行文件。

add_executable (main main.cpp glad.c)
target_link_libraries(main PRIVATE opengl32 /*glew32*/ glfw3)
cpp 复制代码
// OPENGL 基本库
#include <glad/glad.h>
#include <GLFW/glfw3.h>

// 报告错误使用
#include <iostream>

// 窗口回调函数,每当敞口大小属性修改时该函数被回调,参数为该窗口的新大小
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
// 事件检查函数
void processInput(GLFWwindow* window);

int main()
{
	glfwInit();		//初始化 glfw 窗口
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);		// 指定 OpenGL 主版本号
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);		// 指定 OpenGL 子版本号
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // 设置使用 OpenGL 的核心模式(可编程渲染管道)
	// 创建窗口 width, height, winName, 窗口附加, 窗口依赖
	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))
	{
		std::cout << "Failed to initialize GLAD!" << std::endl;		// 报错信息
		return -1;
	}

	// 注册窗口回调函数
	glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

	// 渲染循环
	while (!glfwWindowShouldClose(window))
	{
		// 检测是否需要退出窗口
		processInput(window);

		// 渲染指令

		// 设置清除颜色 -- 状态设置
		glClearColor(0.2f, 0.3f, 0.4f, 1.0f);
		// 开始清空屏幕并且使用上面的颜色
		glClear(GL_COLOR_BUFFER_BIT);

		// 交换颜色缓冲区
		glfwSwapBuffers(window);

		// 检查是否触法相关事件
		glfwPollEvents();
	}
	// 删除/释放资源
	glfwTerminate();
	return 0;
}

// 窗口大小变换监听
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);

}

GLFW 和 GLAD 库,分别使用 glfwInit()gladLoadGLLoader((GLADloadproc)glfwGetProcAddress) 初始化

相关推荐
June`几秒前
高并发网络框架:Reactor模式深度解析
linux·服务器·c++
小镇敲码人11 分钟前
剖析CANN框架中Samples仓库:从示例到实战的AI开发指南
c++·人工智能·python·华为·acl·cann
萧鼎12 分钟前
Python 包管理的“超音速”革命:全面上手 uv 工具链
开发语言·python·uv
Anastasiozzzz41 分钟前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
刘琦沛在进步44 分钟前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
机器视觉的发动机1 小时前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
HyperAI超神经1 小时前
在线教程|DeepSeek-OCR 2公式/表格解析同步改善,以低视觉token成本实现近4%的性能跃迁
开发语言·人工智能·深度学习·神经网络·机器学习·ocr·创业创新
R_.L1 小时前
【QT】常用控件(按钮类控件、显示类控件、输入类控件、多元素控件、容器类控件、布局管理器)
开发语言·qt
Zach_yuan1 小时前
自定义协议:实现网络计算器
linux·服务器·开发语言·网络
我在人间贩卖青春1 小时前
C++之this指针
c++·this