Three.js中自定义UV坐标贴图举例超详细讲解_javascript技巧

文章编号:1038 技术教程 2026-02-04 uv坐标 threejs uv贴图 three.js uv

1、当原始几何体没有 UV 信息

2、当默认 UV 无法满足纹理显示需求

4、材质设置使用了 map(纹理贴图)

纹理可能根本看不到。

或者整个纹理只出现在几何体的一个小角落(默认 UV 不匹配)。

甚至多个面公用同一张纹理,但位置都不对。

在 3D 渲染中,为了将 2D 图片(纹理)映射到 3D 几何体上,需要用到 UV 坐标

const group = topPolygonMesh.object3d; if (!group) return; group.traverse(child => { if (child.isMesh && child.geometry && child.geometry.attributes.position) { const posAttr = child.geometry.attributes.position; const positions = posAttr.array; // 1. 计算 XY 投影平面的包围盒 let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity; for (let i = 0; i < positions.length; i += 3) { const x = positions[i]; const y = positions[i + 1]; if (x < minX) minX = x; if (y < minY) minY = y; if (x > maxX) maxX = x; if (y > maxY) maxY = y; }; const width = maxX - minX; const height = maxY - minY; // 2. 根据 bbox 生成新的 UV(按 XY 贴图) const uv = []; for (let i = 0; i < positions.length; i += 3) { const x = positions[i]; const y = positions[i + 1]; const u = (x - minX) / width; const v = (y - minY) / height; uv.push(u, v); }; // 3. 设置新的 UV child.geometry.setAttribute('uv', new THREE.Float32BufferAttribute(uv, 2)); child.geometry.attributes.uv.needsUpdate = true; } })

使用你上面的逻辑:

const group = topPolygonMesh.object3d;if (!group) return;group.traverse(child => { if (child.isMesh && child.geometry && child.geometry.attributes.position) {

🔹 找到场景中的所有 Mesh,确保其包含几何体和位置(顶点)数据。

const posAttr = child.geometry.attributes.position;const positions = posAttr.array;let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;for (let i = 0; i < positions.length; i += 3) { const x = positions[i]; const y = positions[i + 1]; if (x < minX) minX = x; if (y < minY) minY = y; if (x > maxX) maxX = x; if (y > maxY) maxY = y;}const width = maxX - minX;const height = maxY - minY;

📌 获取几何体在 XY 平面上的包围盒

const uv = [];for (let i = 0; i < positions.length; i += 3) { const x = positions[i]; const y = positions[i + 1]; const u = (x - minX) / width; const v = (y - minY) / height; uv.push(u, v);}

📌 将 XY 坐标归一化为 UV 区间

child.geometry.setAttribute('uv', new THREE.Float32BufferAttribute(uv, 2));child.geometry.attributes.uv.needsUpdate = true;

📌 设置 UV 属性并通知渲染系统更新

该段代码的最终目标是:✅ 使 XY 平面上的任意不规则几何体,都能准确、完整地显示一张贴图(通常是一张地图或图案)

到此这篇关于Three.js中自定义UV坐标贴图的文章就介绍到这了,更多相关Three.js自定义UV坐标贴图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!


本文地址: https://www.earthnavs.com/jishuwz/a64b878be1203db6455a.html
全局中部横幅
WhatsApp群成员采集软件

跨境王WhatsApp群成员采集软件,可以根据关键词采集WhatsApp群组链接,并且提取出WhatsApp群成员手机号码

hao91收录网

网站收录网,主要提供网站快速收录,快速上排名,站点权重提升,网站收录提交,网站收录工具,同时提供最全的优秀名站。

ITeye

Java编程,SpringStrutsWebwork框架深入,XMLHTTPAjax开发,JavaWeb开发,Java企业应用,Java设计模式,Java开源框架,Java应用服务器,RichClient讨论,Ruby编程,RubyDSL开发,Rubyonrails实践,JavaScript编程,敏捷软件开发XPTDD,软件配置管理,软件测试,项目管理UML,数据库,C#/.netC/C++Erlang/FPPHP/Linux平台,精通Hibernate

666资源站

最优质的资源集合

首页

观察者网风闻社区,热辣时事,专家点评,网友评论,尽在掌握

首页

该站点未添加描述description...

顶象

顶象防御云,致力于帮助企业构建自主可控的业务安全体系,通过智能无感验证码、端加固、设备指纹、实时决策、安全感知防御平台等产品解决业务欺诈威胁,防范化解各类网络黑灰产风险,让业务更加健康稳定,助力企业创新与增长。

知识导航网

【知识导航网】每日聚合10,000+权威知识资源,涵盖学术论文、行业研究报告、职业技能课程及AI工具库,精准覆盖人工智能、商业管理、教育心理等18大领域。提供智能分类检索+个性化推荐系统,3秒定位目标资料,支持PDF/视频/数据集多格式下载。立即体验,让知识获取效率提升200%!

网站收录

全人工编辑的开放式网站分类目录,收录国内外、各行业优秀网站,旨在为用户提供网站分类目录检索、优秀网站参考、网站推广服务。

颜夕资源网www.yxyjdz.xyz

颜夕资源网发布页,颜夕资源网最新地址,颜夕资源网网址