自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 LearnOpenGL——PBR(三)漫反射辐照度

本文介绍了基于图像的光照(IBL)技术及其在PBR渲染中的应用。IBL将环境立方体贴图视为光源,通过预计算辐照度图实现全局光照效果。文章详细阐述了反射方程的分解处理,重点讲解了漫反射积分的预计算方法。同时强调了HDR对PBR的重要性,介绍了辐射度HDR文件格式和使用stb_image.h加载HDR图像的方法。最后说明了将等距柱状投影图转换为立方体贴图的过程,以提高渲染性能。这些技术共同实现了更真实的物理渲染效果。

2026-02-21 17:39:37 636

原创 LearnOpenGL——PBR(二)光照

本文介绍了如何将PBR理论转化为实际渲染器实现,重点讲解了直接光源(如点光源、定向灯等)的辐射计算。文章首先回顾了辐射率、辐照度等基础概念,解释了如何将点光源的辐射通量转化为辐射强度,并考虑距离衰减和入射角的影响。通过代码示例展示了辐射率的计算过程,指出这与传统漫反射光照计算类似。接着详细介绍了PBR表面模型的实现,包括菲涅尔方程、法线分布函数和几何遮蔽函数的计算,最终将这些要素整合到Cook-Torrance BRDF中。文章强调了对不同光源类型(点光源、定向光、聚光灯)需要采用不同的辐射强度计算方式,并

2026-02-21 17:09:56 589

原创 LearnOpenGL——PBR(一)理论

PBR,或者用更通俗一些的称呼是指基于物理的渲染(Physically Based Rendering),它指的是一些在不同程度上都基于与现实世界的物理原理更相符的基本理论所构成的渲染技术的集合。正因为基于物理的渲染目的便是为了使用一种更符合物理学规律的方式来模拟光线,因此这种渲染方式与我们原来的Phong或者Blinn-Phong光照算法相比总体上看起来要更真实一些。

2026-02-20 22:04:30 598

原创 LearnOpenGL——高级光照(十)SSAO

我们已经在前面的基础教程中简单介绍到了这部分内容:环境光照(Ambient Lighting)。环境光照是我们加入场景总体光照中的一个固定光照常量,它被用来模拟光的散射(Scattering)。在现实中,光线会以任意方向散射,它的强度是会一直改变的,所以间接被照到的那部分场景也应该有变化的强度,而不是一成不变的环境光。其中一种间接光照的模拟叫做环境光遮蔽(Ambient Occlusion),它的原理是通过将褶皱、孔洞和非常靠近的墙面变暗的方法近似模拟出间接光照。

2026-02-20 21:39:39 604

原创 LearnOpenGL——高级光照(九)延迟着色法

本文介绍了两种3D渲染技术:正向渲染和延迟渲染。正向渲染直接逐个物体计算光照,简单但性能开销大。延迟渲染将渲染分为两个阶段:几何处理阶段将场景信息存入G缓冲(包括位置、法线、颜色等纹理),光照处理阶段再基于G缓冲数据计算光照。这种方法能高效处理大量光源,但存在显存占用高、不支持混色和MSAA等缺点。文章详细讲解了G缓冲的创建和使用方法,通过多渲染目标技术实现高效数据存储,为大规模场景光照渲染提供了优化方案。

2026-02-19 10:53:51 589

原创 LearnOpenGL——高级光照(八)泛光

本文介绍了在渲染场景中实现泛光(Bloom)效果的技术方法。泛光通过为明亮区域添加光晕效果,增强光照表现力,使明亮物体在显示器上看起来更真实。实现过程分为三个主要步骤:首先通过多渲染目标技术提取场景中的高亮区域;然后对提取的亮区进行高效的高斯模糊处理(采用水平+垂直的两步模糊法);最后将模糊后的光晕效果叠加到原始场景上。文章还澄清了HDR与泛光的区别,指出两者是互补而非替代的关系。通过合理的模糊参数设置,泛光能显著提升场景视觉效果,而不会过度消耗性能。

2026-02-19 10:48:53 608

原创 LearnOpenGL——高级光照(七)HDR

