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);
}

  

 

posted @ 2025-04-01 20:58  巨兽~墨菲特  阅读(15)  评论(0)    收藏  举报