threejs-基础材质设置

news2024/12/23 0:48:54

一、介绍

主要内容:基础材质(贴图、高光、透明、环境、光照、环境遮蔽贴图)

主要属性:

          side: three.DoubleSide, //设置双面

          color: 0xffffff, //颜色

          map: texture, //纹理

          transparent: true, // 透明度

          aoMap: aoTexture, //ao贴图

          aoMapIntensity: 1, //ao贴图强调

          alphaMap:alphaMap, //透明度贴图

          lightMap:lightMap,//光照贴图

          reflectivity: 1, //设置反射强度

          specularMap: specularMap //设置高光贴图

二、展示

1、效果

2、代码
// 导入threejs文件
import * as three from 'three'
// 导入轨道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
// 导入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)
document.body.appendChild(renderer.domElement)

//创建纹理加载器
const textureLoader = new three.TextureLoader()
// 加载纹理
let texture = textureLoader.load('./textureImage/southeast.jpg')
//设置颜色空间
texture.colorSpace = three.SRGBColorSpace
//设置线性空间(默认值)
// texture.colorSpace = three.LinearSRGBColorSpace
// 加载ao贴图(环境遮挡贴图)
let aoTexture = textureLoader.load('./textureImage/southeastAO.jpg')
// 加载透明度贴图
let alphaMap = textureLoader.load('./textureImage/tmd.png')
// 加载光照贴图
let lightMap = textureLoader.load('./textureImage/ysbd.jpg')
// 加载hdr贴图
let hdrLoader = new RGBELoader()
let envMap = hdrLoader.load('./textureImage/pz.hdr', (envMap) => {
  // 设置球形映射
  envMap.mapping = three.EquirectangularReflectionMapping
  // 设置环境贴图
  scene.background = envMap
  // 设置环境贴图
  scene.environment = envMap
  // 设置plane的环境贴图
  material.envMap = envMap
})
// 设置高光贴图
let specularMap = textureLoader.load('./textureImage/southeast.jpg')

// 创建几何体
const geomentry = new three.PlaneGeometry(1, 1)
// 创建材质
const material = new three.MeshBasicMaterial({
  side: three.DoubleSide, //双面
  color: 0xffffff, //颜色
  map: texture, //纹理
  transparent: true, // 透明度
  aoMap: aoTexture, //ao贴图
  aoMapIntensity: 1, //ao贴图强调
  // alphaMap:alphaMap, //透明度贴图
  // lightMap:lightMap,//光照贴图
  reflectivity: 1, //设置反射强度
  specularMap: specularMap //设置高光贴图
})
let gui = new GUI()
gui.add(material, 'aoMapIntensity').min(0).max(1).name('ao贴图强调')
gui
  .add(texture, 'colorSpace', {
    sRGB: three.SRGBColorSpace,
    Linear: three.LinearSRGBColorSpace
  })
  .onChange(() => {
    texture.needsUpdate = true //设置颜色空间的纹理需要进行更新
  })
// 创建网格
const cube = new three.Mesh(geomentry, material)
// 加入场景
scene.add(cube)
// 相机位置
camera.position.z = 5 //设置在z轴位置
// 看向位置
camera.lookAt(0, 0, 0) //看向原点
// 创建轨道控制器
const controls = new OrbitControls(camera, renderer.domElement)
controls.enableDamping = true // 启用阻尼系数:值越大,阻尼越明显
controls.dampingFactor = 0.5 //设置阻尼值
controls.enableZoom = true // 启用缩放:值为false时禁止缩放
// controls.autoRotate = true // 启用自动旋转:值为true时禁止手动旋转
controls.autoRotateSpeed = 0.5 // 自动旋转速度
// 渲染函数
const animate = () => {
  controls.update()
  requestAnimationFrame(animate) //每一帧调用函数
  // 旋转
  // cube.rotation.x += 0.01 // X轴转
  // cube.rotation.y += 0.01 // Y轴转
  renderer.render(scene, camera) // 重新渲染
}
animate()

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

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

相关文章

JAVA海外短剧国际版系统小程序源码

海外短剧国际版系统——连接世界的剧情舞台 🌍 引言:跨越国界的情感共鸣 在这个全球化的时代,文化的边界越来越模糊,而艺术成为了连接不同国家和地区人民心灵的桥梁。今天,我要向大家介绍一个令人兴奋的平台——“海…

【必看!!!】Python—requests模块详解!(文末附带无偿大礼包)

1、模块说明 requests是使用Apache2 licensed 许可证的HTTP库。 用python编写。 比urllib2模块更简洁。 Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POS…

Word页眉内容自动填充为章节标题

Word页眉内容自动填充为章节标题 在写毕业论文的过程中,通常要求将页眉设置为章节标题,例如这样 通常,页眉内容我们都是手敲上去的,其实在Word中可以设置为自动引用章节标题,以下为设置方法,仅供参考&…

2024互联网下载神器IDM6.42你值得拥有

🔥 互联网下载神器大揭秘!IDM6.42你值得拥有 🚀 Hey,各位小伙伴们,今天我要给你们安利一款我超爱的软件——Internet Download Manager 6.42(简称IDM),这款下载器简直就是下载界的“…

