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

做网站数据库设计农家乐网站设计费用

做网站数据库设计,农家乐网站设计费用,中国建设银行老版本下载官方网站,在线培训平台哪家好1. UV 映射基础概念 1.1 什么是 UV 坐标? 在三维计算机图形学中,UV 坐标是将二维纹理映射到三维模型表面的坐标系统。UV 中的 U 和 V 分别代表2D纹理空间的水平(X)和垂直(Y)坐标轴,与三维空间…

1. UV 映射基础概念

1.1 什么是 UV 坐标?

在三维计算机图形学中,UV 坐标是将二维纹理映射到三维模型表面的坐标系统。UV 中的 U 和 V 分别代表2D纹理空间的水平(X)和垂直(Y)坐标轴,与三维空间中的 XYZ 坐标形成区分。

  • UV 坐标系范围:[0,0] 到 [1,1]
  • 每个顶点对应一个UV坐标
  • 纹理采样器通过UV值获取纹理颜色

1.2 坐标系差异

// Three.js 中的坐标系对比
三维模型坐标:(x, y, z) ∈ [-∞, +∞]
纹理UV坐标:(u, v) ∈ [0, 1]
屏幕像素坐标:(x, y) ∈ [0, viewportSize]

2. Three.js 中的 UV 实现

2.1 Geometry 与 BufferGeometry

// 经典 Geometry 的UV设置
const geometry = new THREE.Geometry();
geometry.faceVertexUvs[0].push([new THREE.Vector2(0, 0),new THREE.Vector2(1, 0),new THREE.Vector2(0.5, 1)
]);// BufferGeometry 的UV设置
// 自定义平面几何体
const geometry = new THREE.BufferGeometry();
const vertices = new Float32Array([...]); // 顶点坐标
const uv = new Float32Array([0, 0, // 顶点0的UV1, 0, // 顶点1的UV1, 1, // 顶点2的UV0, 1  // 顶点3的UV
]);
geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3));
geometry.setAttribute('uv', new THREE.BufferAttribute(uv, 2)); // 关键UV设置[1,5](@ref)

2.2 内置几何体的UV映射

映射类型特点适用场景Three.js实现
​平面映射​正交投影,无透视变形墙面、地面PlaneGeometry默认UV2
​立方体映射​6面独立展开盒子、建筑BoxGeometry自动生成4
​球形映射​极坐标展开行星、球体SphereGeometry经线展开6
​圆柱映射​环形展开管道、柱体需手动设置UV3
2.2.1 BoxGeometry
  • 6个立方体面共享同一张纹理
  • 每个面UV范围:[ (0,0), (1,1) ]
  • 默认沿表面均匀展开,,但可能存在接缝
2.2.2 SphereGeometry
  • 经线方向:U坐标(0到1)
  • 纬线方向:V坐标(0到1)
  • 极点处UV密度较高
  • 采用球形投影,UV 在两极可能出现拉伸。
2.2.3 CylinderGeometry
  • 侧面:U环绕圆柱,V沿高度
  • 顶部/底面:圆形UV展开

3. UV 操作实战技巧

3.1 动态修改UV坐标

// 获取UV属性数组
const uvAttribute = geometry.getAttribute('uv');
const uvs = uvAttribute.array;// 修改第三个顶点的U坐标
uvs[2 * 2] = 0.75; // 索引计算:顶点索引 * 分量数 + 偏移// 必须标记更新
uvAttribute.needsUpdate = true;

3.2 纹理重复与偏移

const texture = new THREE.TextureLoader().load('tile.jpg');
texture.wrapS = THREE.RepeatWrapping;
texture.wrapT = THREE.MirroredRepeatWrapping;
texture.repeat.set(2, 3);
texture.offset.set(0.5, 0.25);

4. 高级 UV 应用

4.1 多重纹理混合

// 着色器代码示例
varying vec2 vUv;
uniform sampler2D texture1;
uniform sampler2D texture2;void main() {vec4 texColor1 = texture2D(texture1, vUv);vec4 texColor2 = texture2D(texture2, vUv * 2.0);gl_FragColor = mix(texColor1, texColor2, 0.5);
}

4.2 UV 动画

function animate() {requestAnimationFrame(animate);// 水平滚动纹理texture.offset.x += 0.01;// 动态修改UV坐标const uvs = geometry.attributes.uv.array;for(let i=0; i<uvs.length; i+=2){uvs[i] += Math.sin(Date.now() * 0.001) * 0.01;}geometry.attributes.uv.needsUpdate = true;
}

4.3 顶点着色器中的 UV 控制

通过自定义着色器实现复杂效果:

// 顶点着色器
varying vec2 vUv;
uniform float time;void main() {vUv = uv + vec2(time * 0.1, 0.0);gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}

4.4 法线映射与 UV 的关系

法线贴图依赖 UV 坐标确定法线方向:

const material = new THREE.MeshStandardMaterial({normalMap: normalTexture,normalScale: new THREE.Vector2(0.5, 0.5) // 控制法线强度
});

4.5 光照烘焙与 UV

在 Blender 中烘焙光照后导出带有uv2的模型:

// 在Three.js中启用第二组UV
geometry.setAttribute('uv2', new THREE.BufferAttribute(uv2Array, 2));
material.aoMap = aoTexture;
material.aoMap.uvTransform = new THREE.Matrix3().fromArray(uvTransform);

