当前位置: 首页 > article >正文

【Threejs】从零开始(八)--贴图

一、创建一个基本的平面

不懂的地方可以看前面的进行回顾

// 导入three
import * as THREE from 'three'  // 导入threejs
//导入轨道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'

// 创建场景
const scene = new THREE.Scene()

// 创建相机
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)
camera.position.z = 3

// 创建渲染器
const renderer = new THREE.WebGLRenderer()
renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(renderer.domElement)

//辅助坐标系
const axesHelper = new THREE.AxesHelper(5)
scene.add(axesHelper)

// 创建控制器
const controls = new OrbitControls(camera, renderer.domElement)

//自适应窗口
window.addEventListener('resize', () => {
    camera.aspect = window.innerWidth / window.innerHeight
    camera.updateProjectionMatrix()
    renderer.setSize(window.innerWidth, window.innerHeight)
})

// 创建平面
const PlaneGe = new THREE.PlaneGeometry(1, 1)
const material = new THREE.MeshBasicMaterial({ 
    color: 0xffffff ,
    side: THREE.DoubleSide, 

})
const plane = new THREE.Mesh(PlaneGe, material)
scene.add(plane)

// 渲染循环
function animate() {
    requestAnimationFrame(animate)
    renderer.render(scene, camera)
}
animate()

这样会得到一个平面

二、给平面添加贴图

1.创建贴图

// 创建贴图
const textureLoader = new THREE.TextureLoader()
const map = textureLoader.load('./assets/1.png')

2.使用贴图(在创建材质时添加map属性)

const material = new THREE.MeshBasicMaterial({ 
    color: 0xffffff ,
    side: THREE.DoubleSide, 
    map: map,

})

这样可以将我们想要的图片贴到我们的物体上面。

三、设置全景贴图

1.导入hdr加载器

// 导入hdr加载器
import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader'

2.创建全景贴图

// 全景贴图
const rgbeLoader = new RGBELoader()
rgbeLoader.load('./assets/night.hdr', (texture) => {
    //设置球型映射
    texture.mapping = THREE.EquirectangularReflectionMapping 
    scene.background = texture // 设置背景
    scene.environment = texture  // 设置环境
    //反射贴图
    material.envMap = texture
})

这样我们就得到了类似3d空间的效果。

当然还有更多贴图效果,这里仅简单介绍使用。


http://www.kler.cn/a/445252.html

相关文章:

  • springboot453工资信息管理系统(论文+源码)_kaic
  • 华为云计算HCIE笔记01
  • 王佩丰24节Excel学习笔记——第十二讲:match + index
  • Linux环境下 搭建ELk项目 -单机版练习
  • 架构信息收集(小迪网络安全笔记~
  • Qlib安装成功步骤和测试是否成功
  • list的常用操作
  • SQL server学习08-使用索引和视图优化查询
  • 使用Python开发高级游戏:创建一个3D射击游戏
  • C# OpenCV机器视觉:边缘检测
  • AI、大数据、机器学习、深度学习、神经网络之间的关系
  • 视频及JSON数据的导出并压缩
  • 数据库高可用性与容灾
  • 【k8s集群应用】kubeadm1.20(单master)
  • 电脑玩《刺客信条》时中,遇到找不到d3dx9_42.dll的问题是什么原因?缺失d3dx9_42.dll应该怎么解决呢?下面一起来看看吧!
  • 如何用细节提升用户体验?
  • 第33天:安全开发-JavaEE应用SQL预编译Filter过滤器Listener监听器访问控制
  • 配置flutter 解决andriod studio报错 no device selected
  • 揭秘语言模型后训练:指令微调、偏好调优与强化学习的深度解析
  • AdminJS - 现代化的 Node.js 管理面板框架详解
  • 【系统架构设计师】真题论文: 论数据分片技术及其应用(包括解题思路和素材)
  • 在THREEJS中加载3dtile模型
  • Mysql索引类型总结
  • 【华为OD-E卷-开心消消乐 100分(python、java、c++、js、c)】
  • 【软件开发】做出技术决策
  • 2024.2 ACM Explainability for Large Language Models: A Survey