HDR(高动态范围)渲染技术通过使用浮点帧缓冲存储超出[0.0,1.0]范围的颜色值,解决了传统LDR渲染中高亮区域细节丢失的问题。当多个亮光源导致颜色值超过1.0时,HDR允许保留完整的亮度信息,再通过色调映射将其转换为显示器可显示的LDR范围。文章介绍了两种色调映射算法:Reinhard算法均匀分布亮度值,而曝光算法通过调整曝光参数控制明暗区域表现。实现上,需创建GL_RGB16F等格式的浮点帧缓冲,在渲染管线后期应用色调映射和Gamma校正。这项技术能更真实地表现光照强度差异(如太阳与闪光灯),为场景

2026-02-18 13:25:45 619

原创 LearnOpenGL——高级光照(五)法线贴图

法线贴图技术通过在纹理中存储法线向量信息,为平坦表面添加微观细节。传统纹理无法表现真实物体表面的凹凸特征,而法线贴图通过为每个片段提供独立法线,使光照系统能够模拟复杂表面结构。文章详细介绍了法线贴图的实现原理,包括法线向量在纹理中的存储方式(从[-1,1]映射到[0,1]范围),以及切线空间的概念。为了解决不同表面朝向问题,提出了使用TBN矩阵(由切线、副切线和法线向量构成)将法线从切线空间转换到世界空间的方法。通过数学推导展示了如何计算切线和副切线向量,最终实现真实感更强的表面细节渲染效果。

2026-02-17 20:10:00 605

原创 LearnOpenGL——高级光照(四)点光源阴影

本文介绍了点光源阴影的实现技术——万向阴影贴图。相比传统的定向阴影映射,该方法使用立方体贴图存储六个方向的深度信息,从而支持点光源的全方位阴影计算。关键技术包括:1)通过几何着色器一次性渲染六个面;2)创建90度视角的光空间变换矩阵;3)使用立方体贴图采样深度值进行阴影判断。实现过程分为深度贴图生成和正常渲染两个阶段,其中深度贴图阶段利用透视投影和六组视图矩阵将场景渲染到立方体贴图的各个面。这种方法在保持阴影质量的同时,显著提升了点光源阴影的渲染效率。

2026-02-17 19:09:58 590

原创 LearnOpenGL——高级光照(三)阴影映射

阴影映射技术通过从光源视角生成深度贴图来实现真实感阴影效果。首先创建帧缓冲对象和深度纹理,以光源为视角渲染场景获得深度值。然后使用正交投影矩阵和视图矩阵构建光空间变换矩阵,将场景坐标转换到光源视角。在渲染阶段,先以光源视角生成深度贴图,再正常渲染场景时通过比较片段深度与深度贴图值判断是否处于阴影中。这种方法虽非完美,但性能较好,是实时渲染中常用的阴影实现方案。

2026-02-16 11:08:27 684

原创 LearnOpenGL——高级光照(二)Gamma校正

显示器Gamma效应与Gamma校正技术解析 显示器(尤其是CRT)存在Gamma效应,即输出亮度与输入电压呈非线性关系(通常为2.2次幂)。这与人眼感知亮度的特性巧合匹配,但在图形渲染中会导致问题:线性计算的颜色值经显示器显示后会失真变暗。Gamma校正通过在输出前对颜色值应用Gamma倒数(1/2.2)的幂运算,将非线性空间转换回线性空间。实现方式包括开启OpenGL的GL_FRAMEBUFFER_SRGB功能或在着色器中手动校正。同时需要注意sRGB纹理的处理,避免二次Gamma校正导致的过亮问题。该

2026-02-16 10:59:56 630

原创 LearnOpenGL——高级光照(一)高级光照

本文介绍了Blinn-Phong光照模型及其与冯氏模型的区别。Blinn-Phong通过引入半程向量解决了冯氏模型在低反光度时出现的镜面高光断层问题,使光照效果更自然。文中详细阐述了两种模型的计算方法,并比较了它们的效果差异,指出Blinn-Phong通常需要更高的反光度参数来达到类似冯氏模型的效果。最后提供了一个可切换两种模型的实现示例,通过按键B可进行对比观察。

2026-02-15 20:55:26 556

原创 LearnOpenGL——高级OpenGL(十一)抗锯齿

摘要 本文介绍了图形渲染中的锯齿边缘问题及其解决方案——抗锯齿技术。锯齿边缘(Jagged Edges)是由于光栅化过程中顶点数据转换为片段时采样不足导致的走样(Aliasing)现象。文章重点讲解了多重采样抗锯齿(MSAA)技术的工作原理:通过在每个像素中使用多个采样点来计算图元的覆盖情况,最终平均颜色值来获得更平滑的边缘效果。相比早期的超采样抗锯齿(SSAA),MSAA在保证效果的同时显著提升了性能。文章还详细说明了如何在OpenGL中启用MSAA,包括设置GLFW窗口参数和创建离屏渲染的多重采样缓冲附

