灯光 (1)平行光(Directional Light)

2023-11-11

1.平行光(Directional Light)

在这里插入图片描述

定义一个光线方向向量而不是位置向量来模拟一个定向光。着色器的计算基本保持不变,但这次我们将直接使用光的direction向量而不是通过position来计算lightDir向量。

struct Light {
    // vec3 position; // 使用定向光就不再需要了
    vec3 direction;

    vec3 ambient;
    vec3 diffuse;
    vec3 specular;
};
...
void main()
{
  vec3 lightDir = normalize(-light.direction);
  ...
}

step2. 定义十个不同的箱子位置,并对每个箱子都生成了一个不同的模型矩阵,每个模型矩阵都包含了对应的局部-世界坐标变换:

for(unsigned int i = 0; i < 10; i++)
{
    glm::mat4 model;
    model = glm::translate(model, cubePositions[i]);
    float angle = 20.0f * i;
    model = glm::rotate(model, glm::radians(angle), glm::vec3(1.0f, 0.3f, 0.5f));
    lightingShader.setMat4("model", model);

    glDrawArrays(GL_TRIANGLES, 0, 36);
}

step3. 定义光源的方向(注意我们将方向定义为从光源出发的方向,你可以很容易看到光的方向朝下)。

lightingShader.setVec3("light.direction", -0.2f, -1.0f, -0.3f);


if(lightVector.w == 0.0) // 注意浮点数据类型的误差
  // 执行定向光照计算
else if(lightVector.w == 1.0)
  // 根据光源的位置做光照计算 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

