阅读《计算机图形学编程(使用OpenGL和C++)》 - 清屏
本书介绍如何在C++中使用OpenGL(Open Graphics Library开放图像库)进行3D图形编程
Windows操作系统使用开发工具和库:
Visual Studio 2015
窗口管理 GLFW
扩展库 GLEW
数学库 GLM
纹理管理 SOIL2
硬件方面:GLSL(OpenGL着色语言)进行部分编程,写着色器代码,需要显卡GPU
软件方面:OpenGL的API是C语言编写,直接兼容C和C++。C++/OpenGL应用程序的一个重要任务是将GLSL代码安装到GPU上。C++/OpenGL应用发送图形数据到顶点着色器,随着管线处理(顶点着色器、曲面细分着色器、几何着色器、光栅化、片段着色器、像素操作),最终生成在显示器上显示的像素点。
GLFW库让我们可以在GLFWwindow类上进行3D场景绘制。我们先尝试创建一个GLFWwindow实例并为其设置背景色。
操作流程:
1、 初始化GLFW库
2、 实例化GLFWwindow
3、 初始化GLEW库
4、 调用一次init()函数(每个应用程序的初始化任务都放init()中)
5、 重复调用display()函数(绘制GLFWwindow的代码都放在display()中)
其中,glClearColor()命令指定了清除背景时用的颜色值——这里(1,0,0,1)代表RGB值中的红色,末尾的1表示不透明度。使用OpenGL调用glClear(GL_COLOR_BUFFER_BIT),实际使用红色对颜色缓冲区进行填充。
代码如下
main.cpp
#include <GL/glew.h> #include <GLFW/glfw3.h> #include <iostream> using namespace std; void init(GLFWwindow* window){} void display(GLFWwindow* window, double currentTime) { glClearColor(1.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); } int main(void) { GLFWwindow* window; /* Initialize the library */ if (!glfwInit()) return -1; /* Create a windowed mode window and its OpenGL context */ window = glfwCreateWindow(400, 300, "Hello World", NULL, NULL); //没用到的参数分别用来允许全屏显示以及资源共享 if (!window) { glfwTerminate(); return -1; } /* Make the window's context current */ glfwMakeContextCurrent(window); GLenum err = glewInit(); if (err != GLEW_OK) { std::cout << "Error: " << glewGetErrorString(err) << std::endl; } glfwSwapInterval(1); // 交互缓冲区间隔设为1,即每帧更新一次,交换间隔表示交换缓冲区之前等待的帧数,通常称为Vsync垂直同步 init(window); /* Loop until the user closes the window */ while (!glfwWindowShouldClose(window)) { display(window, glfwGetTime()); // glfwGetTime()返回GLFW初始化之后经过的时间 /* Swap front and back buffers */ glfwSwapBuffers(window); // GLFW默认使用两个缓冲区 /* Poll for and process events */ glfwPollEvents(); // 处理窗口相关事件(如按键事件) } glfwDestroyWindow(window); glfwTerminate(); return 0; }
上图的框架是在下载GLFW库时官网展示的示例代码及加入一些书本内容。
OpenGL有很多预定义的常量,其中很多是枚举常量。
执行结果:
解决方案使用的是 debug x86
依赖库下载的是
glew-2.1.0
glfw-3.3.6.bin.WIN32
glm-0.9.9.8
SOIL2-master
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构