2026-02-15 20:52:44 665

原创 LearnOpenGL——高级OpenGL(十)实例化

本文介绍了OpenGL中的实例化渲染技术,用于高效绘制大量相同模型。传统方法通过循环多次调用绘制函数会导致性能瓶颈,而实例化技术只需一次调用即可渲染多个实例。文章详细讲解了两种实现方式:使用gl_InstanceID索引uniform数组和更高效的实例化数组方法。通过一个绘制100个彩色四边形的示例,展示了如何配置顶点属性、设置偏移量数据,并使用glDrawArraysInstanced进行批量渲染。实例化数组通过属性除数控制数据更新频率,显著提升了渲染效率,是处理大规模重复对象(如草地、粒子等)的理想解决

2026-02-14 14:51:25 544

原创 LearnOpenGL——高级OpenGL(九)几何着色器

几何着色器是位于顶点和片段着色器之间的可选阶段,它能够对输入的图元顶点进行变换,甚至生成完全不同的图元和更多顶点。通过定义输入/输出图元类型和最大顶点数,几何着色器可以灵活地重构图形。示例展示了如何将输入的点图元转换为线图元或三角形带,动态生成房屋等复杂形状。使用EmitVertex和EndPrimitive函数控制顶点输出,结合三角形带的高效绘制方式,几何着色器为图形渲染提供了强大的动态生成能力,显著扩展了着色器管线的可能性。

2026-02-14 14:43:02 622

原创 LearnOpenGL——高级OpenGL(八)高级GLSL

本文介绍了GLSL着色器中一些实用的内建变量和接口块功能。重点讲解了顶点着色器的gl_PointSize(控制点大小)和gl_VertexID(获取顶点ID),以及片段着色器的gl_FragCoord(窗口坐标)、gl_FrontFacing(面朝向判断)和gl_FragDepth(深度值写入)等内建变量的使用方法。还介绍了接口块(Interface Block)这一组织着色器输入输出的有效方式,可以更方便地管理多个变量。这些特性虽然不会显著提升视觉效果,但能提供更多控制手段,在特定场景下非常实用,如粒子效

2026-02-13 23:00:15 659

原创 LearnOpenGL——高级OpenGL(七)高级数据

本文介绍了OpenGL中缓冲操作的进阶用法。首先解释了缓冲对象的基本概念,即缓冲本身只是内存块的管理者,其功能取决于绑定的目标类型。然后详细讲解了三种填充缓冲的方法:使用glBufferData一次性填充整个缓冲、使用glBufferSubData更新缓冲特定区域,以及通过glMapBuffer获取指针直接操作缓冲内存。文章还对比了顶点属性的两种存储方式:交错存储和分批存储,并展示了如何使用glBufferSubData实现分批存储。最后介绍了glCopyBufferSubData函数在不同缓冲间复制数据的

2026-02-13 22:57:17 564

原创 LearnOpenGL——高级OpenGL(六)立方体贴图

立方体贴图是一种包含6个2D纹理的特殊纹理类型,构成立方体的6个面。相比单独使用6个纹理,立方体贴图可以通过方向向量进行索引采样,简化了纹理操作。文章详细介绍了创建立方体贴图的步骤,包括绑定纹理目标、加载6个面的图像以及设置纹理参数。特别介绍了天空盒的应用,即用立方体贴图模拟大型场景效果。通过加载6张环境图片作为立方体贴图,将其绑定到立方体上,并使用方向向量采样,可以实现逼真的天空背景效果。最后给出了加载天空盒纹理和渲染天空盒的具体代码实现。

2026-02-12 19:36:06 573

原创 LearnOpenGL——高级OpenGL(五)帧缓冲

本文介绍了OpenGL中帧缓冲(Framebuffer)的概念和使用方法。帧缓冲由颜色缓冲、深度缓冲和模板缓冲组成,开发者可以自定义帧缓冲来实现离屏渲染效果。创建帧缓冲需要满足四个条件:至少附加一个缓冲、有颜色附件、附件完整且样本数相同。文中详细讲解了如何创建纹理附件和渲染缓冲对象附件,并比较了两者的适用场景。最后提到可以将场景渲染到纹理上,再绘制到屏幕上,为后续实现镜面反射和后期处理效果奠定基础。关键步骤包括:创建帧缓冲对象、绑定附件、检查完整性以及渲染到纹理等操作。