灯光 (1)平行光(Directional Light) 的相关文章

  • Vulkan-实践第一弹

    上一篇文章中 我们浅析了Vulkan对传统图形API的优势 主要就是在其性能和精细化操控GPU上 具体可参考Vulkan 性能及精细化 今天我们就来用个简单的例子 亲身感受下Vulkan的开发 魅力 include
  • 计算机图形学games101作业二 ---- 三角形光栅化 超采样抗锯齿 黑边处理

    games101作业二 三角形光栅化 超采样抗锯齿 黑边处理 本文是在学习计算机图形学时根据课程作业进行整理的笔记 有错误请指出 如果是同课程 请勿复制粘贴 谢谢 文章目录 CG homework1 0 本次作业 实现函数及简单描述 详细
  • 光照 (4) 镜面光贴图示例

    通过使用镜面光贴图我们可以可以对物体设置大量的细节 比如物体的哪些部分需要有闪闪发光的属性 我们甚至可以设置它们对应的强度 镜面光贴图能够在漫反射贴图之上给予我们更高一层的控制 step1 对镜面光贴图使用一个不同的纹理单元 见纹理 在渲染
  • Qt-OpenGL-03 纹理Texture

    写在开头 文章是基于纹理 LearnOpenGL CN 教程的学习记录 强烈建议在网站上先弄清楚原理再看此文章 以Qt GL窗口代替GLFW的写法 Qt库中一些类代替教程中的类 一起入坑 效果图 上图使用了两纹理混合 接下来是一些比较重要的
  • 2020年 IEEE VIS 科学可视化与体渲染论文整理与分析

    因为最近工作的关系 需要研究一下IEEE VIS中2017年以后的与我之前主要方向 体渲染 医学可视化 有关的论文 我把这些年全部的论文进行了筛选和梳理 总共筛选出57篇论文 打算写一个文章来记录这些内容 这个栏目是2020年的5篇论文的介
  • Unreal Engine(虚幻引擎)渲染 – 正确使用方法

    我们已经讨论过 Unreal Engine 虚幻引擎 中可用的很多神奇工具 包括最近抢先体验的 Unreal Engine 5 多亏了 Epic 世界各地的开发人员和团队都可以轻松进行游戏开发 Epic 对电影和游戏界的最大贡献可能就是 U
  • GAMES101回顾 -- Shading

    Shading 定义 将材质作用于对象的流程 Z Buffer 帧缓存 Frame Buffer Frame Buffer是一个用于存储图像像素数据的内存区域 它通常由一个二维数组表示 每个元素对应屏幕上的一个像素 Frame Buffer
  • 用云渲染好还是自己搭建传统渲染农场好?

    今天云渲染小编就和大家说说云渲染以及它和传统渲染农场的区别 以及用云渲染好还是自己搭建传统渲染农场好 一 什么是云渲染 云渲染什么意思 首先云渲染是一种依托于云计算的云端服务 用户将本地文件提交到云端服务器 云端计算机集群完成渲染 再将渲染
  • 关于OpenGL纹理尺寸的坑 - 图像行偏移,出现异色条纹

    学习OpenGL时想简单创建一个纹理 但马上就出现错误 错误效果如下 原图如下 由于之前没有碰过这种问题 费了好大一番功夫才找到问题所在 原始图片尺寸为210 220 OpenGL版本与教程一致 为3 3 把像素值打印出来观察之后发现 传入
  • OpenGL 入门 19:内建变量、接口块、Uniform缓冲

    一 内建变量 查询所有的内建变量的话 请查看OpenGL的wiki 顶点着色器 Input 变量名称 变量类型 变量语义 作用 gl VertexID int 索引 当使用glDrawElements 存储的是正在绘制顶点的当前索引 当使用
  • 3DMax 不断崩溃,常见的5种处理方案!

    Autodesk 3DS Max 是一种流行的 3D 建模和动画软件 被图形设计和游戏行业的许多专业人士使用 但是 与任何其他软件一样 用户会遇到崩溃问题 本文列出了 5种常见的解决方案 用于排除故障并解决 3DS Max 崩溃问题 Aut
  • OpenGL 7.测试框架,批渲染

    测试功能基类 本节搭建一个简单的测试框架 实现在窗口上显示一个菜单栏 点击不同的选项 进入不同的功能 附加目录中添加src 方便添加头文件 新建目录如下 测试基类 Test h 测试菜单TestMenu 用于管理所有的测试 pragma o
  • 计算机图形学GAMES101(十五)光线追踪(蒙特卡洛积分与路径追踪)

    本节涉及内容 蒙特卡罗积分 路径追踪 蒙特卡罗积分 蒙特卡罗积分的核心思想还是求一个不规则图形的面积 它的做法是 首先在a和b之间找一个值xi然后求f x 接着以f x 为高 ab为宽求矩形的面积 最后将所有的值求平均 当采样数量xi趋于无
  • 如何渲染精美3D PCB图

    简介 现在网上大部分PCB渲染方法都比较麻烦 并且会有丝印不清晰 或者走线与铜皮不显现问题 现在分享一种简单有效的PCB渲染方法 图为渲染效果图 工具或材料 AD keyshot 一个带3D封装图的PCB文件 具体步骤 1 AD端操作 在P
  • GAMES101 Lec 07~09:Shading 定义、着色模型、着色频率、图形渲染管线、纹理

    3dMax 导出一个模型文件包含内容 顶点坐标 法线 边的关系 model 模型 空间中有了一个摄像机 Model 通过变换可以让摄像机放在原点 View 三维空间的模型变换到屏幕上 Projection 通过采样进行光栅化 Rasteri
  • 图形学基础1

    坐标系相关 uv可能会影响局部坐标系 如果light图和brdf图做卷积的时候 局部坐标系保持一致很重要 如下图 tangent是从外部模型文件进行加载的 切线空间采样并转世界坐标系 spherical to cartesian in ta
  • OpenGL 入门 10:光源

    点光源 点光源的强度需要随着距离增加而减少 至于减少的系数公式大致如下 在这里d代表了片段距光源的距离 接下来为了计算衰减值 我们定义3个 可配置的 项 常数项Kc 一次项Kl和二次项Kq 常数项通常保持为1 0 它的主要作用是保证分母永远
  • Unity震撼首发,最新一代高清数字人短片《Enemies》

    我们屡获殊荣的 Demo 团队又一次在 异教徒 The Heretic 累积了超 400 万观众 的基础上取得了进展 推出了 Enemies 一支全新的电影式预告片 以 4K 分辨率的实时渲染来展示眼睛 头发和皮肤渲染等方面的重大突破 创建
  • Vulkan 绘制显示设计

    背景 众所周知 Vulkan是个跨平台的图形渲染API 为了友好地支持跨平台 Vulkan自然也抽象出了很多接口层去对接各个操作系统 抹平系统间的差异 Swap Chains即为WSI 其本质上是一种图像队列 此队列会按顺序依次将队列中的若
  • OSG中几何体的绘制(一)

    本章主要介绍一些几何体的绘制方法 绘制几何体在场景中是非常常见的 也是最基本的 在很多应用程序中可以看到相当复杂的场景 但不管场景有多复杂 它们都是由少数几个基本的图形元素构建而成的 只要想想达芬奇那些伟大的作品也是由铅笔和画刷所完成的 读

