avatar
文章
50
标签
48
分类
10

Home
Archives
Tags
Categories
Home
Archives
Tags
Categories

VanishingBlog

OpenGL学习笔记(八)-光照
发表于2024-09-19
光照在上一节我们实现了材质. 材质用于表征一个表面的各种属性. 但是相同的材质在不同光照的情况下显现出的结果不同.例如:一件白衣服在不同灯光下显现的颜色不同. 所以最终像素点上的颜色应该由光照和材质共同决定. 光照模型有很多种,常见的有Phong光照模型,Blinn-Phong光照模型.我们在这一节实现一个Blinn-Phong光照模型. Light类首先我们定义一个Light类,用于描述光源. class Light{public: glm::vec3 position; glm::vec3 color; float radiant;public: Light(){ position = glm::vec3(0.0f, 0.0f, 0.0f); color = glm::vec3(1.0f, 1.0f, 1.0f); radiant = 10.0f; } Light(glm::vec3 pos, glm::vec3 col, float rad) { p ...
OpenGL学习笔记(七)-3d模型
发表于2024-09-14|OpenGL|OpenGL
Assimp库3d资产的格式种类非常之多,文件的细节与标准也千差万别,我们需要一个专门的库来为我们处理这些资产文件.Assimp库就是这样一个库,它可以读取各种3d资产文件,以便我们加载3d模型. 你可以点击这里访问Assimp库的GitHub页面,下载最新版本的Assimp库. 由于Assimp库实际上较为庞大,考虑到编译Assimp库需要的时间较长,我们选用Assimp库的预编译版本.你可以点击这里下载 我们将库安装在我们的3rd目录下.然后更改我们的CMakeLists.txt文件,添加以下内容: include_directories(${CMAKE_SOURCE_DIR}/3rd/assimp/include)link_libraries(${CMAKE_SOURCE_DIR}/3rd/assimp/lib/x64) 别忘了在Source中的CMakeLists.txt中链接Assimp库: target_link_libraries(BickRenderer ${CMAKE_SOURCE_DIR}/3rd/ass ...
OpenGL学习笔记(六)-坐标系统
发表于2024-09-13|OpenGL|OpenGL
概述本节核心就是一张图: 局部空间(Local Space)局部空间是物体所在的空间,比如在DCC软件中创建的模型所在的空间. 世界空间(World Space)世界空间是全局坐标系,为世界中的所有物体提供一个坐标系. 观察空间(View Space)观察空间是摄像机所在的空间,它是相机的视角,是摄像机看到的世界的局部空间. 裁剪空间(Clip Space)在我们的着色器中,我们希望坐标都能落在一个特定的范围,否则在着色器运算中会增加很多复杂的步骤,因此需要对观察空间进行裁剪变换到NDC空间. 应用glm库已经为我们实现好了计算这些变换矩阵的方法: glm::mat4 model = glm::mat4(1.0f); // 模型矩阵glm::mat4 view = glm::mat4(1.0f); // 观察矩阵glm::mat4 projection = glm::mat4(1.0f); // 投影矩阵model = glm::translate(model, glm::vec3(0.0f, 0.0f, -3.0f)); // 平移view = glm::lookAt(glm: ...
OpenGL学习笔记(五)--3D数学
发表于2024-09-13|OpenGL|OpenGL
向量向量相乘 点乘: 叉乘: 注意,叉乘的方向取决于坐标系是左手系还是右手系. 常见软件使用坐标系如下: OpenGL : 右手系 DirectX: 左手系 Unreal : 左手系 Unity : 左手系 glm : 右手系 矩阵矩阵乘法 值得注意的是,在矩阵乘法中,乘法交换律是不满足的.又由于各种平台对一维向量的表示不同(行向量还是列向量),所以在矩阵乘法中顺序尤为重要. 比如MVP矩阵,在OpenGL中使用的是列向量,所以MVP矩阵的乘法顺序是P * V * M * v.而在DirectX中使用的是行向量,所以MVP矩阵的乘法顺序是v * M * v * P . 以下是常见软件向量表示方法: OpenGL : 列向量 Unity : 列向量 DirectX: 行向量 glm : 列向量 矩阵与向量相乘 我们的模型顶点一般是一个三维向量,我们可以利用举证对这个向量进行变换,比如平移,旋转,缩放等操作. 缩放矩阵 注意,第四个缩放向量仍然是1,因为在3D空间中缩放w分量是无意义的.w分量另有其他用途,在后文中会说明. 位移 ...
OpenGL学习笔记(四)--纹理
发表于2024-09-12|OpenGL|OpenGL
本节目录 纹理基础 纹理技术 应用纹理 纹理类 纹理基础图片实际上就是一张纹理,为了表现丰富的计算机世界,纹理是必不可少的. 首先需要解决的是如何将一张图片映射到我们的计算机世界中.我们使用x和y轴的两个0-1的数来表示纹理的坐标,即uv坐标 对于我们的三角形,我们可以为每个顶点指定uv坐标,这样就可以和纹理对应起来了. 纹理技术Wrapping当纹理z轴坐标超过1时,我们需要对纹理坐标进行wrap,也就是如何处理uv大于1的情况.OpenGL提供了四种选择: GL_REPEAT: 重复纹理 GL_MIRRORED_REPEAT: 镜像重复纹理 GL_CLAMP_TO_EDGE: 贴边纹理 GL_CLAMP_TO_BORDER: 边缘纹理 效果如下: MipMap想象一下,当镜头拉远,一个很远的物体只占屏幕的4个像素时,如果还让其在一张512x512的纹理上采样,想想都不太高效.所以可以生成各种分辨率的纹理,然后根据距离摄像机的远近选择合适的纹理. 这种方法带来的开销也非常小. 纹理过滤纹理是有分辨率的,但uv坐标”没有”.这就导致opengl需要知道如何将纹理像素映射到uv ...
OpenGL学习笔记(三)--Shader
发表于2024-09-12|OpenGL|OpenGL
本节内容 Shader基础 Shader类 什么是ShaderShader是运行在GPU上的程序.编写Shader程序使用的是Shading Language.主流的Shading Language有GLSL,HLSL,CG等.其中OpenGL使用的是GLSL. Shader基本结构一个典型的shader有以下结构 #version version_numberin type in_variable_name;in type in_variable_name;out type out_variable_name;uniform type uniform_name;void main(){ // 处理输入并进行一些图形操作 ... // 输出处理过的结果到输出变量 out_variable_name = weird_stuff_we_processed;} Shader类对于创建和使用一个shader程序,我们有以下几个固定的步骤. unsigned int vertexShader, fragmentShader;const char *vertexSh ...
OpenGl学习笔记(二)--Triangle
发表于2024-09-10|OpenGL
本节内容 第一个三角形 Hello Triangle在本章之前首先需要明确以下几个名词 VAO(Vertex Array Object): 顶点数组对象,用于存储顶点数据 VBO(Vertex Buffer Object): 顶点缓冲对象,用于存储顶点数据 EBO(Element Buffer Object): 元素缓冲对象,用于存储索引数据 IBO(Index Buffer Object): 索引缓冲对象,用于存储索引数据 OpenGL 渲染管线 顶点着色器: 将顶点转换到NDC(Normalized Device Coordinates) 几何着色器: 处理顶点的几何变换 图元装配: 将顶点组成图元 光栅化: 将图元转换为像素 片段着色器: 计算每个像素的颜色 测试混合: 融合颜色 输入顶点数据由于我们想要渲染一个三角形,所以首先需要指定三个顶点. float vertices[] = { -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f, 0.0f, 0.5f, 0.0f}; 这里将顶点位置已经 ...
OpenGl学习笔记(一)--环境搭建
发表于2024-09-09|OpenGL
本节内容 OpenGl简要介绍 创建第一个窗口 OpenGl简要介绍什么是OpenGlOpenGl是一个规范,虽然一般被认为是一个API,但其本身并不负责实现. OpenGl严格规定每个函数如何执行以及输出值,内部具体实现则由OpenGl库开发者完成.而其开发者一般为显卡厂商. 核心模式 && 立即渲染模式立即渲染模式被时代抛弃 核心模式更自由,是主流 扩展(Extension)为了开发者不必等待新的规范发布,通过检查显卡是否支持某些功能,来实现更好的优化和别的特性 状态机OpenGL本身是一个大状态机,根据自身的状态来执行操作 对象对象是一个结构体 Hello World,创建第一个窗口首先需要: 创建OpenGl上下文 创建窗口 由于这两个步骤在不同平台上都不一样,并且OpenGL有意将其抽象出去,所以需要我们自己进行处理.当然,这一步已经有许多成熟的开源库为我们处理好了. GLFWGLFW是一个c语言库,它可以创建OpenGL上下文,定义窗口,处理输入 GLAD由于OpenGL只是一个规范,具体实现需要驱动开发者根据显卡进行实现,导致OpenGL驱动版本众多 ...
【TroubleShooting】git提示文件过大
发表于2024-06-14|TroubleShooting|git
问题描述在使用git提交代码时,提示文件过大,无法提交。 问题原因git的默认配置下,文件大小限制为100MB。如果文件超过100MB,则无法提交。如果某次commit中包含大文件,即使在后续的commit中删除了大文件,也需要上传大文件,导致commit失败。 解决方法1. 忽略大文件在项目根目录下创建一个.gitignore文件,并添加需要忽略的文件或目录,如: *.log*.zip 2. 在commit中删除大文件 使用git log 命令查看提交记录,找到超过大小的文件所在的提交 使用git reset 命令回退到指定提交 重新提交 上传 3. 使用git-lfsgit-lfs是一个开源的Git扩展,可以跟踪大文件,并将它们存储在Git的对象数据库中,而不是像Git本身一样直接跟踪它们。 安装git-lfs: sudo apt-get install git-lfs 安装git-lfs后,在项目根目录下执行: git lfs install 使用git lfs track命令将需要跟踪的文件添加到.gitattributes文件中: *.log filter=lf ...
【PathTracer系列】系列概述
发表于2024-05-20|ComputerGraphics|C++•PathTracing•Homework
概述这是一个计算机图形学作业 系列目标 制作一个软PathTracer 技术目标 PBR实现 重要性采样 纹理支持 反走样(MSAA) 支持obj文件导入 加速结构(BVH) 展望 发展为一个小型路径追踪渲染器 参考资料 Games101 PBRT Games202 Games104 OneWeekRayTracingSeries Fundamentals of Computer Graphics Whitted Ray Tracing Ray and Path Tracing The Cherno - Ray Tracing Series CodingAdvanture-RayTracing Wikipedia - Path tracing ZhiHu-Mao ZhiHu-tkstar ZhiHu-Wang Reference
1…45
avatar
Vanish
KeepLearning
文章
50
标签
48
分类
10
Follow Me
公告
公告竟然消失了!
最新文章
Sheen从理论到实践2025-09-23
Irridescence从理论到实践2025-09-23
ClearCoat从理论到实践2025-09-23
Anisotropy从理论到实践2025-09-23
.Net响应式编程,一键入坑到入坟2025-09-23
分类
  • 3D Reconstruction1
  • C++1
  • Computer Graphics10
  • ComputerGraphics2
  • OpenGL9
  • TroubleShooting1
  • algorithm1
  • glTF3
标签
PBRAnisotropyRenderingComputer-GraphicsShadingClearCoatDDGILumenGIRayTracingDFSSDistance FieldSoft ShadowsSDFGraphicsEarly-ZPre-ZglTF3DIridescenceNeRFAIDeep LearningComputer Graphics.NETC#RxRx.NETReactive-ExtensionsReactive-Programming函数式编程OpenGLDpeth Testsoft shadowPCFPCSSVSSMMSMSTLC++
归档
  • 九月 202520
  • 十二月 20243
  • 十一月 202411
  • 十月 20244
  • 九月 20248
  • 七月 20242
  • 六月 20241
  • 五月 20241
网站资讯
文章数目 :
50
已运行时间 :
本站访客数 :
本站总访问量 :
最后更新时间 :
©2024 - 2025 By Vanish
框架 Hexo|主题 Butterfly
湘ICP备2024058874号 http://beian.miit.gov.cn