day01_helloWorld
开发环境 ubuntu
https://learnopengl-cn.github.io/01%20Getting%20started/03%20Hello%20Window/
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
# Set some basic project attributes
project(01-helloOpenGl
VERSION 0.1
DESCRIPTION "A Hello World Project")
# Find GLFW (modern CMake approach)
find_package(glfw3 REQUIRED)
# Find OpenGL (required for GLFW to work properly)
find_package(OpenGL REQUIRED)
# --- Add GLAD source file ---
# (Assuming glad.c is in your project directory)
add_library(glad STATIC glad.c) # or glad.cpp
# This project will output an executable file
add_executable(${PROJECT_NAME} 01-helloOpenGl.cpp)
# Create a simple configuration header
configure_file(config.h.in config.h)
# Link GLFW and OpenGL to your executable
# NOTE: The target name is glfw, not glfw3
# --- Link everything together ---
target_link_libraries(${PROJECT_NAME}
glfw # GLFW
OpenGL::GL # OpenGL
glad # GLAD (must be linked explicitly)
)
# --- Include directories ---
target_include_directories(${PROJECT_NAME} PRIVATE
${PROJECT_BINARY_DIR} # For config.h (if needed)
${PROJECT_SOURCE_DIR} # For glad.h (if it's in the project folder)
)
main.cpp
#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(int argc, char **argv) {
glfwInit();
// 设置主要版本为3 次要版本也是3 初始化模式是核心模式
/*
* 我们在main函数中调用glfwInit函数来初始化GLFW,
* 然后我们可以使用glfwWindowHint函数来配置GLFW
* glfwWindowHint函数的第一个参数代表选项的名称,我们可以从很多以GLFW_开头的枚举值中选择
* 第二个参数接受一个整型,用来设置这个选项的值。
* */
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// 如果使用的是Mac OS X系统,你还需要加下面这行代码到你的初始化代码中这些配置才能起作用(将上面的代码解除注释):
//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
/*
*
* glfwCreateWindow函数需要窗口的宽和高作为它的前两个参数。第三个参数表示这个窗口的名称(标题),这里我们使用"LearnOpenGL",
* 当然你也可以使用你喜欢的名称。最后两个参数我们暂时忽略。这个函数将会返回一个GLFWwindow对象,我们会在其它的GLFW操作中使用到。
* 创建完窗口我们就可以通知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是用来管理OpenGL的函数指针的,所以在调用任何OpenGL的函数之前我们需要初始化GLAD。
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
glViewport(0, 0, 800, 600);
// 需要注册这个函数,告诉GLFW我们希望每当窗口调整大小的时候调用这个函数:
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
/*
*
* glfwWindowShouldClose函数在我们每次循环的开始前检查一次GLFW是否被要求退出,如果是的话,该函数返回true,渲染循环将停止运行,之后我们就可以关闭应用程序。
* lfwPollEvents函数检查有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)
* glfwSwapBuffers函数会交换颜色缓冲(它是一个储存着GLFW窗口每一个像素颜色值的大缓冲),它在这一迭代中被用来绘制,并且将会作为输出显示在屏幕上
* */
while(!glfwWindowShouldClose(window))
{
// 输入
processInput(window);
// 渲染指令
/*
* 意,除了glClear之外,我们还调用了glClearColor来设置清空屏幕所用的颜色。当调用glClear函数,清除颜色缓冲之后,
* 整个颜色缓冲都会被填充为glClearColor里所设置的颜色。在这里,我们将屏幕设置为了类似黑板的深蓝绿色。
* OpenGL 这节教程的内容,glClearColor函数是一个状态设置函数,而glClear函数则是一个状态使用的函数,它使用了当前的状态来获取应该清除为的颜色。
* */
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
//在每个新的渲染迭代开始的时候我们总是希望清屏,否则我们仍能看见上一次迭代的渲染结果(这可能是你想要的效果,但通常这不是)。
//我们可以通过调用glClear函数来清空屏幕的颜色缓冲,它接受一个缓冲位(Buffer Bit)来指定要清空的缓冲,可能的缓冲位有GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT和GL_STENCIL_BUFFER_BIT
glClear(GL_COLOR_BUFFER_BIT); //
//检查并调用事件,交换缓冲
glfwSwapBuffers(window); //函数会交换颜色缓冲(它是一个储存着GLFW窗口每一个像素颜色值的大缓冲),它在这一迭代中被用来绘制,并且将会作为输出显示在屏幕上
glfwPollEvents(); //函数检查有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)
}
// 理所有的资源并正确地退出应用程序
glfwTerminate();
// std::cout << "Hello World" << std::endl;
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);
}

浙公网安备 33010602011771号