一、GLFW、GLAD安裝
1.1 vcpkg安裝相關庫
跨平臺C++包管理利器vcpkg完全指南
# 安裝GLFW
vcpkg install glfw3# 安裝GLAD
vcpkg install glad
1.2 初始測試代碼
#include <glad/glad.h>
#include <GLFW/glfw3.h>
int main() {glfwInit();GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", nullptr, nullptr);glfwMakeContextCurrent(window);gladLoadGL();while (!glfwWindowShouldClose(window)) {glClear(GL_COLOR_BUFFER_BIT);glfwSwapBuffers(window);glfwPollEvents();}return 0;
}
運行出現一個黑色窗口即為成功。
二、第一個三角形
2.1 著色器簡介
著色(Shading)? 是計算機圖形學中通過計算物體表面顏色、光照和材質屬性的過程,其核心作用在于模擬光線與物體交互的視覺效果。在渲染管線中,著色器(Shader)作為可編程模塊,分別控制頂點變換(頂點著色器)和像素著色(片段著色器),實現從基礎顏色填充到復雜光照模型(如漫反射、鏡面高光)、紋理映射以及后期特效的生成,最終賦予3D模型逼真的視覺表現力,是連接幾何數據與屏幕像素的關鍵技術環節。
2.1.1 頂點著色器
#version 460 core // 指定使用GLSL 4.6核心模式
layout (location = 0) in vec3 aPos; // 聲明輸入頂點屬性(三維坐標)
void main()
{gl_Position = vec4(aPos, 1.0); // 坐標轉換為齊次坐標
}
核心功能:
- ?頂點數據處理?(逐頂點執行)
- 接收應用程序傳入的原始頂點數據(三維坐標)
- 通過aPos變量獲取每個頂點的位置信息
- 坐標空間轉換
- 將模型空間的局部坐標轉換為裁剪空間坐標
- 構造四維齊次坐標(w分量設為1.0),滿足投影需求
- 輸出到內置變量gl_Position供后續管線使用
2.1.2 片段著色器
#version 460 core // 聲明使用GLSL 4.6核心模式
out vec4 FragColor; // 定義顏色輸出變量void main()
{// 為每個像素設置固定顏色(RGBA格式)FragColor = vec4(1.0, 0.5, 0.2, 1.0); // 橙色
}
核心功能:
- 接收光柵化階段生成的片段?(Fragment,即潛在的像素候選)
- 對每個片段執行一次著色器代碼(高度并行)
- 通過
FragColor
變量輸出最終顏色(RGBA格式)
2.1.3 著色器創建
代碼:
GLuint createShaderProgram(const char* vertSource, const char* fragSource) {// 編譯兩個著色器GLuint vertexShader = compileShader(GL_VERTEX_SHADER, vertSource);GLuint fragmentShader = compileShader(GL_FRAGMENT_SHADER, fragSource);// 創建程序對象GLuint program = glCreateProgram();glAttachShader(program, vertexShader); // 附加頂點著色器glAttachShader(program, fragmentShader); // 附加片段著色器glLinkProgram(program); // 鏈接程序// 檢查鏈接狀態GLint success;glGetProgramiv(program, GL_LINK_STATUS, &success);if (!success) {char infoLog[512];glGetProgramInfoLog(program, 512, nullptr, infoLog);std::cerr << "Program linking error:\n" << infoLog << std::endl;}// 清理著色器對象glDeleteShader(vertexShader);glDeleteShader(fragmentShader);return program;
}