登录/注册

opengl教程

更多

下面是一个简明扼要的OpenGL入门教程,涵盖核心概念和基本操作流程(基于现代OpenGL 4.0+核心模式):


1. 环境配置

  1. 安装库:

  2. 创建窗口示例(C++):

    
    #include <glad/glad.h>
    #include <GLFW/glfw3.h>

int main() { // 初始化GLFW glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

// 创建窗口
GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", NULL, NULL);
glfwMakeContextCurrent(window);

// 加载GLAD
gladLoadGLLoader((GLADloadproc)glfwGetProcAddress);

// 主循环
while (!glfwWindowShouldClose(window)) {
    // 清屏
    glClearColor(0.1f, 0.2f, 0.3f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    // 交换缓冲
    glfwSwapBuffers(window);
    glfwPollEvents();
}

glfwTerminate();
return 0;

}


---

### **2. 渲染管线核心步骤**
#### **2.1 顶点数据**
定义三角形顶点(NDC坐标系,范围[-1, 1]):
```cpp
float vertices[] = {
    -0.5f, -0.5f, 0.0f,  // 左下
     0.5f, -0.5f, 0.0f,  // 右下
     0.0f,  0.5f, 0.0f   // 顶部
};

2.2 创建缓冲对象

unsigned int VBO, VAO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);

// 绑定VAO
glBindVertexArray(VAO);

// 复制顶点数据到VBO
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

// 设置顶点属性指针
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);

// 解绑
glBindBuffer(GL_ARRAY_BUFFER, 0); 
glBindVertexArray(0);

2.3 编写着色器

顶点着色器 (vertex_shader.glsl):

#version 460 core
layout (location = 0) in vec3 aPos;

void main() {
    gl_Position = vec4(aPos, 1.0);
}

片段着色器 (fragment_shader.glsl):

#version 460 core
out vec4 FragColor;

void main() {
    FragColor = vec4(1.0, 0.5, 0.2, 1.0); // 橙色
}

2.4 编译着色器程序

// 编译函数
unsigned int compileShader(const char* source, GLenum type) {
    unsigned int shader = glCreateShader(type);
    glShaderSource(shader, 1, &source, NULL);
    glCompileShader(shader);
    // 错误检查(省略)
    return shader;
}

// 创建程序
unsigned int shaderProgram = glCreateProgram();
unsigned int vs = compileShader(vertexShaderSource, GL_VERTEX_SHADER);
unsigned int fs = compileShader(fragmentShaderSource, GL_FRAGMENT_SHADER);

glAttachShader(shaderProgram, vs);
glAttachShader(shaderProgram, fs);
glLinkProgram(shaderProgram);

// 删除临时对象
glDeleteShader(vs);
glDeleteShader(fs);

3. 渲染循环

while (!glfwWindowShouldClose(window)) {
    // 清屏
    glClear(GL_COLOR_BUFFER_BIT);

    // 使用着色器程序
    glUseProgram(shaderProgram);

    // 绑定VAO
    glBindVertexArray(VAO);

    // 绘制三角形
    glDrawArrays(GL_TRIANGLES, 0, 3);

    // 交换缓冲
    glfwSwapBuffers(window);
    glfwPollEvents();
}

4. 关键概念解释


5. 下一步学习

  1. 纹理映射glTexImage2D + 纹理坐标
  2. 3D变换:使用GLM进行矩阵运算(模型/视图/投影矩阵)
  3. 深度测试glEnable(GL_DEPTH_TEST)
  4. 光照模型:冯氏光照(环境光+漫反射+镜面反射)
  5. 高级主题
    • 帧缓冲 (Framebuffers)
    • 几何着色器 (Geometry Shaders)
    • 实例化渲染 (Instancing)

学习资源推荐

  1. 官方文档:OpenGL Reference Pages
  2. 中文教程:LearnOpenGL CN
  3. 视频教程:TheCherno的OpenGL系列

提示:调试时使用 glGetError() 检查错误,或使用 RenderDoc 工具分析帧。

Imagination GPU 现支持 OpenGL® 4.6

在API方面,OpenGL 堪称经典。据Khronos Group称,OpenGL 是最广泛采用的 2D 和 3D 图形 API。自 1992 年推出以来,它已被 PC 和工作站的软件开发人员广泛

2023-07-17 09:25:01

OpenGL+ES+2.0+编程指南

电子发烧友网站提供《OpenGL+ES+2.0+编程指南.pdf》资料免费下载

资料下载 jf_41460707 2024-05-07 14:20:42

qt opencv opencl opengl源码例程

qt-opencv-opencl-opengl-源码例程

资料下载 jinyi7016 2022-09-27 14:42:32

OpenGL常用术语解析

OpenGL是一个跨语言、跨平台的编程图形程序接口,它将计算机的资源抽象为一个个的OpenGL的对象,对这些资源的操作抽象为一个个OpenGL的

资料下载 佚名 2021-01-25 08:11:24

OPENGL的简介和编程指南资料免费下载

OpenGL是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来绘制从简单的图形比特到复杂的三维景象。而另一种程序接口系统是仅用

资料下载 佚名 2019-09-16 16:51:00

Qt OpenGL中文使用教程免费下载

最近一段时间除了学习Qt,翻译Qt文档之外,由于工作和兴趣的原因,开始着手看Qt OpenGL编程。在网上搜索了有关OpenGL的教程,发现NeHe的Open

资料下载 佚名 2019-06-19 16:29:03

RK3588这个板子是支持OpenGL的吗

使用processing(一个代码呈现视觉艺术的软件)运行代码,在官网上看到3588这个板子是支持OpenGL的,但是只要代码里与P2D/P3D有关,运行后出现了这样的问题,是否是Ubuntu系统里

2022-10-12 16:13:00

OpenGL常用的术语有哪些?

OpenGL常用术语解析

2021-03-18 06:57:35

OpenGL的常用术语解析

OpenGL是一个跨语言、跨平台的编程图形程序接口,它将计算机的资源抽象为一个个的OpenGL的对象,对这些资源的操作抽象为一个个OpenGL的

2021-01-20 23:52:57

Windows和DirectX 12设备都将会支持OpenCL和OpenGL

由于并非所有 Windows 设备都对 OpenCL 和 OpenGL 硬件加速技术提供良好的支持,因此游戏开发者经常会发现他们很难在 Windows 上实现对 OpenGL 游戏的支持。

2020-03-25 14:53:57

7天热门专题 换一换
相关标签