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.mzph.cn/news/153566.shtml

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

相关文章

最新外链系统强势来袭

1、支持微信短链(h5跳转二维码、小程序) 2、支持在线短链生成(长链接转短链) 3、支持活码生成 4、支持抖音卡片(抖音跳转微信二维码、小程序) 5、支持抖音二维码扫码跳转微信(二维码、h5、小程序…

关系数据库理论【数据库系统概论】

1.问题的提出 1.1关系模式的表示 关系模式由五部分组成,是一个五元组:R(U,D,DOM,F) 元组概念R关系名R是符号化的元组语义。UU为一组属性。比如学号,姓名。DD为属性组U中的属性所来自的域。比…

国学短剧《我是小影星》栏目火热开拍

近日,国学短剧《我是小影星》栏目花絮拍摄,在上海市徐汇区漕溪路595号A座B1层开拍。该节目招募全国各地的有才华,有表现力怀揣梦想的小朋友来参与节目拍摄。节目旨在以中华传统文化为切入点,通过戏剧、歌舞、音乐等多种艺术形式的…

opencv将32位深图片合成视频跳帧解决办法

在合成视频时候,大多数的图片都是24位深度的(即RGB三通道,一个通道8位),但是也存在少量的32位深的图片(RGBA,三个颜色通道加上A这个透明度通道),32位和24位的格式是不一样…

html页面直接使用elementui Plus时间线 + vue3

直接上效果图 案例源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"../js/vue3.3.8/vue.global.js"></script><link rel"styles…

chatGPT PLUS 绑卡提示信用卡被拒的解决办法

一、 ChatGPT Plus介绍 作为人工智能领域的一项重要革新&#xff0c;ChatGPT Plus的上线引起了众多用户的关注&#xff0c;其背后的OpenAI表现出傲娇的态度&#xff0c;被誉为下一个GTP 4.0。总的来说&#xff0c;ChatGPT Plus的火爆主要有两个原因。首先&#xff0c;其在人工…

PHP/Laravel通过经纬度计算距离获取附近商家

实际开发中,常常需要获取用户附近的商家,思路是 获取用户位置(经纬度信息)在数据库中查询在距离范围内的商家 注: 本文章内计算距离所使用地球半径统一为 6378.138 km public function mpa_list($latitude,$longitude,$distance){// $latitude 34.306465;// $longitude 10…

2019年计网408

第33题 OSI 参考模型的第 5 层&#xff08;自下而上&#xff09;完成的主要功能是()A. 差错控制B. 路由选择C. 会话管理D. 数据表示转换 本题考察开放系统互联参考模型的第五层完成的主要功能。开放系统互联参考模型是一个七层的体系结构。自下而上&#xff0c;依次是物理层、…

centos7 利用nc命令探测某个tcp端口是否在监听

脚本 # 安装nc yum install -y ncnc -vz 192.168.3.128 60001 if [ $? -eq 0 ]; thenecho "tcp succeed" elseecho "tcp failed" fi nc -vz 192.168.3.128 60001 探测192.168.3.128服务器上60001 tcp端口, -vz说明是探测TCP的 端口开启的情况 执行…

【工具与中间件】IDEA工具的使用:热部署、快捷键与版本控制

文章目录 0. 前言1. IDEA 配置热部署2. IDEA 常用快捷键3. IDEA 绑定GIT4. 小结 IDEA工具配置热部署&#xff0c;让我们的开发更有效率 0. 前言 以下是水文字&#xff0c;心急的读者可以直接阅读下面的章节。 有时&#xff0c;新&#xff0c;先进的东西确实可以给这个时代的…

隧道ip网络广播系统

隧道ip网络广播系统 隧道ip网络广播系统的优势有那些&#xff1f; 节省人力及维护成本&#xff1a;隧道ip网络广播系统可以自动播放节目&#xff0c;无需人工操作&#xff0c;节省了人力成本。定时广播&#xff0c;分区广播&#xff0c;全区广播&#xff0c;方便管理和简易化…

「Verilog学习笔记」实现3-8译码器①

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 分析 ① 本题要求根据38译码器的功能表实现该电路&#xff0c;同时要求采用基础逻辑门实现&#xff0c;那么就需要将功能表转换为逻辑表达式。 timescale 1ns/1nsmodule d…

企业降低成本方法有哪些?

企业的经营管理离开不两件事&#xff1a;提升营业额&#xff0c;降低成本。企业的发展壮大&#xff0c;离不开销售&#xff0c;按理说&#xff0c;营业额越高&#xff0c;企业的发展就越大&#xff1b;事实上&#xff0c;除了销售好&#xff0c;营业额高&#xff0c;还需重视一…

阿里云4核8G服务器优惠价格表,最低价格501.90元6个月、983.80元1年

阿里云4核8G服务器优惠价格表&#xff0c;云服务器ECS计算型c7实例4核8G配置3M带宽40GB ESSD云盘&#xff08;系统盘&#xff09;叠加使用优惠券后价格501.90元6个月、983.80元1年&#xff0c;现在购买经济型e、通用算力型u1、计算型c7和计算型c8a与c8i实例4核8G配置均有优惠&a…

5-Nacos环境搭建

本文介绍nacos集群环境的搭建。 1、基础环境 机器&#xff1a;mac&#xff0c;intel版本jdk&#xff1a;1.8数据库&#xff1a;mysql 8.029nacos&#xff1a;2.03 2、下载 nacos点击这里下载。 3、开始配置 这里搭建在自己机器上搭建两台nacos集群。下载完成后&#xff0…

MR混合现实教学系统在汽车检修与维护课堂教学中的应用

传统的汽车检修与维护课堂教学主要依赖教师口头讲解和黑板演示&#xff0c;这种方式存在一定的局限性。首先&#xff0c;对于一些复杂的机械结构和操作过程&#xff0c;教师难以生动形象地展示给学生。其次&#xff0c;学生无法直接观察到实际操作中的细节和注意事项&#xff0…

从字典到 CookieJar 的转换技巧

在使用requests库进行HTTP请求时&#xff0c;经常需要传递cookies参数来实现一些特定的功能&#xff0c;例如保持用户会话状态或者进行身份验证。 在HTTP请求中&#xff0c;Cookie是一种用来在客户端和服务器之间传递状态信息的方式&#xff0c;通常用于记录用户的身份验证信息…

透视maven打包编译正常,intellj idea编译失败问题的本质

前言 maven多模块类型的项目&#xff0c;在Java的中大型应用中非常常见&#xff0c; 在 module 很多的情况&#xff0c;经常会出现各种各样的编辑依赖错误问题&#xff0c;今天记录一种比较常见的 case &#xff1a; A 子模块依赖 B 子模块&#xff0c;在 Terminal 上终端上 …

迷你型洗衣机好用吗?内衣洗衣机便宜好用的牌子

随着科技的快速发展&#xff0c;现在的人们越来越注重自己的卫生问题&#xff0c;不仅在吃上面会注重卫生问题&#xff0c;在用的上面也会更加严格要求&#xff0c;而衣服做为我们最贴身的东西&#xff0c;我们对它的要求也会更加高&#xff0c;所以最近这几年较火爆的无疑是内…

机器学习第8天:SVM分类

文章目录 机器学习专栏 介绍 特征缩放 示例代码 硬间隔与软间隔分类 主要代码 代码解释 非线性SVM分类 结语 机器学习专栏 机器学习_Nowl的博客-CSDN博客 介绍 作用&#xff1a;判别种类 原理&#xff1a;找出一个决策边界&#xff0c;判断数据所处区域来识别种类 简单…