2026-02-12 19:28:43 617

原创 LearnOpenGL——高级OpenGL(四)面剔除

摘要:OpenGL的面剔除技术通过分析三角形顶点的环绕顺序,智能地剔除不可见的背面,大幅提升渲染效率。默认情况下,逆时针定义的三角形被视为正向面。启用面剔除后,背向面将被自动丢弃,节省50%以上的片段着色计算。开发者可通过glCullFace和glFrontFace函数灵活控制剔除行为,适用于封闭物体但不适用于需要双面显示的物体(如植被)。这项技术在不影响视觉效果的前提下显著优化了3D渲染性能。

2026-02-11 14:51:17 562

原创 LearnOpenGL——高级OpenGL(三)混合

OpenGL混合技术通过alpha通道实现物体透明度效果。混合允许颜色叠加,使物体呈现半透明或完全透明状态。对于全透明/不透明纹理(如草),可使用片段着色器中的discard命令丢弃透明部分。启用GL_BLEND后,通过glBlendFunc函数设置混合因子,控制源颜色和目标颜色的混合比例。典型的混合设置为glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA),实现自然的透明度效果。处理透明物体时需注意渲染顺序,通常需要从远到近绘制以获得正确混合效果。

2026-02-11 12:49:41 578

原创 LearnOpenGL——高级OpenGL(二)模板测试

本文介绍了OpenGL中的模板测试机制及其应用。模板测试通过模板缓冲来决定是否保留或丢弃片段,每个像素的模板值通常为8位,提供256种可能值。文章详细讲解了模板缓冲的操作步骤:启用写入、更新缓冲、禁用写入、根据缓冲内容渲染物体。重点演示了物体轮廓效果的实现方法:先正常绘制物体并更新模板值,然后禁用写入并放大绘制,仅保留原物体边缘部分。文中还介绍了glStencilFunc和glStencilOp等关键函数的使用方法,以及如何通过模板掩码控制写入权限。这种技术可以创造出各种有趣的渲染效果,如游戏中的选中高亮提

2026-02-10 19:35:09 597

原创 LearnOpenGL——高级OpenGL(一)深度测试

在坐标系统小节中,我们渲染了一个3D箱子,并且运用了深度缓冲(Depth Buffer)来防止被阻挡的面渲染到其它面的前面。在这一节中,我们将会更加深入地讨论这些储存在深度缓冲(或z缓冲(z-buffer))中的深度值(Depth Value),以及它们是如何确定一个片段是处于其它片段后方的。深度缓冲就像颜色缓冲(Color Buffer)(储存所有的片段颜色:视觉输出)一样,在每个片段中储存了信息,并且(通常)和颜色缓冲有着一样的宽度和高度。

2026-02-10 19:12:03 618

原创 LearnOpenGL——模型加载(三)模型

本文介绍了如何使用Assimp库加载3D模型并将其转换为OpenGL可渲染的网格对象。主要内容包括: 创建Model类来管理整个模型,包含多个Mesh对象、模型路径和加载处理函数。 使用Assimp导入器读取模型文件,进行必要的后期处理(如三角化、翻转UV等)。 递归处理场景节点,将每个网格转换为自定义的Mesh对象。 从aiMesh提取顶点数据(位置、法线、纹理坐标)、索引和材质纹理,构建Mesh对象。 该实现通过递归处理场景节点层次结构,保留了模型原有的父子关系,便于后续的变换操作。最终将Assimp的

2026-02-09 13:56:24 609

原创 LearnOpenGL——模型加载(二)网格

本文介绍了如何将Assimp加载的模型数据转换为OpenGL可渲染的网格类。通过定义Vertex和Texture结构体存储顶点属性和纹理信息,构建Mesh类来管理渲染数据。重点讲解了如何利用C++结构体的内存连续性特性高效传递顶点数据,以及通过纹理命名标准实现动态纹理绑定。最后详细说明了网格初始化(setupMesh)和渲染(Draw)的具体实现,包括顶点缓冲设置、属性指针配置以及多纹理处理的解决方案。

2026-02-09 13:55:59 671

原创 LearnOpenGL——模型加载(一)Assimp

