• 在three中使用图片作为材质,并将材质流动起来


    实现步骤:

    1、创建一个平面小平板,贴上我们使用的图片材质

    export const initArrows = () => {
    let texture_left = new THREE.TextureLoader().load(process.env.BASE_URL + "object/arrows.png");

    texture_left.wrapS = THREE.RepeatWrapping; //纹理水平方向的平铺方式
    texture_left.wrapT=THREE.RepeatWrapping; //纹理垂直方向的平铺方式


    texture_left.repeat.x = 3; //重复产生N个相同贴图
    texture_left.repeat.y =1; //产生N行


    let planeGeometry = new THREE.PlaneGeometry(50, 15);

    let plane_left = new THREE.MeshBasicMaterial();
    plane_left.map = texture_left;
    plane_left.side = THREE.DoubleSide;


    let plane_lefts = new THREE.Mesh(planeGeometry, plane_left);
    return plane_lefts
    }

    2、将画出来的平面加载到场景中,在页面中渲染出来,需要注意的是:plane_lefts.name = 'arrow'+ index + '-' +i;给每个平板的name属性添加名字
    let plane_lefts = initArrows()
    plane_lefts.position.y = value.y - value.data.size*200*0.75;
    plane_lefts.position.x = value.x - value.data.size*200*0.38;
    plane_lefts.rotation.y += 0.5*Math.PI
    plane_lefts.name = 'arrow'+ index + '-' +i;
    plane_lefts.position.z = -value.data.size*200*0.37;
    plane_lefts.scale.set(value.data.size,value.data.size,value.data.size);
    this.scene.add(plane_lefts);


    3、最最最最核心的部分就是在animate中找到相应的平面(this.scene.getObjectByName),然后通过控制他的偏移量来控制贴图材质的流动情况
    this.scene.getObjectByName('arrow'+ index + '-' +i).material.map.offset.x -= 0.1

    效果图:




  • 相关阅读:
    struts2后台返回json到jsp页面
    潜搜索——搜索界的趋势
    pat1022__字符串查找
    PAT1055___排序神题
    Codeforces Round #205 (Div. 2)C 选取数列可以选择的数使总数最大——dp
    Codeforces Round #204 (Div. 2) C. Jeff and Rounding——数学规律
    队列模拟题——pat1026. Table Tennis
    骰子点数概率__dp
    PAT1034. Head of a Gang ——离散化+并查集
    回文字符串的变形——poj1159
  • 原文地址:https://www.cnblogs.com/kdiekdio/p/11512145.html
Copyright © 2020-2023  润新知