javascript - ThreeJS - 将纹理投影到网格表面
问题描述
我正在寻找将纹理投影到 ThreeJS 中的网格表面上。
https://www.lanyardmarket.com/en/printed-tshirt
该链接实现了我正在寻找的结果,但是我不确定他们是如何实现的。
.
我会在研究时更新这篇文章,但是如果有人知道如何将 ThreeJS 纹理投影到我很想知道的网格上。
谢谢
解决方案
您可以在这里找到工作示例:https ://jsfiddle.net/mmalex/pcjbysn1/
BufferGeometry 将纹理坐标存储在 'uv' 属性中,您可以使用BufferGeometry.addAttribute添加它并通过geom.attributes.uv.array
.
let uvcoords = [];
let vertexCount = geom.attributes.position.array.length / 3;
// allocate array of UV coordinates (2 floats per each vertex)
uvcoords.length = 2 * vertCount;
if (geom.attributes.uv === undefined) {
geom.addAttribute('uv', new THREE.Float32BufferAttribute(uvcoords, 2));
}
现在您所需要的只是将网格顶点“投影”到某个 3D 平面上。这些投影坐标将显示您的 UV 坐标。
在一般情况下,您需要为每个顶点执行Plane.projectPoint。这种方法很简单,可以通过预旋转网格进行优化,以便顶点 x 和 y 分量相应地变为 u 和 v。这你会在我的 jsfiddle 中找到。
推荐阅读
- javascript - 在用户取消时显示提示,它得到未捕获的 typeError
- javascript - 在每个 D3 条形矩形的顶部添加图像
- macos - 使用 Qt/Accessibility API 在 Mac OS X Mojave 上的全局键盘记录器
- powershell - 给定一个仅包含电子邮件地址的 .csv 文件,查找 AD SamAccountName
- sas - SAS PROC SQL 提取与第二个变量的值关联的变量
- angular - 在 rxjs 中,如何使用 takeUntil 或 takeWhile 取消订阅“内部”“间隔”可观察对象
- python - 如何从数组python中删除0
- ansible - Ansible 剧本依赖问题
- java - 使用环境变量查找 Excel 目录并运行脚本
- javascript - 循环遍历 Javascript 中的段落