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

THREE.js 入门(六) 纹理、uv坐标

一、uv坐标

相当于x、y轴,通过自定义uv坐标可以截取所需的纹理范围

<template>
  <div id="container"></div>
</template>

<script setup>
import * as THREE from "three";
import { onMounted } from "vue";
import { OrbitControls } from "three/addons/controls/OrbitControls.js";

// 场景
const scene = new THREE.Scene();
scene.background = new THREE.Color(0x666666);

// 相机
const camera = new THREE.PerspectiveCamera();
// camera.position.x = 10;
camera.position.y = 0;
camera.position.z = 2;

// 创建矩形
const geometry = new THREE.PlaneGeometry(1, 1)
const texture = new THREE.TextureLoader().load('/textureMsg/cloud.jpeg') // 纹理贴图

// UV像素的取值范围 分别为四个顶点的坐标 左上 右上 左下 右下
const uv = new Float32Array([
  0, 1,
  1, 1,
  0, 0,
  1, 0
])

// UV像素的颜色值
// const colors = new Float32Array([
//   1.0, 0.0, 0.0, // 红色
//   0.0, 1.0, 0.0, // 绿色
//   0.0, 0.0, 1.0  // 蓝色
// ]);

// const colorAttribute = new THREE.BufferAttribute(colors, 3); // 每个颜色有3个分量 (r, g, b)
// geometry.setAttribute('color', colorAttribute);


// // 设置矩形的uv 
geometry.attributes.uv = new THREE.BufferAttribute(uv, 2) // uv坐标 2表示只有x,y  3是x,y,z

// 材质
const material = new THREE.MeshBasicMaterial({
  side: THREE.DoubleSide, // 双面可见
  map: texture,  // 纹理贴图
  // vertexColors: true // 顶点颜色
})

console.log(geometry, 'geometry')

// 创建网格
const cube = new THREE.Mesh(geometry, material)
scene.add(cube)

// 添加坐标辅助线
const axesHelper = new THREE.AxesHelper( 5 );
scene.add( axesHelper );

onMounted(() => {
  // 渲染器
  const renderer = new THREE.WebGLRenderer();
  renderer.setSize(window.innerWidth, window.innerHeight);
  // 将渲染器添加到页面
  document.getElementById("container").appendChild(renderer.domElement);

  // 轨道控制器
  const controls = new OrbitControls(camera, renderer.domElement);

  // 动画
  function animate() {
    // 更新动画
    requestAnimationFrame(animate);

    // 轨道控制器更新
    controls.update();
    renderer.render(scene, camera);
  }
  animate();
});
</script>

二、效果

1、原图

2、截取后

 


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

相关文章:

  • 05.HTTPS的实现原理-HTTPS的握手流程(TLS1.2)
  • 微软edge浏览器 v131.0.2903.99便携版
  • 每天五分钟机器学习:核函数
  • windows C++ TCP客户端
  • 全面掌握 AutoGluon:从入门到生产环境的实践指南
  • GIT与github的链接(同步本地与远程仓库)
  • 深入探索 npm cache clean --force:清理 npm 缓存的艺术
  • Python + 深度学习从 0 到 1(03 / 99)
  • Pyside6 在 pycharm 中的配置
  • 数据库 SQL 常用语句全解析
  • 瑞吉外卖项目学习笔记(八)修改菜品信息、批量启售/停售菜品
  • Matplotlib中隐藏坐标轴但保留坐标轴标签的3D图
  • 面经zhenyq
  • 图像处理-Ch5-图像复原与重建
  • 前端取Content-Disposition中的filename字段与解码(vue)
  • 「Java EE开发指南」如何用MyEclipse构建一个Web项目?(一)
  • 【Select 语法全解密】.NET开源ORM框架 SqlSugar 系列
  • CPU架构的变化史
  • 用Python写炸金花游戏
  • CoinShares预测2025年加密市场前景看涨
  • 【k8s】在ingress-controlller中Admission Webhook 的作用
  • 批量识别工作表中二维码信息-Excel易用宝
  • 【UE5 C++课程系列笔记】11——FString、FName、FText的基本使用
  • C 语言基础运算:输入两个整数并计算和、差、积
  • Python:模拟(包含例题:饮料换购 图像模糊 螺旋矩阵)
  • CSS|15 CSS3圆角矩形透明度