Three.js之顶点UV坐标、纹理贴图

这篇具有很好参考价值的文章主要介绍了Three.js之顶点UV坐标、纹理贴图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考资料

  • 创建纹理贴图
  • UV动画

知识点

注:基于Three.jsv0.155.0文章来源地址https://www.toymoban.com/news/detail-712430.html

  • 纹理贴图加载器:TextureLoader
  • 纹理对象:Texture
  • 颜色贴图属性.map
  • 顶点UV坐标
  • 圆形平面设置纹理贴图:CircleGeometry
  • 设置阵列模式:THREE.RepeatWrapping
  • 网格地面辅助观察:GridHelper
  • 纹理对象.offset属性

代码实现

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Three.js</title>
</head>
  <body>
  </body>
  <!-- 具体路径配置,你根据自己文件目录设置,我的是课件中源码形式 -->
  <script type="importmap">
    {
      "imports": {
        "three": "./js/three.module.js",
        "three/addons/": "../three.js/examples/jsm/"
      }
    }
  </script>
  <script type="module">
    import * as THREE from 'three';
    import { OrbitControls } from 'three/addons/controls/OrbitControls.js';

    const width = 800
    const height = 500

    // 场景
    const scene = new THREE.Scene();

    // ********** 本章知识点示例代码 Start **********
    // 1. 创建纹理贴图
    // 几何体
    const geometry = new THREE.SphereGeometry(100);
    // const geometry = new THREE.BoxGeometry(100, 100 ,100);
    // 文理贴图
    const textureLoader = new THREE.TextureLoader();
    const texture = textureLoader.load('./img/6.JPG');

    // 材质 
    const material = new THREE.MeshLambertMaterial({
      // color:0x0000ff,
      map: texture,
    });

    material.map = texture;

    const mesh1 = new THREE.Mesh(geometry, material);
    scene.add(mesh1);

    // 2. 自定义顶点UV坐标
    scene.remove(mesh1);

    const geometry2 = new THREE.PlaneGeometry(200, 100);
    console.log('🚀 ~ file: 5顶点UV坐标、纹理贴图.html:29 ~ geometry.attributes.uv:', geometry.attributes.uv);
    console.log('🚀 ~ file: 5顶点UV坐标、纹理贴图.html:29 ~ geometry.attributes.position:', geometry.attributes.position);
    const textureLoader2 = new THREE.TextureLoader();
    const texture2 = textureLoader2.load('./img/6.JPG');

    geometry2.attributes.uv = new THREE.Float32BufferAttribute([
      0, 1,
      1, 1,
      0, 0,
      1, 0,
    ], 2);

    // 材质 
    const material2 = new THREE.MeshLambertMaterial({
      // color:0x0000ff,
      map: texture2,
    });

    const mesh2 = new THREE.Mesh(geometry2, material2);
    scene.add(mesh2);

    // 3. 圆形平面设置纹理贴图
    scene.remove(mesh2);

    const geometry3 = new THREE.CircleGeometry(100);
    const textureLoader3 = new THREE.TextureLoader();
    const texture3 = textureLoader3.load('./img/6.JPG');

    // 材质 
    const material3 = new THREE.MeshLambertMaterial({
      // color:0x0000ff,
      map: texture3,
    });

    const mesh3 = new THREE.Mesh(geometry3, material3);
    scene.add(mesh3);

    // 4. 纹理对象Texture阵列
    scene.remove(mesh3);

    const geometry4 = new THREE.PlaneGeometry(400, 400);
    const textureLoader4 = new THREE.TextureLoader();
    const texture4 = textureLoader4.load('./img/6.JPG');
    texture4.wrapS = THREE.RepeatWrapping;
    texture4.wrapT = THREE.RepeatWrapping;
    texture4.repeat.set(10, 10);

    // 材质 
    const material4 = new THREE.MeshLambertMaterial({
      // color:0x0000ff,
      map: texture4,
      side: THREE.DoubleSide,
    });

    const mesh4 = new THREE.Mesh(geometry4, material4);
    mesh4.rotateX(-Math.PI / 2);
    scene.add(mesh4);

    
    // 5. 矩形Mesh+背景透明png贴图
    scene.remove(mesh4);

    const geometry5 = new THREE.PlaneGeometry(600, 200);
    const textureLoader5 = new THREE.TextureLoader();
    const texture5 = textureLoader5.load('./img/6.JPG');
    texture5.wrapS = THREE.RepeatWrapping;

    // 材质 
    const material5 = new THREE.MeshLambertMaterial({
      // color:0x0000ff,
      map: texture5,
      side: THREE.DoubleSide,
      transparent: true,
    });

    const mesh5 = new THREE.Mesh(geometry5, material5);
    mesh5.rotateX(-Math.PI / 2);
    scene.add(mesh5);

    // 网格地面辅助观察
    const grid = new THREE.GridHelper(500, 10);
    grid.position.set(0, -0.01, 0);
    scene.add(grid);
    mesh5.position.y = 1

    // ********** 本章知识点示例代码 End **********
    
    

    // 光源
    const pointLight = new THREE.PointLight(0xffffff, 1.0, 0, 0);
    pointLight.position.set(200, 200, 200 );
    scene.add(pointLight);

    // 环境光
    const ambientLight = new THREE.AmbientLight( 0xffffff, 0.2);
    scene.add( ambientLight );

    // 坐标系
    const axes = new THREE.AxesHelper(200);
    scene.add(axes);

    // 相机
    const camera = new THREE.PerspectiveCamera(75, width/height, 0.1, 1000);
    camera.position.set(200, 200, 200);
    camera.lookAt(scene.position);

    // 渲染器
    const renderer = new THREE.WebGLRenderer();
    renderer.setSize(width, height);
    renderer.render(scene, camera);
    document.body.appendChild(renderer.domElement);

    // 控制器
    const controls = new OrbitControls(camera, renderer.domElement);
    controls.addEventListener('change', () => {
      renderer.render(scene, camera);
    });

    // 渲染循环
    function render() {
        texture5.offset.x += 0.005;
        renderer.render(scene, camera);
        requestAnimationFrame(render);
    }
    render();
  </script>
