光照 (4) 镜面光贴图示例

2023-10-29

通过使用镜面光贴图我们可以可以对物体设置大量的细节,比如物体的哪些部分需要有闪闪发光的属性,我们甚至可以设置它们对应的强度。镜面光贴图能够在漫反射贴图之上给予我们更高一层的控制。

step1. 对镜面光贴图使用一个不同的纹理单元(见纹理),在渲染之前先把它绑定到合适的纹理单元上:

lightingShader.setInt("material.specular", 1);
...
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, specularMap);

step2. 更新片段着色器的材质属性,让其接受一个sampler2D而不是vec3作为镜面光分量:

struct Material {
    sampler2D diffuse;
    sampler2D specular;
    float     shininess;
};

step3. 采样镜面光贴图,来获取片段所对应的镜面光强度:

vec3 ambient  = light.ambient  * vec3(texture(material.diffuse, TexCoords));
vec3 diffuse  = light.diffuse  * diff * vec3(texture(material.diffuse, TexCoords));  
vec3 specular = light.specular * spec * vec3(texture(material.specular, TexCoords));
FragColor = vec4(ambient + diffuse + specular, 1.0);

在这里插入图片描述

也可以在镜面光贴图中使用真正的颜色,不仅设置每个片段的镜面光强度,还设置了镜面高光的颜色。从现实角度来说,镜面高光的颜色大部分(甚至全部)都是由光源本身所决定的,所以这样并不能生成非常真实的视觉效果(这也是为什么图像通常是黑白的,我们只关心强度)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

光照 (4) 镜面光贴图示例 的相关文章

  • 如何减少项目在Corona和V-Ray中的3ds Max渲染时间?

    相信在大多 3D 项目里 渲染是最耗费时间的部分 它不仅是建模和纹理化 3D 场景的过程 而是需要利用硬件来完成任务 我们在配备独立GPU和带有2到4个强大内核的CPU的中档计算机上 可以将3ds Max中创建和处理的项目轻松渲染完成 因为
  • 【CocosCreator入门】CocosCreator组件

    Cocos Creator是一款流行的游戏开发引擎 具有丰富的组件和工具 其中TiledMap组件可以帮助开发者快速创建 加载和渲染地图 目录 一 组件介绍 二 组件属性 三 脚本控制 3 1加载地图 3 2渲染地图 四 详细说明 五 关闭
  • Qt-OpenGL-03 纹理Texture

    写在开头 文章是基于纹理 LearnOpenGL CN 教程的学习记录 强烈建议在网站上先弄清楚原理再看此文章 以Qt GL窗口代替GLFW的写法 Qt库中一些类代替教程中的类 一起入坑 效果图 上图使用了两纹理混合 接下来是一些比较重要的
  • PRT(Precomputed Radiance Transfer【2002】)原理实现

    声明 本文源自对Games202课程 作业2的总结 参考 手把手教你写GAMES202作业 GAMES202 作业2 Precomputed Radiance Transfer 球谐函数 GAMES 202 作业2 Games202课程 个
  • Vulkan入门精要

    Vulkan入门精要 fuxiii github io https fuxiii github io Essentials of Vulkan
  • OpenGL之Shader编程入门

    1 shader 编程基础 1 1 Vertex shader与Fragment shader Vertex shader即顶点着色器 用来改变顶点的属性 Fragment shader即片元着色器 用来改变片元的颜色 在Direct3D中
  • 光照 (5) 光照贴图

    物体在不同的部件上都有不同的材质属性 1 1 漫反射 允许我们对物体的漫反射分量 以及间接地对环境光分量 它们几乎总是一样的 和镜面光分量有着更精确的控制 漫反射贴图 Diffuse Map 使用一张覆盖物体的图像 让我们能够逐片段索引其独
  • 次表面散射

    技术博客 https github com Li ZhuoHang Subsurface scattering 基于屏幕空间模糊的次表面散射 SSSSS 效果展示 原模型 开启镜面表面反射 float PHBeckmann float nd
  • 【论文精读】NeRF详解

    最近阅读了开启三维重建新纪元的经典文章 NeRF Representing Scenes as Neural Radiance Fields for View Synthesis 接下来会 更新NeRF系列的论文精读 代码详解 力求做到全网
  • Turbo跨平台开源渲染引擎

    Turbo跨平台开源渲染引擎 基于Vulkan开发的跨平台渲染引擎 欢迎来参观 使用 提意见 o o Turbo开源引擎地址 Turbo开源引擎开发记录视频
  • 内推几何建模与图形渲染职位

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

    要把Cesium three js 这些玩明白还是要有WebGL的知识的 不然只是官方demo的ctrl cv侠 本笔记参考的教程 2022年WebGL入门教程 完结 哔哩哔哩 bilibili 一 初级 二维 1 1 坐标系 WebGL的
  • 如何有效使用渲染农场?防止渲染出错的7个方法!

    如何使用渲染农场 又如何有效地使用渲染农场 使用云渲染农场时出错怎么办 众所周知我们可以在任意的笔记本或者终端PC上面来创作 3ds Max 场景 但是实际渲染是这样吗 其实不然 这其中的差距不是一星半点 只能说很可能会有两种不同的呈现 而
  • 灯光 (1)平行光(Directional Light)

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

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

    0 我们已经学了什么 What We ve Covered So Far 空间中定义了一个摄像机 通过某些变换使模型摆好姿势 Model 通过观测变换让摄像机放在原点 得到标准的 1 1
  • DirectX12 3D游戏开发实践(龙书)第四章 Direct3D的初始化

    目录 Direct3D的初始化 预备知识 Direct3D概述 组件对象模型 纹理格式 Textures Formats 交换链和页面翻转 深度缓冲 资源与描述符 多重采样技术的原理 利用Direct3D进行多重采样 功能级别 Direct
  • Qt中使用OpenGL渲染视频

    Qt5 4之后 OpenGL在Qt中可以通过QOpenGLWidget和QOpenGLFunctions来实现 以下Demo 只展示OpenGL相关部分 解码出AVFrame后对其进行渲染 顶点Shader static const cha
  • GPU 渲染管线与着色器 大白话总结 ---- 一篇就够

    转载自 https blog csdn net newchenxf article details 119803489 真的写的非常不错 大力推荐 GPU 渲染管线与着色器 大白话总结 一篇就够 文章目录 GPU 渲染管线与着色器 大白话总
  • OSG中几何体的绘制(一)

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

