- 博客(9)
- 收藏
- 关注
原创 LearnOpenGL-模型
接下来定义一个纹理所在textureFilePosition,通过GetTexture函数获取纹理并存入,在设置一个开关,当textures_loaded容器中已经存在加载过得纹理路径与需要加载的纹理路径相同时,就不再重新加载,直接使用已加载的纹理。如果没有发生错误,则处理场景中的所有节点。上半部分是对该节点的处理,获取该节点的所有网格,并通过该节点存储的索引,在scene中找到真正的网格数据。下半部分是对该节点的递归,获取该节点的所有子节点,并调用自身函数递归,当不再有任何子节点时,函数执行完毕。
2023-02-06 19:51:42
272
原创 LearnOpenGL笔记-网格/模型
在上一节中我们成功配置了assimp库,在使用assimp库倒导入模型时,它通常会将整个模型加载到一个场景scene中,这个场景scene中包含了所有需要的模型数据。同时,assimp会将场景在入为一系列的节点Node,在每个节点中存储真实模型数据数据的索引,每个节点又可以有任意数量的子节点。assimp数据结构如下:在scene中的mMeshes[]数组存储了真正的mesh对象,而节点Node中的mMeshes[]存储的是场景中网格数组索引,可以通过遍历索引访问mesh对象。
2023-02-06 16:08:51
487
原创 LearnOpenGL笔记-Assimp库
点击generate,若出现无法找到DirectX,则自行安装DirectX,需要先卸载Visual C++ 2010 Redistributable Package version 10.0.40219,控制面板卸载,之后傻瓜式安装即可。将assimp-vc140-mt.lib和assimp-vc140-mt.dll拷贝到x64/debug文件夹下,也就是.exe文件所在目录中。在build文件夹中找到这里,我们需要的是assimp-vc140-mt.dll和assimp-vc140-mt.lib。
2023-02-06 11:20:49
412
原创 LearnOpenGL笔记-多光源
这里我们想要使用多个点光源,在GLSL中使用了预处理指令来定义了我们场景中点光源的数量。所以我们会用不同的函数来对不同的光照类型进行计算,并在main函数中进行结合输出。GLSL函数语法与C很像,需要注意的几点是若函数不是在main函数之前声明的,则必须要在代码顶部声明一个原型。在main函数后面实现CalcDirLight函数(若在main函数之前,则可不用声明原型,与C类似)。最后,我们使用了多个光源立方体,因此,我们需要对不同的光源立方体进行模型变换,变换到不同的位置上去。
2023-02-02 15:27:27
288
原创 LearnOpenGL笔记- 投光物
现实世界中,在离光源越近的地方光照强度越大,衰减越快,离光源越远的地方光照强度越小,衰减越慢。外圆锥的设置与内圆锥基本一致,在设置在内圆锥内强度为1.0,外圆锥外强度为0.0,之间逐渐递减,可利用如下公式来实现。常数项通常保持为1.0,它的主要作用是保证分母永远不会比1小,否则的话在某些距离上它反而会增加强度,这肯定不是我们想要的效果。在内外圆锥之间逐渐递减,在内圆锥内为大于1的值,在外圆锥外为小于0的值,由此限制在0-1之间。随着距离增长,它的强度明显减弱,并缓慢地在距离大约100的时候强度接近0。
2023-01-31 15:30:38
163
原创 learnOpenGL笔记-光照贴图
镜面光贴图上的每一个像素都可以用一个颜色向量来表示,vec3(0.0)表示黑色,vec3(1.0)表示白色,这样就可以在片段着色器中将对应的颜色向量乘以光源的镜面强度,得到物体的镜面光分量,颜色越量,所得值越大。在上面生成的你可能会觉得有些奇怪,木头不应该有这样强的高光,我们可以设置镜面光材质为vec3(0.0)来解决,但是又会出现一个新的问题,箱子一圈的钢圈本应该有高光的,设置完后会丢失高光,所以我们想让木头与钢圈显示不用的高光强度。漫反射贴图说白了就是之前所运用到的纹理,两者所用到的原理完全相同。
2023-01-25 14:03:39
203
原创 learnOpenGL笔记-材质
通过指定每一个分量的大小就可以控制表面的颜色输出,现在再多加上一项影响高光大小的反光度。reflcrtion材质向量设置的是表面上镜面高光的颜色(或者甚至可能反映一个特定表面的颜色)。环境光ambient一般来说都被设置为一个比较低的常数,因为环境光并不是主导作用,漫反射通常被设置为我们希望光所具有的颜色。目前,我们的光源都只设置了从白到灰再到黑范围内的颜色,这样只会改变各个分量的强度,而不是其真正的颜色。由于我们已经在片段着色器中定义了一个材质属性的结构体,所以在光照计算中我们改用结构体中的属性。
2023-01-12 15:11:46
149
原创 learnOpenGL笔记-基础光照
在世界坐标下进行所有的光照计算,而顶点数组中定义的是局部坐标下的位置,所以需要先将其在顶点着色器中转为世界坐标,即左乘模型矩阵即可。对于观察向量来说,我们可以通过观察者的世界坐标位置与片段位置相减来得到,计算出镜面反射光照强度,最后乘以光源的颜色,并将其与漫反射和环境光相加。而在此处我们不希望考虑的那么负复杂,所以会使用一个简化的全局光照模型,即环境光照。对于一个顶点的法线,我们可以根据顶点周围的点,每三个点确定一个平面,取各个平面的法线,最后将法线叠加在一起,形成该顶点的法线。
2023-01-11 21:26:32
368
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