</html>

到了这里,关于Three.js之顶点UV坐标、纹理贴图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Three.js 设置模型材质纹理贴图和修改材质颜色,材质透明度,材质网格

    1 traverse (模型循环遍历方法) 2. THREE.TextureLoader(用于加载和处理图片纹理) 3. THREE.MeshLambertMaterial(用于创建材质) 4. getObjectByProperty(通过材质的属性值获取材质信息) 在上一篇 Three.js加载外部glb,fbx,gltf,obj 模型文件 的文章基础上加入onSetSystemModelMap (设置模型材质方法

    2024年02月13日
    浏览(54)
  • Unity 顶点vertices,uv,与图片贴图,与mesh

    mesh就是组成3d物体的三角形们。 mesh由顶点组成的三角形组成,三角形的大小 并不 需要一样,由顶点之间的位置决定。 mesh可以是一个或者多个面。 贴图的原点在左下角,uv是贴图的坐标,数量和顶点数一样(不是100%确定,比如前后左右4个面,贴图最终如何封闭,我还不知

    2024年02月10日
    浏览(46)
  • 3ds max 烘培世界坐标到贴图/顶点色

    Normalize(objectNormal) * 0.5 +0.5    右键复制 , 到mesh上粘贴      贴图导入为BC7    

    2024年02月15日
    浏览(45)
  • 什么是Web3D?Web3D技术发展历程以及Web3D应用场景

    当今的互联网已经迈入了第三代,这被称为Web3.0,而Web3D正是Web3.0的其中一个技术分支。Web3D是指将三维图形技术应用于Web上的技术,它是将3D图形和Web技术结合起来的一个分支,可以使用户在Web上以更真实、更直观的方式浏览和操作虚拟场景。本文将介绍什么是Web3D、Web3D技术

    2024年02月15日
    浏览(49)
  • web3d-three.js场景设计器-天空包围盒-TWEEN.js

    THREE.JS 实现场景天空包围盒,为了让场景背景更具体,而不是呆板的纯色,可以给厂家添加围绕的包围盒。 这里使用球体来实现,球体中央则是场景 给球体添加天空的渐变色 加入场景 代码如下 function createSky( hemiLight) {   const vertexShader = `varying vec3 vWorldPosition;     void main

    2024年01月23日
    浏览(49)
  • web3d-three.js场景设计器-sprite广告牌

    three.js使用Sprite精灵实现文字或者图片广告牌 1.将文字绘制到Canvas,调整对应宽高。 2.作为Cavans材质绑定到Sprite 3.加载到场景调整适当的scale function createLabel({ text, fontSize, textColor, color, imageUrl }) {     return new Promise((resolve, reject) = {         let canvas = document.createElement(\\\'canvas\\\')

    2024年02月02日
    浏览(54)
  • 初识web3D--webGL/webGPU

    当今互联网时代,我们已经逐渐习惯了浏览和享受丰富多样的网络内容。从文字、图片到视频,我们可以在Web上畅游于各种信息和娱乐资源之间。然而,随着科技的不断进步,一个全新而令人兴奋的概念正在崭露头角——Web3D。 Web3D是一种革命性的技术,它将三维图形、虚拟

    2024年02月04日
    浏览(55)
  • Three.js--》几何体顶点知识讲解

    目录 几何体顶点位置数据 点线定义几何体顶点数据 网格模型定义几何体顶点数据 顶点法线数据 实现阵列立方体与相机适配 常见几何体简介 几何体的旋转、缩放、平移方法 本篇文章主要讲解几何体的顶点概念,相对偏底层一些,不过掌握之后会更加深入理解three.js的几何体

    2024年02月02日
    浏览(43)
  • web3d-three.js场景设计器-mesh网格添加多模型-模型描述随动

    给场景中的模型加上广告牌描述,可以在模型的MESH里添加Sprite,配上相应的文字, 描述Sprite的位置则是在mesh中的相对位置,比如模型高10,那么我们可以给一个y等于10 来进行适配,这样在移动模型mesh网格时可以整体移动。 function createBox(data) {   const geometry = new THREE.BoxGeom

    2024年02月21日
    浏览(50)
  • 【Three.js】Three.js中的纹理—图像应用和属性调整

      Three.js是一种强大的JavaScript库,用于创建基于Web的交互式3D图形和动画。在Three.js中,纹理是一项重要的功能,它允许我们将图像应用到几何体对象上,并通过调整纹理的属性来实现更丰富的视觉效果。 本文将介绍Three.js中的纹理功能,并演示如何将图片作为纹理应用到几何

    2024年02月15日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包