OpenGL 中的 VAO 与 VBO:顶点数据布局与属性配置
概述 在 OpenGL 的渲染管线中,数据从 CPU 到 GPU 的传输与解析是图形绘制的起点。这一过程中有两个核心对象: VBO(Vertex Buffer Object):GPU 显存中存储顶点数据的容器 VAO(Vertex Array Object):描述如何从 VBO 中读取数据的规则集合 理解它们各自的职责和协作方式,是掌握 OpenGL 渲染流程的第一步。 ...
概述 在 OpenGL 的渲染管线中,数据从 CPU 到 GPU 的传输与解析是图形绘制的起点。这一过程中有两个核心对象: VBO(Vertex Buffer Object):GPU 显存中存储顶点数据的容器 VAO(Vertex Array Object):描述如何从 VBO 中读取数据的规则集合 理解它们各自的职责和协作方式,是掌握 OpenGL 渲染流程的第一步。 ...
三年前我写过一篇Linux从零搭建Minecraft服务器,当时用的是原版服务端,手动启停、手动备份、升级靠祈祷。三年下来,服务器从原版换成了 Fabric 模组服,Mod 数量从 0 涨到了 40+,玩家从我一个人变成了一群朋友。手动运维早就撑不住了。 于是我写了一套 Bash 工具集来管理整个服务器生命周期:Fabric Server Manager。 服务器现状 ...
最近给博客加了一个「光影集」相册页面, 照片存储在 Cloudflare R2 上, 每次推送代码时 GitHub Actions 会自动从 R2 拉取图片列表并生成相册数据, 整个流程无需手动维护. 这篇文章记录一下完整的配置过程. 为什么选择 Cloudflare R2 博客托管在 GitHub Pages 上, 如果把大量照片直接放进仓库, 会导致仓库体积膨胀, clone 和构建...
在工作过程中, 由于遇到了在C++与C语言混用的场景中, 使用longjmp进行跳转时, 出现栈溢出的问题. 因此, 对函数栈的工作原理和longjmp的原理和实现进行了学习. 本文只记录函数栈的工作原理, longjmp的原理和实现将在后续文章中记录. 函数栈的工作原理 函数栈是一个后进先出(LIFO)的数据结构, 用于存储函数调用过程中的局部变量和函数返回地址. 当一个函数被调用时,...
本笔记源自学习唐老师 Unity程序基础框架(重置版)时的总结. 单例模式 单例模式是一种设计模式, 确保一个类在应用程序中只有一个实例, 并提供全局访问点. 特点: 唯一实例: 确保某些全局管理类只有一个实例存在, 避免资源冲突. 方便访问: 提供全局访问点, 其他地方可以方便地访问它. 节省资源: 避免重复创建和销毁同一类实例. 单例模式基类 通过定义一个单例基...
本次作业要求实现一个简单的光栅化渲染器, 实现法向量、颜色、纹理颜色的插值, 实现 Blinn-Phong 模型, 实现高度图以及置换映射 我的所有GAMES101作业的仓库地址: GAMES101-Assignments 投影矩阵修改 之前的投影矩阵感觉有点问题, 这里重新实现一下 修改main.cpp中的get_projection_matrix()函数, 实现投影矩阵的...
纹理不但可以用来表示物体的颜色, 还可以用来记录很多信息. 环境光照 将任何一个方向来源的光照都记录下来, 保存在一个贴图中, 这个贴图就是环境光照贴图. 环境光也可以记录在一个球面上, 这个球面就是环境光照球(Spherical Environment Map) 环境光球展开后可以得到如下的图象: 展开后, 我们可以看到, 在上下边缘部分, 会有较大的扭曲, 为了解决...
重心坐标插值 在之前的课程中, 提到了逐顶点着色和逐像素着色, 其中逐顶点着色是在顶点上计算颜色, 然后在三角形内部的像素上对颜色进行插值, 逐像素着色是在每个像素上计算颜色, 但是每个像素的法线也是通过插值得到的. 插值的原因, 内容和方法 重心坐标的计算是为了在三角形内部的像素上进行插值 插值的原因: 根据三角形顶点的属性, 可以通过插值得到三角形内部所有点的属性 插值...
着色频率 把颜色应用在一个面上, 应用在一个顶点上, 或者应用在一个像素上, 这些都是着色的频率. 通常来说, 着色的频率越高, 渲染的效果就越好, 但是性能也就越差. 其中: 如果在顶点上着色(例如图中在矩形的四个顶点上着色), 那么在矩形内部的像素就会使用顶点的颜色进行插值. 逐三角形着色 又叫 平面着色 Flat Shading 一个三角面内的颜色完全相同, 根据三角形的...
实现一个三角形栅格化算法, 能够在屏幕上绘制实心三角形, 并正确处理深度缓冲, 最终实现输出预期的图像. 我的所有GAMES101作业的仓库地址: GAMES101-Assignments 判别点是否在三角形内 常用的方法: 计算顶点与三角形的顶点连线向量与三角形的边的叉乘, 如果三个叉乘的方向都一致, 则该点在三角形内. static bool insideTriangle(int...