Threejs_07 环境、透明度、纹理、ao、光照等贴图的渲染

@老陈打码 继续学习老陈threejs 支持!!!!!!

下面用到的所有图片、资源、hdr文件都是@老陈打码的原资源

链接:https://pan.baidu.com/s/1WWWHgekCIH7OnjI7S_3ZtQ 
提取码:6666 

Threejs的背景如何设置呢,不能每天面对黑漆漆的屏幕吧。如何加载贴图呢,怎么把自己的图片放到屏幕中呢?

加载各种纹理贴图

在加载各种纹理贴图之前,我们需要有一个机器,用他来加载,相当于一个工具

// 创建纹理加载器
const textureLoader = new THREE.TextureLoader();

然后就开始我们的工作吧

1.做一个物料和基础的材质 这次我们用的是平板物料

// 物料
let planeGeometry = new THREE.PlaneGeometry(1, 1);
// 材质
let planeMaterial = new THREE.MeshBasicMaterial({color: 0xffffff,
});
let plane = new THREE.Mesh(planeGeometry, planeMaterial);
scene.add(plane);

 

2.首先 我们先要加载准备好的贴图 然后将纹理放入材质之中

//加载纹理
let texture = textureLoader.load("/public/texture/watercover/CityNewYork002_COL_VAR1_1K.png"
);let planeMaterial = new THREE.MeshBasicMaterial({color: 0xffffff,//纹理贴图map: texture,
});

效果立马就展示出来了。 

 

不过我们的图片其实是个圆形的,让他变成透明的。

let planeMaterial = new THREE.MeshBasicMaterial({color: 0xffffff,//纹理贴图map: texture,//允许透明transparent: true,
});

 

3.我们需要加载ao贴图(环境遮挡效果) 并放入材质

