常量缓冲区 CBuffer
在HLSL中,常量缓冲区 Constant Buffer(简称 CBuffer) 是一种用于在 CPU 与 GPU 之间高效传输常量数据 的机制,其对常量变量使用进行了优化,其特点是访问延迟更低,CPU 更新更频繁。
分类 "计算机图形学" 下的所有文章
在HLSL中,常量缓冲区 Constant Buffer(简称 CBuffer) 是一种用于在 CPU 与 GPU 之间高效传输常量数据 的机制,其对常量变量使用进行了优化,其特点是访问延迟更低,CPU 更新更频繁。
注意 适用于DirectX10+的语法,旧版参考:[2D 纹理(Built-In)](/posts/2D 纹理(Built-In))
GLFW 的事件机制基于回调函数(Callback Functions) 和事件轮询(Event Polling) 实现,其核心设计围绕“事件驱动”模型。 核心机制 回调函数 Callbacks GLFW 允许用户注册自定义函数(回调函数),当特定事件发生时(如键盘输入、鼠标点击 …
internalformat internalformat指的是函数glTexImage2D的一个参数,它指定的是纹理数据最终存储在GPU显存中所采用的格式。 internalformat 的作用本质: 格式转换:驱动程序根据你提供的 …
齐次裁剪空间 Homogenous Clip Space 在OpenGL等图形API中,顶点在通过顶点着色器(Vertex Shader)处理后,通常会输出一个 vec4 类型的位置变量,称为 gl_Position。这个 gl_Position 就处于 齐次裁剪空间 …
读取图像 在使用纹理前,我们需要将读取对应的图像文件到CPU并对其进行解析。然而OpenGL作为图形API并不提供读取、解析图像文件的功能,因此我们需要自己实现或调用第三方库,这里就以第三方项目stb 的stb_image为例。
在计算机中颜色信息有两个重要参数,一是通道,二是位深。 更多详见:glTexImage2D - OpenGL 4 Reference Pages 通道 指的是用于表示一个像素颜色所需独立数值的数量,决定了数据的存储格式,更多的通道能够表示更丰富的色彩。
MVP,全称是Model-View-Projection,是计算机拿到你的模型之后,把他呈现到你屏幕上进行的变换的必要流程,将局部空间变换到裁剪空间。
Uniform 块 std140 内存布局规则 OpenGL 提供了不同的 layout 策略来定义 Uniform 块的内存布局。最常用的是 std140,其规则如下: 标量类型(float、int、bool):占 4 字节,对齐为 4 字节; vec2:占 8 字节,对齐为 …
Uniform 是在着色器程序运行期间保持不变的全局变量(由CPU设置),用于从应用程序向着色器(Vertex/Fragment等)传递数据。 它是 只读变量(在 shader 中不能修改) 生命周期为 一次绘制调用(Draw Call) 所有顶点/片段共享同一个 uniform …
OBJ 文件是一种简单的文本格式,用于存储 3D 模型信息(顶点、法线、纹理坐标、面连接关系)。 顶点坐标 (Vertex Position) 关键字: v 格式: v x y z [w] x, y, z: 三维坐标(浮点数) w: 可选齐次坐标,默认值 1.0 示例: OBJ …
结构体 声明: GLSL 折叠 复制 struct Vertex { vec3 position; } 点击展开查看更多 使用: GLSL 折叠 复制 void main() { Vertex vtx; vtx.position = vec3(1); } 点击展开查看更多 警告 …
判断一个面的朝向(正面或背面)主要基于顶点缠绕顺序(Winding Order) 的规则。 缠绕顺序(Winding Order) 当定义三角形时,三个顶点的连接顺序决定了面的“缠绕方向”。 默认规则: 逆时针(CCW) 顶点顺序 → 正面(Front Face) 顺时针(CW) …
纹理环绕方式 环绕方式 描述 对应OpenGL选项 重复 重复纹理图像 GL_REPEAT 镜像重复 和重复一样,但每次重复图片是镜像放置的 GL_MIRRORED_REPEAT 边缘钳制 纹理坐标会被约束在0到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["细分验证着色器 …
注意 在HLSL中为ddx、ddy 原理 在光栅化时,GPUs会在同一时刻并行运行很多Fragment Shader,但是并不是一个Pixel一个Pixel去执行的,而是将其组织在2x2的一组Pixels分块中,去并行执行。而偏导数(dFdx、dFdy)就正好是计算的这一块像素 …
为什么要进行Model变换 原始的法线向量是模型空间(局部坐标系)的,当我们需要进行光照计算时,便需要将法线向量转换到世界空间,参与与同为世界空间的光照计算(或者处理光照向量)。
计算机图形学 🔽 平移矩阵 旋转矩阵 缩放矩阵 合并 转置
计算机图形学 ⏫
计算机图形学 🔽
计算机图形学 🔽
计算机图形学 🔽
输入关键词搜索文章内容