事件机制
GLFW 的事件机制基于回调函数(Callback Functions) 和事件轮询(Event Polling) 实现,其核心设计围绕“事件驱动”模型。 核心机制 回调函数 Callbacks GLFW 允许用户注册自定义函数(回调函数),当特定事件发生时(如键盘输入、鼠标点击 …
标签 "OpenGL" 下的所有文章
GLFW 的事件机制基于回调函数(Callback Functions) 和事件轮询(Event Polling) 实现,其核心设计围绕“事件驱动”模型。 核心机制 回调函数 Callbacks GLFW 允许用户注册自定义函数(回调函数),当特定事件发生时(如键盘输入、鼠标点击 …
internalformat internalformat指的是函数glTexImage2D的一个参数,它指定的是纹理数据最终存储在GPU显存中所采用的格式。 internalformat 的作用本质: 格式转换:驱动程序根据你提供的 …
读取图像 在使用纹理前,我们需要将读取对应的图像文件到CPU并对其进行解析。然而OpenGL作为图形API并不提供读取、解析图像文件的功能,因此我们需要自己实现或调用第三方库,这里就以第三方项目stb 的stb_image为例。
Uniform 块 std140 内存布局规则 OpenGL 提供了不同的 layout 策略来定义 Uniform 块的内存布局。最常用的是 std140,其规则如下: 标量类型(float、int、bool):占 4 字节,对齐为 4 字节; vec2:占 8 字节,对齐为 …
Uniform 是在着色器程序运行期间保持不变的全局变量(由CPU设置),用于从应用程序向着色器(Vertex/Fragment等)传递数据。 它是 只读变量(在 shader 中不能修改) 生命周期为 一次绘制调用(Draw Call) 所有顶点/片段共享同一个 uniform …
结构体 声明: GLSL 折叠 复制 struct Vertex { vec3 position; } 点击展开查看更多 使用: GLSL 折叠 复制 void main() { Vertex vtx; vtx.position = vec3(1); } 点击展开查看更多 警告 …
假如你有一个有许多模型的场景,而这些模型的顶点数据都一样,只是进行了不同的世界空间的变换、顶点属性等,多次绘制之后,很快将达到一个瓶颈,这是因为你glDrawArrays或glDrawElements这样的函数(Draw call)过多。 如果我们能够将数据一次发送给GPU,然 …
执行渲染 执行渲染所需: 完整的ShaderProgram VAO C 折叠 复制 glUseProgram(ShaderProgramID); // 使用着色器 glBindVertexArray(VAO); // 绑定VAO /* --- 绘制函数 --- */ // 法一: …
在执行渲染之前,需要将各种顶点相关的数据传递到顶点着色器中,如位置、法线、UV等 顶点数据传递流程 flowchart TB subgraph EBO["EBO"] e1["glGenBuffers"] --> …
编译 C 折叠 复制 // 创建着色器对象 GLuint id = glCreateShader(GL_VERTEX_SHADER); // 传入着色器源码 glShaderSource(id, 1, &source_chars, NULL); // 编译着色器 …
GLAD 是一个开源的OpenGL 加载库(OpenGL Loader Library),它的主要作用是帮助开发者在不同的平台和环境下,动态加载 OpenGL 的函数指针,从而实现对 OpenGL 高级特性的访问。
GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入,这正是我们需要的。
渲染流程 [GLFW 最小系统](/posts/GLFW 最小系统) [GLAD 引入](/posts/GLAD 引入) 着色器基础 着色器程序编译与链接 顶点数据传递 执行渲染 Uniform数据传递 [Uniform块 和 UBO](/posts/Uniform块 和 …
着色器管线 flowchart LR c1["CPU"] --> s1["顶点着色器"] subgraph x["细分着色器"] s2["细分控制着色器"] --> s3["细分验证着色器 …
输入关键词搜索文章内容