随机推荐

  • vue uniapp等动态添加类名

    1 对象形式 p 对象的形式 文字的颜色 p 2 对象形式 p 对象的形式 文字的颜色 p 3 三元表达式 p 三元表示式 文字的颜色 p 4 数组形式 p 数组的形式 文字的颜色 p 5 数组对象形式 p 数组中使用对象 文字的颜色 p
  • VSCode 搭建 STM32开发环境

    首先附上一张VS Code图 一直都喜欢这种 黑色主题感觉高大上 因为公司准备上市 所以不能使用Keil开发了 在这之前有在Linux上开发过STM32 于是想着在Windows上也搭建一个 这样方便跨平台 于是决定搭建一个用VSCode
  • 让你能进“大厂”的数据分析项目是长怎样?全套路线(建议收藏)

    算法 数据结构 全套路线 建议收藏 前言 所谓活到老 学到老 虽然我感觉自己已经学了很多算法了 但是昨天熬夜整理完以后发现 自己还是个弟弟 实在忍不住了 打算把 算法学习路线 发出来 我把整个算法学习的阶段总结成了五个步骤 分别为 基础语法
  • NLP模型笔记2022-09:hanlp所有预训练模型API接口使用

    目录 1 找出所有预训练模型 为后续训练模型准备 2 如何使用上述模型 2 1 以分词模型为案例 2 2 以分词 词性 实体识别 句法模型为统一的模型 参考文献 HanLP2 1支持包括简繁中英日俄法德在内的104种语言上的10种联合任务
  • Python安装报错:”ModuleNotFoundError:No module named _ctypes“ 的解决方案

    目录 第一步 下载安装包 第二步 执行安装 1 创建存放目录 2 运行脚本configure 3 make编译make install安装 4 最后运行make clean 第三步 创建软连接 总结安装过程 总结报错解决 第一步 下载安装包
  • 串口助手使用16进制发送数据

    目录 如何使用串口助手发送16进制数据 注意发送字节 连续发送 注意不要使用回车 如何使用串口助手发送16进制数据 错误示范 正确示范 注意发送字节 有些串口在16进制发送是必须这样 02 直接输入2发送不出去 如图 如何知道没有发送成功呢
  • MFC多线程各种线程用法 .

    一 问题的提出 编写一个耗时的单线程程序 新建一个基于对话框的应用程序SingleThread 在主对话框IDD SINGLETHREAD DIALOG添加一个按钮 ID为 IDC SLEEP SIX SECOND 标题为 延时6秒 添加按
  • Windows 7 下Maven的下载安装配置 (配置本地仓库及修改路径)

    环境 windows 7 64位 官网下载Maven 1 首先去官网 http maven apache org 进行下载 这里尽量不要选太高级的版本 选个稳定的版本就可以了 上面的两个箭头都可以进行选择 第一个箭头是代表最新的版本 这里我
  • 主存储器空间的分配和回收(原理及实现)

    内容 主存储器空间的分配和回收 目的 一个好的计算机系统不仅要有一个足够容量的 存取速度高的 稳定可靠的主存储器 而且要能合理地分配和使用这些存储空间 当用户提出申请存储器空间时 存储管理必须根据申请者的要求 按一定的策略分析主存空间的使用
  • 关于人脸识别的最全研究!

    来源 北京物联网智能技术应用协会 本文内容涵盖人脸识别发展历程 市场研究 核心技术 商业应用以及产业落地 个人看法等干货研究 注意 本文干货满满 约有2万7千字 强烈建议大家先收藏后学习 01 发展史 1 人脸识别的理解 人脸识别 Face
  • 面对多个offer,如何做选择?

    翻看了求职板块的很多内容 发现有很多应届毕业生面临着一个共性的问题 那就是同时面临多个offer时 该怎么选择 也是很纠结的一个问题 从一个生涯规划师的角度并结合个案咨询中的类似案例 提供几个视角 供有选择困惑的求职者做一些参考 希望对你们
  • G. Counting Graphs(并查集)

    Problem G Codeforces 给定一个由n个顶点组成的树 树是一个无圈的连通无向图 树的每条边都有它的权重wi 你的任务是计算满足以下四个条件的不同图形的数量 Plain Text 图形没有自环和多重边 图形的边上的权重是整数且
  • 输出三角形

    输入一个数 输出对应层数的三角形 m eval input for i in range 1 m 1 for x in range 1 m 1 i print end for j in range 1 2 i print end print
  • Flask快速入门与进阶

    欢迎来到Flask的世界 1 Flask介绍 Flask诞生于2010年 是Armin ronacher 用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架 Flask是一个使用 Python 编写的轻量级 We
  • error while loading shared libraries: libopencv_core.so.2.4: cannot open shared object file: No such

    如何解决error while loading shared libraries libopencv core so 2 4 cannot open shared object file No such file or directory
  • Python3.6下安装opencv

    opencv安装问题 1 首先你要有个python 安装Python环境后 推荐使用Anaconda 因为我3 6的python版本 在Anaconda环境下装的opencv 2 anaconda下自带有numpy等依赖包 你可以直接 pi
  • 走进Linux(一切皆文件)

    文章目录 悄悄来到Linux 进入Linux 已配置完毕 一切皆文件 常用的命令 根据实例来升级 文件 用户 进程 process 磁盘分区 disk 端口号 其他 悄悄来到Linux 在我们熟悉了Windows的骚操作以后 我们也可以尝试
  • Element UI 使用Tree组件设置节点勾选问题

    Element UI 使用Tree组件设置节点勾选问题 问题分析 1 设置 tree复选框 check strictly false 默认 父子关联 选中父级 勾选所有子选项 取消父级选中 同时取消子选项勾选 选中子选项 父选项变为半选中状
  • Java中的String的一些常用方法

    家人们好 目录 字符 字节与字符串 字符与字符串 获取指定位置的字符 字符串与字符数组的转换 给定字符串一个字符串 判断其是否全部由数字所组成 字节与字符串 实现字符串与字节数组的转换处理 字符串常见操作 字符串比较 不区分大小写比较 观察
  • 灯光 (1)平行光(Directional Light)

    1 平行光 Directional Light 定义一个光线方向向量而不是位置向量来模拟一个定向光 着色器的计算基本保持不变 但这次我们将直接使用光的direction向量而不是通过position来计算lightDir向量 struct