5. 常见问题解决方案

5.1 纹理拉伸问题

  • 成因:UV分布不均匀

  • 解决方案:

    1. 使用更密集的几何细分
    2. 制作UDIM纹理集
    3. 应用三平面投影

5.2 接缝处理技巧

  • 原因:UV 坐标不连续或导出时顶点 UV 重复。

  • 解决方案

  1. 在 Blender 中使用Smart UV Project重新展开。

  2. 导出时勾选Merge by Distance选项。

  3. 在 Three.js 中调整 UV 坐标:

    const uvArray = geometry.attributes.uv.array;
    for (let i = 0; i < uvArray.length; i += 2) {uvArray[i] = uvArray[i] % 1;uvArray[i + 1] = uvArray[i + 1] % 1;
    }
    geometry.attributes.uv.needsUpdate = true;
    

6. 性能优化建议

  1. 合并UV集:将多个材质的UV合并到同一纹理图集
  2. 使用压缩纹理格式:推荐 KTX2或者Basis Universal 格式
  3. 避免动态UV更新:静态几何体应冻结UV缓冲区
  4. LOD策略:根据距离切换UV细节层级

7. 调试工具推荐

  1. UV检查材质
const debugMaterial = new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load('uv-grid.png')
});
  1. Three.js编辑器:可视化UV展开
  2. Blender + Three.js导出:专业级UV编辑流程

结语

UV映射是连接3D模型与2D纹理的核心桥梁。通过深入理解Three.js的UV实现机制,开发者可以创建更复杂的材质效果、优化渲染性能,并解决实际项目中的各种纹理映射难题。实际开发中需注意:纹理尺寸需为2的幂、不同材质类型对UV的支持差异、移动端性能优化等。建议结合WebGL着色器编程,进一步挖掘UV系统的潜力。


文章转载自:

http://6SaWKF6R.nsjpz.cn
http://MLr1jigJ.nsjpz.cn
http://kpe1PWns.nsjpz.cn
http://VrV8xJgX.nsjpz.cn
http://en9lsl1z.nsjpz.cn
http://FyidNWoa.nsjpz.cn
http://YHdFbe0t.nsjpz.cn
http://0n33ennI.nsjpz.cn
http://8jqdGUqk.nsjpz.cn
http://S4H7uGmv.nsjpz.cn
http://Rh02uUFg.nsjpz.cn
http://kuSluRJ2.nsjpz.cn
http://lpaZ8G68.nsjpz.cn
http://I6TR6lMA.nsjpz.cn
http://vNEUfxKd.nsjpz.cn
http://KamRePvA.nsjpz.cn
http://T1o62aDV.nsjpz.cn
http://Q3o4rAof.nsjpz.cn
http://qR0YDuIu.nsjpz.cn
http://qVtRcsxS.nsjpz.cn
http://hw5hMUlf.nsjpz.cn
http://3ZYaaAN8.nsjpz.cn
http://q3I9NoOW.nsjpz.cn
http://ZL4JkJLg.nsjpz.cn
http://tJtl0uFP.nsjpz.cn
http://u5fEaAyh.nsjpz.cn
http://8HzBnLYo.nsjpz.cn
http://I64OKL9s.nsjpz.cn
http://znNV0xdj.nsjpz.cn
http://hgIno82x.nsjpz.cn
http://www.dtcms.com/wzjs/775676.html

相关文章:

  • 参考文献网站开发捕鱼游戏在哪做网站
  • 灰色系网站西安直播网站建设
  • 网站建设解决动地科技登录网站
  • 汉口专业网站推广公司东莞虚拟主机
  • 常州网站推广招聘蓟县网站建设
  • 自助建站平台有哪些石家庄定制建站
  • 网站建设方案及报价单哪些公司的网站做的很好
  • 合益环保东莞网站建设石家庄住建局网站
  • 网站建设找扌金手指排名网站手机客户端制作
  • 南县网站建设WordPress显示更新进度插件
  • 做英文网站有用吗重庆模板做网站
  • 都匀住房和城乡建设局网站手机网站 微网站
  • 佛山专业做淘宝网站推广网络营销又称为
  • 网站建设开发全包wordpress上传视频媒体库没显示
  • 企业网站维护报价青岛网站设计怎么选
  • 同安网站建设宣传片拍摄应急预案
  • 模板网站也可以做优化物流公司取名字参考大全
  • 加快政务公开网站建设电子商务网站建设
  • 悬赏做logo的网站建设苏州旅游网站的方案策划书
  • 开创集团万网站建设网页设计做一个介绍自己的的网站
  • 北京网站建设运营苏州调查公司有哪些
  • 网站排名logo怎么做用Docker搭建WordPress博客
  • 湖北工程建设招投标中心网站泰州东方医院男科
  • 炉石做任务抽奖网站网站开发常用的框架
  • 广州公司网站制作小吴seo博客
  • 做网站如何赚钱知乎企业网站开发注册
  • 网站建设创意公司互动性的网站
  • 企业网站模板一流的上海网站建设
  • c2c电子商务网站建设栏目结构图太原网站建设的公司排名
  • 广州网站建设定制多少钱辉县网站建设求职简历