上篇文章主要记录了如何在Macbook M系列上进行openGL开发的环境搭建。本篇内容呢,则是关于openGL的第一个项目,hello world的实战。
引入头文件
开始的第一步,需要include必要的头文件,这里主要用到的是glew以及glfw3,还有一个就是关于输入输出的库iostream
#include <glew.h> // 用 GLEW 替代 glad
#include <glfw3.h>
#include <iostream>
设置版本信息
由于笔者使用的的openGL的版本是3.3的,所以我需要对版本信息进行初始化
初试化了major、minor等版本
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// if is macOS
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
此外由于咱们用的是macOS系统,所以还需要加上 glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
这一句
创建窗口以及上下文
// create windows
GLFWwindow *window = glfwCreateWindow(800, 600, "LearnOpenGL", nullptr, nullptr);
if (window == nullptr) {
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
// 设置上下文
glfwMakeContextCurrent(window);
渲染循环
// 渲染循环
while (!glfwWindowShouldClose(window)) {
// 输入处理
glfwPollEvents();
// 渲染:清除颜色缓冲区并设置颜色
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// 交换缓冲区,将窗口显示到窗口
glfwSwapBuffers(window);
} // while
这里需要使用glClearColor对窗口颜色进行设置
glClearColor的入参情况如下:
glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
使用 glClear(GL_COLOR_BUFFER_BIT);对图像进行清理
glfwSwapBuffers(window);将渲染展示出来
完整代码
//
// Created by zixhu on 2025/1/16.
//
#ifndef OPENGL_STUDY01_H
#define OPENGL_STUDY01_H
#include <glew.h> // 用 GLEW 替代 glad
#include <glfw3.h>
#include <iostream>
int study01() {
// init info glfw version
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// if is macOS
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
// create windows
GLFWwindow *window = glfwCreateWindow(800, 600, "LearnOpenGL", nullptr, nullptr);
if (window == nullptr) {
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
// 设置上下文
glfwMakeContextCurrent(window);
// 渲染循环
while (!glfwWindowShouldClose(window)) {
// 输入处理
glfwPollEvents();
// 渲染:清除颜色缓冲区并设置颜色
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// 交换缓冲区,将窗口显示到窗口
glfwSwapBuffers(window);
} // while
return 0;
}
#endif //OPENGL_STUDY01_H
最终的效果如下所示:
由于笔者也是openGL的初学者,所以在一些问题的描述上难免有些不准确的点,还希望多多包涵!!!