灯光 (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下多线程渲染设计

    1 Vulkan 视角下的多线程渲染 首先我们需要从vulkan api的顶层框架上来看一下 它在哪些地方可以让我们并行 Vulkan API的基本框架 Vulkan不同于Gles只有一个 不被API暴露出来的 单一链条的cmdbuffer
  • Vulkan入门精要

    Vulkan入门精要 fuxiii github io https fuxiii github io Essentials of Vulkan
  • 2020年 IEEE VIS 科学可视化与体渲染论文整理与分析

    因为最近工作的关系 需要研究一下IEEE VIS中2017年以后的与我之前主要方向 体渲染 医学可视化 有关的论文 我把这些年全部的论文进行了筛选和梳理 总共筛选出57篇论文 打算写一个文章来记录这些内容 这个栏目是2020年的5篇论文的介
  • 3DCAT携手华为,打造XR虚拟仿真实训实时云渲染解决方案

    2023年5月8日 9日 以 因聚而生 众志有为 为主题的 华为中国合作伙伴大会2023 在深圳国际会展中心隆重举行 本次大会汇聚了ICT产业界的广大新老伙伴朋友 共同探讨数字化转型的新机遇 共享数字化未来的新成果 华为中国合作伙伴大会20
  • Turbo跨平台开源渲染引擎

    Turbo跨平台开源渲染引擎 基于Vulkan开发的跨平台渲染引擎 欢迎来参观 使用 提意见 o o Turbo开源引擎地址 Turbo开源引擎开发记录视频
  • 计算机图形学:光线追踪原理(ray tracing)

    现实中的光学模型 在现实中 当关闭屏幕光亮的时候 会看到屏幕反射到的一张帅气或者漂亮的脸 那么这个看到的物体就是从屏幕中反射出来 其实不光镜子 任何物体都存在反射 发光源发出光线 通过物体反射到人的眼睛中 这里要提出另一个概念 就是图形光栅
  • 内推几何建模与图形渲染职位

    最近 可能也会是长期的 公司在大力招兵买马 急缺几何 图形方面的人才 初级 高级 专家或有致力于图形领域方面开发都欢迎 当然其他方面的也有 包括BIM相关的开发 可直接内推 具体职位列表如下 薪资open可谈 坐标 上海 深圳 武汉三地均可
  • BRDF详解(包括:irradiance,radiance,intensity,立体角)

    BRDF BRDF是双向反射分布函数 Bidirectional Reflectance Distribution Function BRDF 用来定义给定入射方向上的辐射照度 irradiance 如何影响给定出射方向上的辐射率 radi
  • WebGL笔记 (侧重理论基础向)

    要把Cesium three js 这些玩明白还是要有WebGL的知识的 不然只是官方demo的ctrl cv侠 本笔记参考的教程 2022年WebGL入门教程 完结 哔哩哔哩 bilibili 一 初级 二维 1 1 坐标系 WebGL的
  • 图形学/OpenGL/3D数学/Unity

    1 场景管理的数据结构 总结 游戏开发最常用的空间数据结构是四叉 八叉树和BVH树 而BSP树基本上只能应用于编辑器上 k d树则只能用在特殊问题应用场景 2 帧同步与状态同步 https gameinstitute qq com comm
  • 初识OpenGL (-)纹理过滤(Texture Filtering)

    1 OpenGL需要知道怎样将纹理像素 Texture Pixel 也叫Texel 映射到纹理坐标 纹理坐标 不依赖于分辨率 Resolution 它可以是任意浮点值 给模型顶点设置的那个数组 OpenGL以这个顶点的纹理坐标数据去查找纹理
  • 关于OpenGL纹理尺寸的坑 - 图像行偏移,出现异色条纹

    学习OpenGL时想简单创建一个纹理 但马上就出现错误 错误效果如下 原图如下 由于之前没有碰过这种问题 费了好大一番功夫才找到问题所在 原始图片尺寸为210 220 OpenGL版本与教程一致 为3 3 把像素值打印出来观察之后发现 传入
  • 【OpenGL】笔记二十二、面剔除

    1 流程 渲染一个立方体的时候 我们会对它的六个面的点先进行一遍深度测试 如果没有通过的话就是被遮挡了 就不着色 但是仔细想 一个立方体至少会有三个面被遮挡 我们明明知道这一点 却还是要对被遮挡的每个面上的点进行深度测试 这是不是有点浪费时
  • Dx11--用dx11绘制棱台,并用键盘和鼠标进行旋转缩放操作

    目录 一 索引缓冲区 前言 创建缓冲区 缓冲区的描述 二 常量缓冲区 前言 准备工作 正式初始化 画面更新及其效果 画面更新 效果 三 键盘和鼠标的创建 1 鼠标的创建 2 键盘的创建 3 更新画面 4 消息回调函数 处理键盘鼠标信息 效果
  • GLSL语言基础

    定义 GLSL释义叫做OpenGL着色器编程语言 是为图形计算量身定制的 它包含一些针对向量和矩阵操作的有用特性 变量名字 变量名称的命名规范与C语言相同 可以使用字母 数字 以及下划线来组成变量的名字 但数字不能作为变量名称的第一个字符
  • Vulkan-程序结构

    程序结构 一般来说 完整的Vulkan程序包含 创建Vulkan实例 获取物理设备列表创建逻辑设备 创建命令缓冲 获取设备中支持图形工作的队列 初始化交换链 创建深度缓冲 创建渲染通道 创建帧缓冲 创建绘制对象 初始化渲染管线 创建栅栏和初
  • mesa调试技巧

    技术关键字 mesa log系统 环境变量 目录 前言 一 gdb或vscode的断点调试 二 mesa log 系统的使用 总结 前言 软件调试技术是要求软件开发人员必备的一项技能 不同的问题具有不同的调试手段和方法 本文从mesa库的实
  • GAMES101: 现代计算机图形学入门(2)几何、光线追踪

    GAMES101 现代计算机图形学入门 链接 GAMES101 1 几何 1 1 几何的表示 隐式几何 通过一个函数表达式来表示的几何体 即 f x y z 0 优点 很容易判断一个点在不在几何体上 缺点 很难通过表达式看出几何体的形状 显
  • Shader学习笔记:BRDF简单概述

    这篇文章写于一年多以前的一次课程作业 这次作为一个 存货 给放出来 仅仅只是针对代码和一些要点进行简单叙述 如果想听完整的版本 请搜索毛星云大神的博客或者书籍 关于基本的物理渲染公式 网络上的博客和典籍已经多如牛毛了 这里只是自己在之前整理
  • 图形学基础1

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

随机推荐

  • 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