【threejs】较大物体或shape的贴图较小问题处理方法

问题

有的场景内相对体型差距过大的物体(如山地 海洋等····)由于尺寸问题,加载贴图过于小,同时shader也无法完全展示,如图
在这里插入图片描述

我们可以获取物体的uv,进行缩放使得贴图可以完全展开
如果uv是乱的 可以用xyz坐标最大最小值先排布uv再对uv进行缩放

//假设你有一个 mest.geometry(物体网格)let max = { x: 10000, y: 10000, z: 10000 }let min = { x: 30000, y: 30000, z: 30000 }let positions = geometry.getAttribute('position').array.map((item, index) => {let axis = index % 3switch (axis) {case 0:return item - min.xbreak;case 1:return item - min.ybreak;case 2:return item - min.zbreak;default:break;}})let uv_ = []let _X = max.x - min.xlet _Y = max.y - min.ylet _Z = max.z - min.zfor (let i = 0; i < positions.length / 3; i++) {let x = positions[i * 3]let y = positions[i * 3 + 1]let z = positions[i * 3 + 2]let _u = x / _Xlet _v = z / _Z// 或者你的高度轴是y//  _v = y/_Yuv_.push(_u, _v)}let uvs = uv_.map(item=>item*scale)//缩放// 只是改原始模型uv比例 let uvs = geometry.getAttribute('uv').array.map(item => item / 500)//缩放uv// uv传给geometry(网格)geometry.setAttribute('uv', new Float32BufferAttribute(uvs, 2))
```# 效果
```javascript
//我这里只是进行uv缩放const mesh = new Mesh(geometry, mat)// mesh.position.setZ(-this.lineTick)mesh.position.set(startX, startY, - this.lineTick)// console.log(geometry);let uvs = geometry.getAttribute('uv').array.map(item => item / 500)//缩放geometry.setAttribute('uv', new Float32BufferAttribute(uvs, 2))mesh.scale.set(scale, scale, 1)return mesh
```![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d3ddd5998906476bb488d32da7fb56a9.png)
贴图完全展开了

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

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

相关文章

HarmonyOS实战开发-使用Flex容器组件,实现弹性布局效果。

介绍 本篇Codelab是基于Flex容器组件&#xff0c;实现弹性布局效果。弹性布局的特点是页面元素的宽度按照屏幕分辨率进行适配调整&#xff0c;但整体布局不变。 相关概念 Flex组件&#xff1a;以弹性方式布局子组件的容器组件。Search组件&#xff1a;搜索框组件&#xff0c;…

电商搬家上货软件分享,官方授权API接口,一键铺货更安全!

最近不少地方气温回暖&#xff0c;不少卖家开始布局春夏款产品&#xff0c;首先需要解决的就是货源和上货问题。 当我们看到市面上某款产品很有市场&#xff0c;想要复制到自己店铺来卖&#xff0c;如何操作呢&#xff1f; 按照之前的玩法&#xff0c;是直接借助工具从别人店…

五年前端的面试之旅

哈喽我是树酱&#xff0c;最近整理了下前端面试相关的知识题库&#xff0c;借此分享给各位小伙伴&#xff0c;帮助小伙伴早日拿到钟意的offer&#xff01; 前言 最近就业市场不景气&#xff0c;跟大环境较差也有关&#xff0c;确实给我们也会带来一定的挑战。在招聘网站投简历的…

竞赛 python+大数据校园卡数据分析

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于yolov5的深度学习车牌识别系统实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;3分 该项目较为新颖&am…

【面试题】http与https相关面试题(持续收录)

1.http与https的区别&#xff1f; HTTP&#xff08;Hypertext Transfer Protocol&#xff09;和HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是用于在客户端和服务器之间传输数据的通信协议。它们之间的主要区别在于安全性和数据传输的加密方式&#xff1…

WebSocket 详解-小案例展示

简介&#xff1a;Websocket是一种用于H5浏览器的实时通讯协议&#xff0c;可以做到数据的实时推送&#xff0c;可适用于广泛的工作环境&#xff0c;例如客服系统、物联网数据传输系统&#xff0c;该测试工具可用于websocket开发初期的测试工作。 文章末尾有此案例的完整源代码。…

【JVM】JVM类加载过程

文章目录 &#x1f334;类加载过程&#x1f338;加载&#x1f338;加载&#x1f338;验证&#x1f338;准备&#x1f338;解析&#x1f338;初始化 &#x1f332;双亲委派模型&#x1f338;什么是双亲委派模型&#xff1f;&#x1f338;双亲委派模型的优点 ⭕总结 &#x1f334…

visual studio报:引发的异常:“System.DllNotFoundException”(位于 ConsoleCAN1.exe 中)

最近在重构CAN通信的代码&#xff0c;把论文中的java转为C#实现&#xff0c;由于某种原因&#xff0c;java不能复现&#xff0c;所以转为c#。 然而c#的重构过程遇到许多问题&#xff0c;因为两种语言的编程方式、线程等等实现上有所差异。 其中一个错误&#xff1a; 引发的异…

深入理解数据结构第一弹——二叉树(1)——堆

前言&#xff1a; 在前面我们已经学习了数据结构的基础操作&#xff1a;顺序表和链表及其相关内容&#xff0c;今天我们来学一点有些难度的知识——数据结构中的二叉树&#xff0c;今天我们先来学习二叉树中堆的知识&#xff0c;这部分内容还是非常有意思的&#xff0c;下面我们…

网络安全接入认证-802.1X接入说明

介绍 802.1X是一个网络访问控制协议&#xff0c;它可以通过认证和授权来控制网络访问。它的基本原理是在网络交换机和认证服务器之间建立一个安全的通道&#xff0c;并要求客户端提供身份验证凭据。如果客户端提供的凭据是有效的&#xff0c;交换机将开启端口并允许访问。否则&…

Linux(CentOS7.5) 安装部署 Python3.6(超详细!包含 Yum 源配置!)

文章目录 1.配置 Yum 源2.下载 Python3 包3. 解压4.安装依赖环境5.安装出错场景 6.创建软链接7.配置 Python3 的环境变量8.验证补充&#xff1a;安装 openssl-devel补充&#xff1a;pip3 源配置 1.配置 Yum 源 # 注意&#xff01;&#xff01;&#xff01;请先切换到 root 账号…

Go语言爬虫实战(线程池)

Go语言爬虫实战 目标 利用go语言爬取指定网站的图片。实现爬取网站任意页面所有所需的图片。实现使用go语言线程池开启多个线程爬取图片内容。最后实现创建多个文件夹存储图片。 爬取网站图片 步骤 对指定URL发去GET请求&#xff0c;获取对应的响应。 resp, err : http.Get(…