HarmonyOS NEXT应用元服务开发按钮标注场景

对于用户可点击等操作的任何按钮,如果不是文本类控件,则须通过给出标注信息,包括用户自定义的控件中的虚拟按钮区域,否则可能会导致屏幕朗读用户无法完成对应的功能。 此类控件在进行标注时,标注文本不要包含控件类型、…

视频格式不支持播放怎么办?几招教你转换成mp4格式

视频已成为我们生活中不可或缺的一部分,无论是学习、娱乐还是工作交流,视频都扮演着重要角色。然而,在享受视频带来的便利时,我们时常会遇到一个令人头疼的问题——视频格式不支持播放。不同设备、平台和软件对视频格式的支持各不…

推荐一个物联网平台,支持源代码交付

ThingsKit物联网平台概述: ThingsKit是一个开箱即用的物联网平台,它支持通过行业标准的物联网协议(如MQTT、TCP、UDP、CoAP和HTTP)实现设备连接。这个平台能够帮助用户快速实现物联网的数据收集、分析处理、可视化和设备管理&…

『网络游戏』服务器向客户端分发消息【21】

新建缓存层文件夹 创建脚本:CacheSvc 编写服务器脚本:CacheSvc 修改服务器脚本:LoginSys.cs 修改服务器脚本:PEProtocol.cs 服务器编写完成 - 测试运行服务端 修改客户端脚本:NetSvc.cs 修改客户端脚本:Cli…

跟《经济学人》学英文:2024年10月05日这期 Workouts for the face are a growing business

Workouts for the face are a growing business They may not help much in the quest for eternal youth 原文: The FaceGym studio in central London looks more like a hair salon than a fitness studio. Customers recline on chairs while staff pummel t…

路径跟踪之导航向量场——二维导航向量场

今天带来一期轨迹跟踪算法的讲解,首先讲解二维平面中的导航向量场[1]。该方法具有轻量化、计算简便、收敛性强等多项优点。该方法根据期望的轨迹函数,计算全局位置的期望飞行向量,将期望飞行向量转为偏光角,输入底层控制器&#x…

gpg 密钥生成、导入、导出、自动输入密码

目录 一、系统环境 二、常用命令(以签名密钥为例) (1)生成密钥 (2)列出私钥 (3)列出公钥 (4)导出公钥 (5)导出私钥 &#xff…

5个免费ppt模板网站推荐!轻松搞定职场ppt制作!

每次过完小长假,可以明显地感觉到,2024这一年很快又要结束了,不知此刻的你有何感想呢?是满载而归,还是准备着手制作年终总结ppt或年度汇报ppt呢? 每当说到制作ppt,很多人的第一反应&#xff0c…

k8s 1.28.2 集群部署 MinIO 分布式存储

文章目录 [toc]MinIO 介绍MinIO 生产硬件要求MinIO 存储要求MinIO 内存要求MinIO 网络要求MinIO 部署架构分布式 MinIO复制的 MinIO 部署 MinIO创建目录节点打标签创建 namespace创建 pv创建 MinIO配置 ingress问题记录通过代理服务器访问 MinIO 的 Object Browser 界面一直显示…

51单片机的智能衣柜【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块光照传感器时钟模块温湿度传感器继电器按键、LED等模块构成。适用于智能衣柜、智能衣橱、紫外线定时消毒等相似项目。 可实现功能: 1、LCD1602实时显示北京时间、温湿度和开关门状态 2、时钟模块DS1302采集时间 …

实战逆向RUST语言程序

实战为主,近日2024年羊城杯出了一道Rust编写的题目,这里将会以此题目为例,演示Rust逆向该如何去做。 题目名称:sedRust_happyVm 题目内容:unhappy rust, happy vm 关于Rust逆向,其实就是看汇编&#xff…

制造业人工智能的场景应用落地现状、难点和建议

制造业应用人工智能可以提高制造业的生产效率,推动制造业高质量发展和竞争力提升,促进国民经济的持续稳定增长。近年来,制造业人工智能的场景化应用落地不断推进,但在落地过程中遇到一些难点。本文对于制造企业应用人工智能的场景…

AVL树如何维持平衡

1.AVL树的特性 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查 找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii 和E.M.Landis在1962年 发明了一种…

【工具使用】使用Docsify搭建个人文档网站

检查Node.js安装状态 首先,打开命令提示符(CMD),输入以下命令以验证Node.js是否已经安装在您的电脑上: node -v安装Docsify CLI工具 接下来,通过以下命令全局安装Docsify的命令行工具: npm …

保护企业知识产权!推荐十款源代码加密软件

在现代软件开发中,源代码是企业最重要的资产之一。然而,源代码的泄露可能导致巨大的经济损失和知识产权问题。为帮助企业保护其源代码安全,以下推荐十种源代码加密软件,确保你的知识产权不受侵犯。 1. Ping32 Ping32不仅是一款终…

Biomamba求职| 国奖+4篇一作SCI

转眼间我也要参加秋招啦,认真的求职帖,各位老师/老板欢迎联系~其它需要求职的小伙伴也欢迎把简历发给我们,大家一起找工作。 一、基本信息 姓名:Biomamba 性别:男 出厂年份:1998 籍贯:浙江…