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

server/2024/12/27 12:27:41/

一、uv坐标

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

javascript"><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.ppmy.cn/server/153619.html

相关文章

Coroutine 基础二 —— 结构化并发(一)

1、“一个协程”到底指什么 为了讲结构化并发&#xff0c;需要先讲父子协程&#xff1b;讲父子协程&#xff0c;就需要先讲什么是“一个协程”。 课程用线程作为对比来引入协程概念。使用线程时&#xff0c;通常会认为 Thread 对象就是线程&#xff0c;除了 Thread 这个单词本…

单片机长耗时前后台任务优化

代码&#xff1a; void Task_10ms(void) {... }//改 void Task_2ms(void) {static uint8_t s_state 0switch(s_state){case 0:....s_state 1;break;case 1:....s_state 2;break;case 3:....s_state 1;break;default: //此段可以去除s_state 0;break; } } 参考链接 MCU长…

从论文到实践:Stable Diffusion模型一键生成高质量AI绘画

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月24日10点02分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文源地址有视频&#xff1a; 链接h…

linux下搭建lamp环境(dvwa)

lamp简介 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写&#xff1a; Linux&#xff0c;操作系统 Apache&#xff0c;网页服务器 MariaDB或MySQL&#xff0c;数据库管理系统或数据库服务器 PHP、Perl或Python&#xff0c;脚本语言 # ubuntu安装…

高速图像处理卡设计原理图:基于3U VPX XCZU15EG+TMS320C6678的信号处理板

基于3U VPX XCZU15EGTMS320C6678的信号处理板 一、板卡概述 本板卡系我司自主研发的基于3U VPX风冷、导冷架构的信号处理板&#xff0c;适用于高速图像处理等。芯片采用工业级设计。 板卡采用标准3U VPX架构&#xff0c;板上集成一片Xilinx公司ZynqUltraScale系列F…

Spring AOP是什么

目录 谈谈自己对于 AOP 的了解 Spring AOP 和 AspectJ AOP 有什么区别? AOP 常见的通知类型有哪些? 多个切面的执行顺序如何控制? 谈谈自己对于 AOP 的了解 AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关&#xff0c;却为业务模块所共同调用的逻辑…

深入了解Linux —— make和makefile自动化构建工具

什么是make/makefile 在之前写代码的过程中&#xff0c;我们都是对一个文件进行编译链接&#xff08;gcc编译)&#xff0c;但是如果一个项目中&#xff0c;源代码文件非常的多&#xff0c;我们总不能一个一个的进行编译链接&#xff0c;这也太麻烦了&#xff1b;所以现在就来学…

【K8S问题系列 |19 】如何解决 Pod 无法挂载 PVC问题

在 Kubernetes 中&#xff0c;Pod 无法挂载 PVC&#xff08;Persistent Volume Claim&#xff09;是一个常见的问题。这通常会导致应用无法正常访问所需的持久存储。本文将详细分析这一问题的原因&#xff0c;并提供解决方案&#xff0c;包括具体执行示例和结果讲解。 一、问题…