//加载AO纹理   ao = 环境遮挡效果
let aoMap = textureLoader.load("/public/texture/watercover/CityNewYork002_AO_1K.jpg"
);let planeMaterial = new THREE.MeshBasicMaterial({color: 0xffffff,//纹理贴图map: texture,//设置AOaoMap: aoMap,});

 这样好像看不出来我们想要的效果

我们可以加入一个gui调试开发工具 来进行调节,方便我们看到效果

gui.add(planeMaterial, "aoMapIntensity").min(0).max(1).name("ao贴图强度");

仔细看好像还是有效果的 

4. 我们继续加载透明度贴图 放入材质

// 加载透明度贴图
let alphaMap = textureLoader.load("/public/texture/door/height.jpg");// 材质
let planeMaterial = new THREE.MeshBasicMaterial({color: 0xffffff,//纹理贴图map: texture,//允许透明transparent: true,//设置AOaoMap: aoMap,//透明度贴图alphaMap: alphaMap,
});

 发现成了这个效果。因为我们放入的贴图就是一个矩形的样子  暂时先去掉吧。!!!

5.接着依次加入 光照贴图  高光贴图 一起放入材质之中

//加载光照贴图
let lightMap = textureLoader.load("/public/texture/colors.png");//加载高光贴图
let specularMap = textureLoader.load("/public/texture/watercover/CityNewYork002_GLOSS_1K.jpg"
);// 材质
let planeMaterial = new THREE.MeshBasicMaterial({color: 0xffffff,//纹理贴图map: texture,//允许透明transparent: true,//设置AOaoMap: aoMap,//透明度贴图// alphaMap: alphaMap,//光照贴图lightMap: lightMap,//反射强度(默认为1)// reflectivity: 0.1,//高光贴图specularMap: specularMap,
});

6.背景贴图的嵌入

背景地图一般都是hdr文件,我们需要先引入一个hdr加载器 并且实例化

//导入hdr加载器
import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader.js";// RGBELoader 实例化
let rgbLoader = new RGBELoader();

 7.加载hdr贴图 背景的设置需要在回调函数之中完成

// 加载hdr贴图
rgbLoader.load("/public/texture/Alex_Hart-Nature_Lab_Bones_2k.hdr",(envMap) => {//设置球形映射envMap.mapping = THREE.EquirectangularReflectionMapping;//设置环境纹理scene.background = envMap;//设置环境贴图(场景)scene.environment = envMap;//设置plane 环境贴图planeMaterial.envMap = envMap;}
);

这是我们场景的背景环境 直接用background、environment来实现。

这个时候,我们就给场景加入了一个环境,可以拖拽我们的鼠标进行背景的移动

 8.我们也可以使用gui调试开发工具,来动态的观察反射强度属性对做出来物料的影响

gui.add(planeMaterial, "reflectivity").min(0).max(1).name("反射强度");

 

 全部代码

//1.一个物体可以设置多个材质嘛//1.设置定点组
//2 多个//导入 threejs
import * as THREE from "three";
//导入轨道控制器
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
//导入lil.gui
// import * as dat from "dat.gui";  // 旧
import { GUI } from "three/examples/jsm/libs/lil-gui.module.min.js";//导入hdr加载器
import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader.js";// 创建场景
const scene = new THREE.Scene();
// 创建相机
const camera = new THREE.PerspectiveCamera(45, // 视角window.innerWidth / window.innerHeight, // 宽高比 窗口的宽高进行设置的0.1, // 近平面   相机最近最近能看到的物体1000 // 远平面   相机最远能看到的物体
);
// 创建渲染器
const renderer = new THREE.WebGLRenderer();
// 设置渲染器的大小  (窗口大小)
renderer.setSize(window.innerWidth, window.innerHeight);
// 将渲染器的dom元素添加到body中
document.body.appendChild(renderer.domElement);
camera.position.z = 5;
// 为了看到z轴
camera.position.y = 2;
// 设置x轴
camera.position.x = 2;
//设置相机的焦点 (相机看向哪个点)
camera.lookAt(0, 0, 0);//添加世界坐标辅助器  (红色x轴,绿色y轴,蓝色z轴)一个线段 参数为 线段长度
const axesHelper = new THREE.AxesHelper(5);
//添加到场景之中
scene.add(axesHelper);// 添加轨道控制器 (修改侦听位置)  一般监听画布的事件  不监听document.body
const controls = new OrbitControls(camera, renderer.domElement);
// 这里传递阻塞掉了 会导致无法点击
// const controls = new OrbitControls(camera, document.body);//渲染函数
function animate() {controls.update();//请求动画帧requestAnimationFrame(animate);//旋转网格体// cube.rotation.x += 0.01;// cube.rotation.y += 0.01;//渲染renderer.render(scene, camera);
}
animate();
//渲染// 监听窗口的变化 重新设置渲染器的大小 画布自适应窗口
window.addEventListener("resize", () => {// 重新设置渲染器的大小renderer.setSize(window.innerWidth, window.innerHeight);// 重新设置相机的宽高比camera.aspect = window.innerWidth / window.innerHeight;// 重新计算相机的投影矩阵camera.updateProjectionMatrix();
});//创建gui实例
const gui = new GUI();// 创建纹理加载器
const textureLoader = new THREE.TextureLoader();//加载纹理
let texture = textureLoader.load("/public/texture/watercover/CityNewYork002_COL_VAR1_1K.png"
);//加载AO纹理   ao = 环境遮挡效果
let aoMap = textureLoader.load("/public/texture/watercover/CityNewYork002_AO_1K.jpg"
);// 加载透明度贴图
let alphaMap = textureLoader.load("/public/texture/door/height.jpg");//加载光照贴图
let lightMap = textureLoader.load("/public/texture/colors.png");//加载高光贴图
let specularMap = textureLoader.load("/public/texture/watercover/CityNewYork002_GLOSS_1K.jpg"
);// RGBELoader 实例化
let rgbLoader = new RGBELoader();// 加载hdr贴图
rgbLoader.load("/public/texture/Alex_Hart-Nature_Lab_Bones_2k.hdr",(envMap) => {//设置球形映射envMap.mapping = THREE.EquirectangularReflectionMapping;//设置环境纹理scene.background = envMap;//设置环境贴图(场景)scene.environment = envMap;//设置plane 环境贴图planeMaterial.envMap = envMap;}
);// 物料
let planeGeometry = new THREE.PlaneGeometry(1, 1);
// 材质
let planeMaterial = new THREE.MeshBasicMaterial({color: 0xffffff,//纹理贴图map: texture,//允许透明transparent: true,//设置AOaoMap: aoMap,//透明度贴图// alphaMap: alphaMap,//光照贴图lightMap: lightMap,//反射强度(默认为1)// reflectivity: 0.1,//高光贴图specularMap: specularMap,
});
let plane = new THREE.Mesh(planeGeometry, planeMaterial);
scene.add(plane);gui.add(planeMaterial, "aoMapIntensity").min(0).max(1).name("ao贴图强度");
gui.add(planeMaterial, "reflectivity").min(0).max(1).name("反射强度");

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/202248.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink Operator 使用指南 之 Flink Operator安装

介绍 Flink Kubernetes Operator 充当控制平面来管理 Apache Flink 应用程序的完整部署生命周期。尽管 Flink 的Native Kubernetes 集成已经允许用户在运行的 Kubernetes(k8s) 集群上直接部署 Flink 应用程序,但自定义资源和Operator Pattern 也已成为 Kubernetes 原生部署体…

一篇五分生信临床模型预测文章代码复现——Figure 10.机制及肿瘤免疫浸润(六)

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

【必读】从零开始,一步步教你安装nginx,搭建个人博客网站!

nginx搭建个人网站 Nginx是一款轻量级Web服务器、反向代理服务器以及电子邮件代理服务器,并且具有高并发连接处理能力和低内存消耗的特点。它也可以用于负载均衡和缓存控制等功能。 功能: 静态网站服务器:Nginx可以用来作为静态网站服务器&am…

2022-1-25 机器人运动规划方法综述 航空学报

论文PDF abstract 随着应用场景的日益复杂,机器人对旨在生成无碰撞路径(轨迹)的自主运动规划技术的需求也变得更加迫 切。虽然目前已产生了大量适应于不同场景的规划算法,但如何妥善地对现有成果进行归类,并分析不同…

深入解析Java 8中HashMap的底层原理

引言 HashMap是Java中常用的集合类,用于存储键值对。其底层实现经过多次优化,包括哈希算法、数组扩容、链表转红黑树等。本文将深入研究HashMap的底层原理,并详细探讨如何解决哈希碰撞的技术。 1. 哈希算法 HashMap的核心是哈希算法&#…

arcgis中投影文件(.prj)和地理转换文件(.gtf)存储路径

1、投影文件(自定义的.prj)的存储路径 C:\Users\14635\AppData\Roaming\ESRI\Desktop10.5\ArcMap\Coordinate Systems 2、地理转换文件(.gtf)--自定义 C:\Users\14635\AppData\Roaming\ESRI\Desktop10.5\ArcToolbox\CustomTransfo…

【第二部分:结构】ARM Realm Management Monitor specification

目录 概念Realm概述Realm执行环境Realm寄存器Realm内存Realm处理器功能IMPDEF系统寄存器 Realm属性Realm活性Realm生命周期状态状态转换 Realm参数Realm描述符 颗粒Granule颗粒属性颗粒所有权颗粒生命周期状态状态转换颗粒抹除 Realm执行上下文概述REC属性REC指数和MPIDR值REC生…

SpringMVC 基础知识

学习目标 掌握基于 SpringMVC 获取请求参数与响应 json 数据操作熟练应用基于 REST 风格的请求路径设置与参数传递能够根据实际业务建立前后端开发通信协议并进行实现基于 SSM 整合技术开发任意业务模块功能 1 SpringMVC 简介 1.1 概述 1.1.1 web程序开发流程 【执行过程】…

服务器中了elbie勒索病毒解决办法,elbie勒索病毒解密数据恢复

科技技术的不断发展,为企业的生产运营提供了极大便利,但网络安全威胁也不断增加,近期云天数据恢复中心陆续接到很多企业的求助,企业的服务器中了elbie勒索病毒,导致系统瘫痪,所有业务无法正常开展&#xff…

关于用css设置input输入框hover的时候的样式以及当input为disabled的时候,不要让hover样式生效

效果如果&#xff1a; 编辑状态下的时候&#xff1a; 只读状态下的时候&#xff1a; 代码如图&#xff1a; <input type"text" name"dataForm.exportCode" id"exportCodeItem" required :disabled"editDisabled" />input:not(…

20230511 Windows Ubuntu vscode remote-ssh 连接配置

参考 &#xff1a; VSCode SSH 连接远程ubuntu Linux 主机 VSCode通过Remote SSH扩展连接到内网Ubuntu主机 Ubuntu 安装 sudo apt-get install openssh-server vscode: 安装remote-ssh 插件 连接到服务器IP 免密登录的公钥密钥传递用filezillaUbuntu 和 Windows 文件互传 …

PostgreSQL (Hologres) 日期生成

PostgreSQL 生成指定日期下一个月的日期 &#xff08;在Hologres中&#xff0c;不支持递归查询&#xff09; SELECTto_char(T, YYYYMMDD)::int4 AS date_int,date(T) AS date_str,date_part(year, T)::int4 AS year_int,date_part(month, T)::int4 AS month_int,date_part(da…

【DevOps】Git 图文详解(八):后悔药 - 撤销变更

Git 图文详解&#xff08;八&#xff09;&#xff1a;后悔药 - 撤销变更 1.后悔指令 &#x1f525;2.回退版本 reset3.撤销提交 revert4.checkout / reset / revert 总结 发现写错了要回退怎么办&#xff1f;看看下面几种后悔指令吧&#xff01; ❓ 还没提交的怎么撤销&#x…

uniapp 打包后各静态资源加载失败的问题(背景图,字体等)

原因: 1.部署地址不在域名根目录下 解决办法(推荐办法2): 办法1.如果部署在域名的文件夹下(例如h5), 则运行的基础路径修改为/h5/ 且注意路由模式 办法2.不修改运行的基础路径(还是./), 将代码中涉及背景图(background-image)和字体资源的路径前统一加,如图:

2014年10月6日 Go生态洞察:Go在Google I/O和Gopher SummerFest的应用

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

【产品安全平台】上海道宁与Cybellum将整个产品安全工作流程整合到一个专用平台中,保持构建的互联产品的网络安全和网络合规性

Cybellum将 整个产品安全工作流程 整合到一个专用平台中 使设备制造商能够 保持他们构建的互联产品的 网络安全和网络合规性 产品安全性对 每个人来说都不一样 每个行业的系统、工作流程和 法规都存在根本差异 因此&#xff0c;Cybellum量身定制了 Cybellum的平台和技…

【开源】基于Vue和SpringBoot的创意工坊双创管理系统

项目编号&#xff1a; S 049 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S049&#xff0c;文末获取源码。} 项目编号&#xff1a;S049&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员端2.2 Web 端2.3 移动端 三、…

一张图,了解美格智能高算力AI模组

美格智能高算力A模组&#xff0c;澎湃算力让AI触手可及&#xff01;

ElementPlusError: [ElOnlyChild] no valid child node found

突然发现页面报了一堆黄色的错误提示 查了下原来是这里导致的&#xff0c;只需要把v-if 挪到popover那层即可 解决

用好语言模型:temperature、top-p等核心参数解析

编者按&#xff1a;我们如何才能更好地控制大模型的输出? 本文将介绍几个关键参数&#xff0c;帮助读者更好地理解和运用 temperature、top-p、top-k、frequency penalty 和 presence penalty 等常见参数&#xff0c;以优化语言模型的生成效果。 文章详细解释了这些参数的作用…