<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[VIPCCJ的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/VIPCCJ</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; VIPCCJ]]></copyright><item><title><![CDATA[常用的绘制控件]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/142342722</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/142342722</guid><author>VIPCCJ</author><pubDate>Wed, 18 Sep 2024 20:22:57 +0800</pubDate><description><![CDATA[可以查看常用控件以及使用方法。]]></description><category></category></item><item><title><![CDATA[LearnOpenGL学习笔记——延迟着色法]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/125152854</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/125152854</guid><author>VIPCCJ</author><pubDate>Tue, 16 Aug 2022 00:26:50 +0800</pubDate><description><![CDATA[我们现在一直使用的光照方式叫做正向渲染(Forward Rendering)或者正向着色法(Forward Shading)，它是我们渲染物体的一种非常直接的方式，在场景中我们根据所有光源照亮一个物体，之后再渲染下一个物体，以此类推。它非常容易理解，也很容易实现，但是同时它对程序性能的影响也很大，因为对于每一个需要渲染的物体，程序都要对每一个光源每一个需要渲染的片段进行迭代，这是非常多的！因为大部分片段着色器的输出都会被之后的输出覆盖，正向渲染还会在场景中因为高深的复杂度(多个物体重合在一个像素上)浪费大量]]></description><category></category></item><item><title><![CDATA[系统运维——Linux环境]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/125321682</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/125321682</guid><author>VIPCCJ</author><pubDate>Thu, 16 Jun 2022 19:10:46 +0800</pubDate><description><![CDATA[yum install 不可用解决方案
https://techglimpse.com/failed-metadata-repo-appstream-centos-8/]]></description><category></category></item><item><title><![CDATA[Unity入门指南——常见问题整理]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/125246484</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/125246484</guid><author>VIPCCJ</author><pubDate>Sun, 12 Jun 2022 16:07:11 +0800</pubDate><description><![CDATA[问题1：vs没有自动补全脚本
https://blog.youkuaiyun.com/qq_41835314/article/details/123401064]]></description><category></category></item><item><title><![CDATA[LearnOpenGL学习笔记——泛光]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/125132982</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/125132982</guid><author>VIPCCJ</author><pubDate>Sun, 05 Jun 2022 23:07:00 +0800</pubDate><description><![CDATA[泛光 高斯模糊  多渲染目标]]></description><category></category></item><item><title><![CDATA[LearnOpenGL学习笔记——HDR]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/125109772</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/125109772</guid><author>VIPCCJ</author><pubDate>Fri, 03 Jun 2022 14:27:48 +0800</pubDate><description><![CDATA[一般来说，当存储在帧缓冲(Framebuffer)中时，亮度和颜色的值是默认被限制在0.0~1.0之间的。但是如果我们遇上了一个特性的区域，其中有多个光源使这些数值综合超过了1.0，又会发生什么呢？答案是这些片段中超过1.0的亮度或者颜色会被约束在1.0，从而导致场景混成一片，难以分辨:

这是由于大量片段的颜色值都非常接近1.0，在很大一个区域内每一个亮的片段都有相同的白色。这损失了很多的细节，使场景看起来非常假。解决这个问题的一个方案是减小光源的强度从而保证场景内没有一个片段亮于1.0。然而这并不是一个]]></description><category></category></item><item><title><![CDATA[LearnOpenGL学习笔记——视差贴图]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/125014440</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/125014440</guid><author>VIPCCJ</author><pubDate>Wed, 01 Jun 2022 22:56:19 +0800</pubDate><description><![CDATA[视差贴图

]]></description><category></category></item><item><title><![CDATA[Docker指南]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/125091258</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/125091258</guid><author>VIPCCJ</author><pubDate>Wed, 01 Jun 2022 21:56:36 +0800</pubDate><description><![CDATA[docker 踩坑指南]]></description><category></category></item><item><title><![CDATA[LearnOpenGL学习笔记——法线贴图]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/124956068</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/124956068</guid><author>VIPCCJ</author><pubDate>Sat, 28 May 2022 00:02:34 +0800</pubDate><description><![CDATA[法线贴图
我们的场景中已经充满了多边形物体，其中每个都可能由成百上千平坦的三角形组成。我们以向三角形上附加纹理的方式来增加额外细节，提升真实感，隐藏多边形几何体是由无数三角形组成的事实。纹理确有助益，然而当你近看它们时，这个事实便隐藏不住了。现实中的物体表面并非是平坦的，而是表现出无数（凹凸不平的）细节。
例如，砖块的表面。砖块的表面非常粗糙，显然不是完全平坦的：它包含着接缝处水泥凹痕，以及非常多的细小的空洞。如果我们在一个有光的场景中看这样一个砖块的表面，问题就出来了。下图中我们可以看到砖块纹理应用到了平]]></description><category></category></item><item><title><![CDATA[LearnOpenGL学习笔记——阴影]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/124853434</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/124853434</guid><author>VIPCCJ</author><pubDate>Sat, 21 May 2022 21:53:14 +0800</pubDate><description><![CDATA[阴影
阴影是光线遮挡的结果；当一个光源的光线由于其他物体的阻挡不能够达到一个物体表面的时候，那么这个物体就在阴影中了。

阴影可以让场景更加真实
阴影映射(Shadow Mapping)
阴影映射(Shadow Mapping)背后的思路非常简单：我们以光的位置为视角进行渲染，我们能看到的东西都将被点亮，看不见的一定是在阴影之中了。假设有一个地板，在光源和它之间有一个大盒子。由于光源处向光线方向看去，可以看到这个盒子，但看不到地板的一部分，这部分就应该在阴影中了。

在深度缓冲里的一个值是摄像机视角下，对应]]></description><category></category></item><item><title><![CDATA[LearnOpenGL学习笔记——Gamma校正]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/124810274</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/124810274</guid><author>VIPCCJ</author><pubDate>Mon, 16 May 2022 22:57:24 +0800</pubDate><description><![CDATA[Gamma校正
https://www.zhihu.com/question/27467127/answer/37602200
https://learnopengl-cn.github.io/05%20Advanced%20Lighting/02%20Gamma%20Correction/

]]></description><category></category></item><item><title><![CDATA[LearnOpenGL学习笔记——高级光照]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/124809403</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/124809403</guid><author>VIPCCJ</author><pubDate>Mon, 16 May 2022 22:31:52 +0800</pubDate><description><![CDATA[Blinn-Phong
冯氏光照不仅对真实光照有很好的近似，而且性能也很高。但是它的镜面反射会在一些情况下出现问题，特别是物体反光度很低时，会导致大片（粗糙的）高光区域。下面这张图展示了当反光度为1.0时地板会出现的效果：

可以看到，在镜面高光区域的边缘出现了一道很明显的断层。出现这个问题的原因是观察向量和反射向量间的夹角不能大于90度。如果点积的结果为负数，镜面光分量会变为0.0。你可能会觉得，当光线与视线夹角大于90度时你应该不会接收到任何光才对，所以这不是什么问题。
然而，这种想法仅仅只适用于漫反射]]></description><category></category></item><item><title><![CDATA[LearnOpenGL学习笔记——抗锯齿]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/124768093</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/124768093</guid><author>VIPCCJ</author><pubDate>Sat, 14 May 2022 15:13:13 +0800</pubDate><description><![CDATA[如何开启抗锯齿
原理见末尾链接
glfwWindowHint(GLFW_SAMPLES, 4);
glEnable(GL_MULTISAMPLE);// 一般默认是打开状态

离屏MSAA
https://learnopengl-cn.github.io/04%20Advanced%20OpenGL/11%20Anti%20Aliasing/

]]></description><category></category></item><item><title><![CDATA[LearnOpenGL学习笔记——实例化]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/124720698</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/124720698</guid><author>VIPCCJ</author><pubDate>Thu, 12 May 2022 00:49:05 +0800</pubDate><description><![CDATA[实例化
假设你有一个绘制了很多模型的场景，而大部分的模型包含的是同一组顶点数据，只不过进行的是不同的世界空间变换。想象一个充满草的场景：每根草都是一个包含几个三角形的小模型。你可能会需要绘制很多根草，最终在每帧中你可能会需要渲染上千或者上万根草。因为每一根草仅仅是由几个三角形构成，渲染几乎是瞬间完成的，但上千个渲染函数调用却会极大地影响性能。如果我们需要渲染大量物体时，代码看起来会像这样：
	for(unsigned int i = 0; i &lt; amount_of_models_to_draw; i]]></description><category></category></item><item><title><![CDATA[LearnOpenGL学习笔记——几何着色器]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/124678358</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/124678358</guid><author>VIPCCJ</author><pubDate>Wed, 11 May 2022 00:44:08 +0800</pubDate><description><![CDATA[几何着色器
在顶点和片段着色器之间有一个可选的几何着色器(Geometry Shader)，几何着色器的输入是一个图元（如点或三角形）的一组顶点。几何着色器可以在顶点发送到下一着色器阶段之前对它们随意变换。然而，几何着色器最有趣的地方在于，它能够将（这一组）顶点变换为完全不同的图元，并且还能生成比原来更多的顶点。废话不多说，我们直接先看一个几何着色器的例子：
#version 330 core
layout (points) in;
layout (line_strip, max_vertices = 2)]]></description><category></category></item><item><title><![CDATA[LearnOpenGL学习笔记——高级GLSL]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/124677188</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/124677188</guid><author>VIPCCJ</author><pubDate>Mon, 09 May 2022 23:05:46 +0800</pubDate><description><![CDATA[顶点着色器变量
gl_PointSize ：可以设置渲染出来点的大小。使用
	glEnable(GL_PROGRAM_POINT_SIZE);`

开始启用点大小设置，点的大小会随着观察者距顶点距离变远而增大。
	void main()
	{
    	gl_Position = projection * view * model * vec4(aPos, 1.0);    
    	gl_PointSize = gl_Position.z;    
	}

gl_VertexID：整型变量gl_Vert]]></description><category></category></item><item><title><![CDATA[LearnOpenGL学习笔记——高级数据]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/124656472</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/124656472</guid><author>VIPCCJ</author><pubDate>Sun, 08 May 2022 23:22:49 +0800</pubDate><description><![CDATA[高级数据
我们在OpenGL中大量使用缓冲来存储数据已经有很长时间了。操作缓冲其实还有更有意思的方式，而且使用纹理将大量输出传入着色器也有更有趣的方法。这一节中，我们将讨论一些更有意思的缓冲函数，以及我们该如何使用纹理来存储大量的数据(纹理部分还没有完成)。
OpenGL中的缓冲只是一个管理特定内存块的对象，没有其它更多的功能了。在我们将它绑定到一个缓冲目标(Buffer Target)时，我们才赋予了其意义。当我们绑定一个缓冲到GL_ARRAY_BUFFER时，它就是一个顶点数组缓冲，但我们也可以很容易地]]></description><category></category></item><item><title><![CDATA[LearnOpenGL学习笔记——立方体贴图]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/124645537</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/124645537</guid><author>VIPCCJ</author><pubDate>Sun, 08 May 2022 12:36:31 +0800</pubDate><description><![CDATA[立方体贴图
在本节中，我们将讨论的是将多个纹理组合起来映射到一张纹理上的一种纹理类型：立方体贴图(Cube Map)。简单来说，立方体贴图就是一个包含了6个2D纹理的纹理，每个2D纹理都组成了立方体的一个面：一个有纹理的立方体。你可能会奇怪，这样一个立方体有什么用途呢？为什么要把6张纹理合并到一张纹理中，而不是直接使用6个单独的纹理呢？立方体贴图有一个非常有用的特性，它可以通过一个方向向量来进行索引/采样。假设我们有一个1x1x1的单位立方体，方向向量的原点位于它的中心。使用一个橘黄色的方向向量来从立方体贴]]></description><category></category></item><item><title><![CDATA[LearnOpenGL学习笔记——帧缓冲]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/124571371</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/124571371</guid><author>VIPCCJ</author><pubDate>Fri, 06 May 2022 01:07:55 +0800</pubDate><description><![CDATA[帧缓冲
用于写入颜色值的颜色缓冲、用于写入深度信息的深度缓冲和允许我们根据一些条件丢弃特定片段的模板缓冲。这些缓冲结合起来叫做帧缓冲(Framebuffer)，它被储存在内存中。OpenGL允许我们定义我们自己的帧缓冲，也就是说我们能够定义我们自己的颜色缓冲，甚至是深度缓冲和模板缓冲。
我们目前所做的所有操作都是在默认帧缓冲的渲染缓冲上进行的。默认的帧缓冲是在你创建窗口的时候生成和配置的（GLFW帮我们做了这些）。有了我们自己的帧缓冲，我们就能够有更多方式来渲染了。
如何创建自己的帧缓冲：
	// 创建帧缓]]></description><category></category></item><item><title><![CDATA[LearnOpenGL学习笔记——面剔除]]></title><link>https://blog.youkuaiyun.com/VIPCCJ/article/details/124554753</link><guid>https://blog.youkuaiyun.com/VIPCCJ/article/details/124554753</guid><author>VIPCCJ</author><pubDate>Tue, 03 May 2022 15:41:31 +0800</pubDate><description><![CDATA[面剔除
尝试在脑子中想象一个3D立方体，数数你从任意方向最多能同时看到几个面。如果你的想象力不是过于丰富了，你应该能得出最大的面数是3。你可以从任意位置和任意方向看向这个球体，但你永远不能看到3个以上的面。所以我们为什么要浪费时间绘制我们不能看见的那3个面呢？如果我们能够以某种方式丢弃这几个看不见的面，我们能省下超过50%的片段着色器执行数！
如果我们想象任何一个闭合形状，它的每一个面都有两侧，每一侧要么面向用户，要么背对用户。如果我们能够只绘制面向观察者的面呢？
这正是面剔除(Face Culling)所]]></description><category></category></item></channel></rss>