前言: 目的是为了学习计算机图形学这本书,在一个2维的平面上活灵活现的显示一个3维物体是很酷的一件事,打算先从啃下这本书作为开始。
正文
之前是准备使用vscode搭建的,但是阅读了一些教程后感觉太繁琐了,我的核心目标是学习计算机图形学,理解3D变换的算法,所以选了用Visual Studio搭建,过程很简单,只需要安装两个包即可。
硬件环境:x86平台 win11
开发环境:Visual Studio 2022
第一步 安装visual studio,记得要选上C++平台桌面开发这选项,如果已经安装了vs,但是没有安装c++桌面平台,这个也无妨,重新下载安装器,可以选择增加模块。
第二步,创建C++空项目,只有安装了上图的使用c++的桌面开发才能创建C++空项目。
第三步,安装插件,这两个插件安装后就不用自己去安装GLFW和GLAD了。
第四步,创建一个cpp文件,《计算机图形学》的整本书上的代码示例都是代码片段,说白了就是一个cpp文件里既有函数体,又有main函数就搞定了,如果仅仅是为了学习,那么单文件足矣。如果您未来的工作是面向显卡编程,那么我想你们公司肯定有自己的工程化规范,so,在这个博客我们不考虑工程化问题,只要求能实现本书提供的代码片段能被我们复现即可。
此处敲了一段《计算机图形学》第33页的代码
// 包含GLUT头文件(自动包含GL/gl.h和GL/glu.h)
#include <GL/glut.h>
// 初始化OpenGL参数
void init(void) {
glClearColor(1.0, 1.0, 1.0, 0.0); // 设置背景清除颜色为白色(RGBA,A=0表示不透明)
glMatrixMode(GL_PROJECTION); // 切换至投影矩阵模式
gluOrtho2D(0.0, 200.0, 0.0, 150.0); // 定义二维正交投影坐标系(左下角x=0,y=0,右上角x=200,y=150)
}
// 绘制线段的回调函数
void lineSegment(void) {
glClear(GL_COLOR_BUFFER_BIT); // 用预设的白色清空颜色缓冲区
glColor3f(0.0, 0.4, 0.2); // 设置当前绘制颜色为深绿色(RGB分量:0.0,0.4,0.2)
glBegin(GL_LINES); // 开始绘制线段图元
glVertex2i(180, 15); // 线段起点坐标(x=180,y=15)
glVertex2i(10, 145); // 线段终点坐标(x=10,y=145)
glEnd(); // 结束绘制
glFlush(); // 强制刷新缓冲区,立即显示绘制结果(适用于单缓冲模式)
}
// 主函数
void main(int argc, char** argv) {
glutInit(&argc, argv); // 初始化GLUT库
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // 设置显示模式:单缓冲 + RGB颜色模型
glutInitWindowPosition(50, 100); // 设置窗口左上角屏幕坐标(x=50,y=100)
glutInitWindowSize(400, 300); // 设置窗口尺寸(宽度400像素,高度300像素)
glutCreateWindow("An Example OpenGL Program"); // 创建标题为指定名称的窗口
init(); // 调用自定义初始化函数
glutDisplayFunc(lineSegment); // 注册显示回调函数(窗口需要刷新时自动调用)
glutMainLoop(); // 进入GLUT事件处理循环(保持窗口持续运行)
}
}