本文介绍了3D模型加载的基本概念和技术。首先解释了为什么需要从外部导入复杂模型而非手动定义顶点数据,并介绍了常见的3D建模工具及其UV映射技术。文章重点讲解了模型文件格式的多样性,以及使用Assimp库来统一处理不同格式的方法。详细描述了Assimp的数据结构,包括场景对象、节点、网格和材质等组成部分。最后提供了Assimp库的编译和配置指南,包括常见问题的解决方案,为后续实际导入3D模型做好准备。

2026-02-08 22:22:34 576

原创 LearnOpenGL——光照(六)多光源

本文介绍了如何在OpenGL中实现多光源场景的渲染。主要内容包括: 通过GLSL函数封装不同光源(定向光、点光源)的计算逻辑,使代码更清晰可维护 使用结构体组织光源属性,定义定向光(DirLight)和点光源(PointLight)的数据结构 实现定向光计算函数CalcDirLight,处理环境光、漫反射和镜面反射 实现点光源计算函数CalcPointLight,增加距离衰减效果 在片段着色器中组合多个光源效果,通过循环处理多个点光源 介绍了如何设置结构体数组形式的uniform变量 这种方法可以创建包含多

2026-02-08 08:42:53 645

原创 LearnOpenGL——光照(五)投光物

本文介绍了三种不同类型的光源及其实现方法:定向光、点光源和聚光。重点讲解了定向光的模拟原理,通过定义光线方向向量而非位置向量来模拟无限远光源(如太阳)的效果。同时详细阐述了点光源的衰减机制,提出使用包含常数项、一次项和二次项的公式来实现光线随距离递减的效果,并提供了不同距离下的参数参考表。通过调整这些参数,可以模拟出真实世界中光线的自然衰减特性,从而在3D场景中实现更逼真的光照效果。

2026-02-07 19:15:17 622

原创 LearnOpenGL——光照(四)光照贴图

本文介绍了如何使用漫反射贴图和镜面光贴图来提升3D物体的材质细节表现。通过将漫反射颜色和镜面光强度分别存储在纹理中,可以实现物体不同部位具有不同材质属性的效果。具体实现包括:1)在着色器中用sampler2D替换原有材质向量;2)加载并绑定对应的纹理贴图;3)在片段着色器中对纹理进行采样计算。漫反射贴图控制基础颜色,镜面光贴图(通常为黑白纹理)则决定各部位的镜面反射强度。这种方法可以显著提升渲染效果的真实感,如示例中的木箱就能准确表现出金属边框的反光特性。完整代码可在相关链接获取。

2026-02-07 14:52:13 642

原创 LearnOpenGL——光照(三)材质

摘要:本文介绍了在OpenGL中通过材质属性模拟不同物体对光照的反射特性。重点讲解了材质结构体的定义,包含环境光、漫反射、镜面光颜色和反光度四个属性,并通过片段着色器实现了材质系统。同时阐述了光源属性的设置方法,包括调整各光照分量强度以及动态改变光源颜色来创造视觉效果。文中还提供了代码示例,展示了如何通过修改材质和光照参数来模拟现实世界中不同材质的外观。

2026-02-06 14:51:20 595

原创 LearnOpenGL——光照(二)基础光照

