FFmpeg4.3系列之52:Android OpenGL实现3D画图及抛骰子案例实战

53 阅读3分钟

FFmpeg4.3系列之52:Android OpenGL实现3D画图及抛骰子案例实战

FFmpeg4.3系列之52:Android OpenGL实现3D画图及抛骰子案例实战

获取ZY↑↑方打开链接↑↑

OpenGL着色器绘制三角形的核心类与方法

在OpenGL中使用着色器绘制一个简单的三角形涉及到几个核心类和方法。为了实现这一点,你需要编写顶点着色器和片段着色器,并通过OpenGL API设置渲染管线。以下是一个基本的流程:

1. 初始化环境

确保你的开发环境中已经正确安装了OpenGL库以及GLFW或SDL等窗口管理库(用于创建窗口和处理输入),还有Glad(用于加载OpenGL函数指针)。

2. 编写着色器代码

顶点着色器 (Vertex Shader)

顶点着色器负责处理每个顶点的位置信息,并将它们转换到裁剪空间中。

glsl深色版本#version 330 corelayout (location = 0) in vec3 aPos; // 顶点位置属性void main(){    gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);}

片段着色器 (Fragment Shader)

片段着色器决定了屏幕上每个像素的颜色。

glsl深色版本#version 330 coreout vec4 FragColor;void main(){    FragColor = vec4(1.0, 0.5, 0.2, 1.0); // 橙色}

3. 创建并编译着色器程序

你需要创建一个着色器对象,附加源代码,编译它,然后链接所有着色器到一个着色器程序对象。

c深色版本// 创建着色器对象unsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER);glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);glCompileShader(vertexShader);// 检查编译错误...// ...// 创建片段着色器并编译...// ...// 创建着色器程序对象并附加着色器unsigned int shaderProgram = glCreateProgram();glAttachShader(shaderProgram, vertexShader);glAttachShader(shaderProgram, fragmentShader);glLinkProgram(shaderProgram);// 删除着色器对象(它们已经被链接到程序中)glDeleteShader(vertexShader);glDeleteShader(fragmentShader);

4. 设置顶点数据和缓冲区

定义三角形的顶点坐标,并将其传递给GPU。

c深色版本float vertices[] = {     0.5f,  0.5f, 0.0f,  // 右上角     0.5f, -0.5f, 0.0f,  // 右下角    -0.5f, -0.5f, 0.0f   // 左下角};unsigned int VBO, VAO;glGenVertexArrays(1, &VAO);glGenBuffers(1, &VBO);// 绑定VAOglBindVertexArray(VAO);// 将顶点数组复制到缓冲区中供OpenGL使用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);// 解绑VAOglBindVertexArray(0);

5. 渲染循环

最后,在主循环中调用glUseProgram激活着色器程序,并通过glDrawArrays绘制几何图形。

c深色版本while (!glfwWindowShouldClose(window)){    // 输入处理...        // 清屏    glClearColor(0.2f, 0.3f, 0.3f, 1.0f);    glClear(GL_COLOR_BUFFER_BIT);    // 使用着色器程序    glUseProgram(shaderProgram);        // 绘制三角形    glBindVertexArray(VAO);    glDrawArrays(GL_TRIANGLES, 0, 3);    // 解绑VAO        // 交换缓冲区并轮询事件    glfwSwapBuffers(window);    glfwPollEvents();}

6. 清理资源

当不再需要时,记得释放分配的资源。

c深色版本glDeleteVertexArrays(1, &VAO);glDeleteBuffers(1, &VBO);glDeleteProgram(shaderProgram);

这段代码展示了如何使用现代OpenGL(版本3.3及以上)来绘制一个简单的三角形。请注意,具体的API调用可能会根据你使用的语言和平台有所不同,但上述步骤提供了一个通用的指导框架。如果你正在使用某种特定的编程语言或者想要了解更高级的功能,请告诉我,我可以提供更加详细的帮助。