随机推荐

  • 不用nvm切换node版本,用volta管理node版本

    1 什么是volta 2 volta是一个node js的版本管理工具 你的电脑上安装了很多个node版本 volta可以让你在不同的项目中使用不同版本的node js 并且可以切换node js版本 3 volta是一个安装包 安装在电脑
  • python日志的使用

    一 日志的使用 import logging 创建一个记录器对象 logger logging getLogger 设置日志级别 logger setLevel logging INFO 设置日志的保存路径 logfile path dat
  • HDS USP存储培训简明笔记

    名词解释 DKU 扩展柜 DKC 控制柜 DKA 后端端口 CHA 前端端口 CSW 交换卡 SVP 内置服务PC 另一个含义是服务程序 与Storage Navigator功能一致 CM Cache Memory数据内存 SM Share
  • 如何提交代码到github

    要提交代码到GitHub 可以按照以下步骤进行操作 首先 确保你已经在本地对代码做了相应的修改和更改 打开命令行终端或者使用Git图形用户界面 如GitHub Desktop 导航到你的项目目录 可以使用命令查看修改情况 git statu
  • JDK8新特性详解Lambda、StreamAPI、Optional等

    JDK8学习笔记 学习视频地址 https www bilibili com video BV1k64y1R7sA 操作代码 https gitee com rederic study jdk8 git 一 JDK8新特性 1 Lambda
  • 会linux基本命令是脚本语言吗,shell脚本语言与linux命令的联系与区别

    使用linux肯定是要会使用命令的 就算提供有用户界面 绝大部分功能还是要通过命令行去操作的 而shell脚本语言也是运行在linux上的脚本语言 对于服务器运维人员也是几乎必须要掌握的 而shell脚本语言和linux命令有什么联系 有什
  • 毕设——代码5中Keras TensorFlow配置

    问题 pip安装成功两个包后 cmd窗口进行python的import包操作正常 返回到pycharm环境中仍然报错ModuleNotFoundError No module named sklearn datasets 解决办法 step
  • Python基础知识学习:从零到100

    Python基础知识学习 从零到100 基础知识 1 变量 2 控制流 条件语句 3 循环 迭代器 4 列表 集合 数组 数据结构 5 字典 键值数据结构 6 迭代 遍历数据结构 7 类和对象 8 Python 面向对象编程模式 开启 9
  • ubuntu16.04 安装多版本cuda(原10.0,新安装10.1),实现任意切换

    TOC ubuntu16 04 安装多版本cuda 原10 0 新安装10 1 实现任意切换 前言 需求 单位需要使用yolo v5训练模型 可所需的pytorch对cuda的依赖版本较高 而仅仅安装单个高版本的cuda又会与原先的项目产生
  • 面试经典(14)--二叉树镜像

    题目描述 输入一个二叉树 输出该二叉树的镜像 分析与解法 使用先序遍历方式 如果节点是非叶子节点 就交换左子树和右子树指针 注意退出条件即可 掌握前序遍历这个题目解这道题目难度不大 代码如下 struct Node Node m pLeft
  • IMX6学习记录(17)-编译官方SDK,制作镜像,DD烧录

    上面是我的微信和QQ群 欢迎新朋友的加入 1 下载 地址 https www nxp com cn products processors and microcontrollers arm processors i mx applicati
  • 数据分析回头看2——重复值检查/元素替换/异常值筛选

    0 前言 这部分内容是对Pandas的回顾 同时也是对Pandas处理异常数据的一些技巧的总结 不一定全面 只是自己在数据处理当中遇到的问题进行的总结 1 当数据中有重复行的时候需要检测重复行 方法 使用pandas中的duplicated
  • 提高Python编程效率的十个技巧

    1 模块化编程 将代码拆分为模块和函数 提高可重用性和可维护性 合理组织代码 使其易于阅读和理解 2 利用Python标准库 Python标准库提供了众多功能强大的模块和工具 如os re和datetime等 熟悉并善于使用标准库可以加快开
  • PAT C入门题目-7-30 念数字 (15 分)(关于string.h头文件)

    7 30 念数字 15 分 输入一个整数 输出每个数字对应的拼音 当整数为负数时 先输出fu字 十个数字对应的拼音如下 0 ling 1 yi 2 er 3 san 4 si 5 wu 6 liu 7 qi 8 ba 9 jiu 输入格式
  • linux -- 命令行中大于号、小于号的用法

    语法 命令 lt 文件 这是将文件作为命令输入 命令 lt 文件1 gt 文件2 将文件1输入到命令中 然后将结果输出到文件2中
  • tensorflow各版本下载地址

    https pypi org project tensorflow gpu 1 13 0 files 把13改对你想要的版本 转载于 https www cnblogs com xpylovely p 11609250 html
  • 2022 re:Invent 凌云驭势 重塑未来

    2022年11月29日 一年一度的亚马逊 re Invent全球大会在拉斯维加斯再度上演 这是亚马逊云科技第11年举办re Invent 来自全球的5万多客户和合作伙伴参加了此次线下盛会 还有超过30万人线上参会 在此次大会上 亚马逊云科技
  • 埃斯顿服务器上电无显示,埃斯顿伺服常见现象报警及排除

    用户在试用埃斯顿伺服电机时可能会遇见以下的问题 在此我整理一下 希望能帮助到大家 一 过载报警A04 1 伺服电机的配线有误或配线有漏 1 电机U V W相线接错 2 伺服电机侧连接器的插入是否不良 2 伺服驱动器与电机的型号不匹配 检查驱
  • Android 内存泄漏的原因以及解决方案

    内存泄漏是什么 内存泄漏即 ML Memory Leak 指 程序在申请内存后 当该内存不需再使用 但 却无法被释放 归还给 程序的现象 内存泄漏的原因以及解决方案 内存泄漏的原因归根到底就是当需要被回收变量的内存被其他变量引用持有 导致内
  • 光照 (4) 镜面光贴图示例

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