现在我们已经把法向量从顶点着色器传到了片段着色器。可是,目前片段着色器里的计算都是在世界空间坐标中进行的。所以,我们是不是应该把法向量也转换为世界空间坐标?基本正确,但是这不是简单地把它乘以一个模型矩阵就能搞定的。首先,法向量只是一个方向向量,不能表达空间中的特定位置。同时,法向量没有齐次坐标(顶点位置中的w分量)。这意味着,位移不应该影响到法向量。因此,如果我们打算把法向量乘以一个模型矩阵,我们就要从矩阵中移除位移部分,只选用模型矩阵左上角3×3的矩阵(注:我们也可以把。

2026-02-06 12:41:44 541

原创 LearnOpenGL——光照(一)颜色

本节我们将会更深入地讨论什么是颜色,并且还会为接下来的光照(Lighting)教程创建一个场景。现实世界中有无数种颜色,每一个物体都有它们自己的颜色。我们需要使用(有限的)数值来模拟真实世界中(无限)的颜色,所以并不是所有现实世界中的颜色都可以用数值来表示的。然而我们仍能通过数值来表现出非常多的颜色,甚至你可能都不会注意到与现实的颜色有任何的差异。颜色可以数字化的由红色(Red)、绿色(Green)和蓝色(Blue)三个分量组成,它们通常被缩写为RGB。仅仅用这三个值就可以组合出任意一种颜色。

2026-02-05 19:53:01 594

原创 LearnOpenGL——入门(七)摄像机

本文介绍了在OpenGL中实现摄像机系统的关键方法。通过定义摄像机位置、方向和坐标系,使用LookAt矩阵将世界坐标转换为观察空间。重点讲解了如何实现自由移动的FPS风格摄像机,包括使用WASD键控制移动,通过叉乘计算右向量实现横移效果。还讨论了使用deltaTime变量解决不同硬件下移动速度不一致的问题,确保帧率无关的平滑移动体验。最后展示了如何让摄像机围绕场景旋转,为3D场景交互提供了基础实现方案。

2026-02-05 10:23:50 658

原创 LearnOpenGL——入门(六)坐标系统

为了将坐标从一个坐标系变换到另一个坐标系,我们需要用到几个变换矩阵,最重要的几个分别是模型(Model)、观察(View)、投影(Projection)三个矩阵。我们的顶点坐标起始于局部空间(Local Space),在这里它称为局部坐标(Local Coordinate),它在之后会变为世界坐标(World Coordinate),观察坐标(View Coordinate),裁剪坐标(Clip Coordinate),并最后以屏幕坐标(Screen Coordinate)的形式结束。

2026-02-04 22:16:14 608

原创 LearnOpenGL——入门(五)变换

摘要:本文介绍了向量和矩阵的基本概念及其运算。向量是具有方向和长度的数学对象,可用于表示2D/3D空间中的位置和方向。文章详细讲解了向量的标量运算、取反、加减法、长度计算、标准化以及点乘和叉乘运算。矩阵是矩形数字阵列,支持加减法、数乘和矩阵乘法等运算,其中矩阵乘法需满足特定维度条件。这些数学工具在图形变换和计算中具有重要作用。

2026-02-04 14:58:16 586

原创 LearnOpenGL——入门(四)纹理

本文介绍了纹理在计算机图形学中的应用及其相关概念。纹理作为2D图像可用于增强物体细节,相比顶点着色更高效。文章详细讲解了纹理坐标系统、纹理环绕方式(重复、镜像、边缘拉伸等)和纹理过滤技术(邻近过滤和线性过滤),并分析了它们在不同场景下的视觉效果。此外,还介绍了多级渐远纹理(Mipmap)技术,用于优化远距离物体的纹理渲染性能。最后简要提及了纹理加载的注意事项,为后续纹理应用奠定基础。

2026-02-03 19:58:39 622

原创 LearnOpenGL——入门(三)着色器

着色器(Shader)是运行在GPU上的小程序。这些小程序为图形渲染管线的某个特定部分而运行。从基本意义上来说,着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立的程序,因为它们之间不能相互通信;它们之间唯一的沟通只有通过输入和输出。之前了解了如何恰当地使用它们,现在用一种更加广泛的形式详细解释着色器,特别是OpenGL着色器语言(GLSL)。

2026-02-03 14:36:51 615

原创 LearnOpenGL——入门(二)你好三角形

本文介绍了OpenGL图形渲染管线的基本概念和工作流程。主要包括顶点数组对象(VAO)、顶点缓冲对象(VBO)和索引缓冲对象(EBO/IBO)的作用,以及图形渲染管线的两个主要部分:将3D坐标转换为2D坐标和将2D坐标转为有色像素。详细阐述了顶点着色器、图元装配、几何着色器、光栅化、片段着色器等渲染阶段的功能,并说明了标准化设备坐标的概念。此外,文章还讲解了如何使用VBO在显存中存储顶点数据,以及创建顶点着色器和片段着色器的必要性。通过一个三角形绘制的示例,展示了顶点数据的定义和传输过程。

2026-02-02 15:01:10 613

原创 LearnOpenGL——入门(一)你好窗口

本文介绍了如何使用GLFW和GLAD创建OpenGL窗口的基本流程。首先需要正确包含头文件顺序,确保GLAD在GLFW之前。接着初始化GLFW并配置OpenGL版本为3.3核心模式,创建窗口对象并设置上下文。然后通过GLAD加载OpenGL函数指针,配置视口并设置窗口大小回调函数。文章还详细说明了渲染循环的实现,包括处理输入、清屏和交换缓冲区等操作。最后提供了一个完整的示例代码,展示如何创建800x600的窗口,处理ESC键退出事件,并使用绿色背景清屏。整个过程涵盖了OpenGL窗口创建的核心步骤和基本概念

2026-02-02 08:11:52 671

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除