threejs纹理的使用

  1.  实现地板的效果,需要导入3张图片,第一种样式,第二种,木板间的间隙,第三种,木板的粗细图片。
  2. 先注册一个物体属性,在物体属性上加上图片,注册代码如下图:
    const floorMat = new THREE.MeshStandardMaterial( {
        roughness: 0.8,
        color: 0xffffff,
        metalness: 0.2,
        bumpScale: 0.0005
    });
  3. 样式的图片,图片:

    图片导入的代码:
    const textureLoader = new THREE.TextureLoader();
    textureLoader.load( 'textures/hardwood2_diffuse.jpg', function ( map ) {
        map.wrapS = THREE.RepeatWrapping;
        map.wrapT = THREE.RepeatWrapping;
        map.anisotropy = 4;
        map.repeat.set( 10, 24 );
        map.encoding = THREE.sRGBEncoding;
        floorMat.map = map;
        floorMat.needsUpdate = true;
    });
    最重要的是floorMat.map这个代码,下面的效果也主要是这两个参数。
  4. 木板间的间隙的图片:

    相关代码:
    textureLoader.load( 'textures/hardwood2_bump.jpg', function ( map ) {
        map.wrapS = THREE.RepeatWrapping;
        map.wrapT = THREE.RepeatWrapping;
        map.anisotropy = 4;
        map.repeat.set( 10, 24 );
        floorMat.bumpMap = map;
        floorMat.needsUpdate = true;
    } );

    关键代码:floorMat.bumpMap

  5. 木板间的粗糙程度的图片:

    相关代码:
    textureLoader.load( 'textures/hardwood2_roughness.jpg', function ( map ) {
    	map.wrapS = THREE.RepeatWrapping;
    	map.wrapT = THREE.RepeatWrapping;
    	map.anisotropy = 4;
    	map.repeat.set( 10, 24 );
    	floorMat.roughnessMap = map;
    	floorMat.needsUpdate = true;
    } );

    关键代码:floorMat.roughnessMap

  6. 具体效果可以查看: threejs地板效果
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Three.js中的纹理流动效果,可以通过多重纹理和过程纹理来实现。 多重纹理可以用于在一个对象上同时应用多个纹理,比如可以在一个球体上同时应用地图纹理和云层纹理。在Three.js中,可以使用THREE.MeshPhongMaterial来实现多重纹理。具体实现步骤如下: 1. 创建多个纹理对象,例如地图纹理和云层纹理。 ``` const mapTexture = new THREE.TextureLoader().load('map.jpg'); const cloudTexture = new THREE.TextureLoader().load('cloud.jpg'); ``` 2. 创建多重纹理材质对象,并将纹理对象添加到材质中。 ``` const material = new THREE.MeshPhongMaterial({ map: mapTexture, specularMap: cloudTexture, specular: new THREE.Color('grey'), shininess: 50 }); ``` 3. 创建对象,并将多重纹理材质对象添加到对象中。 ``` const sphere = new THREE.Mesh(new THREE.SphereGeometry(5, 32, 32), material); scene.add(sphere); ``` 过程纹理可以用于在运行时生成纹理,可以用于创建流动的水面、火焰等效果。在Three.js中,可以使用THREE.WebGLRenderTarget和THREE.ShaderMaterial来实现过程纹理。具体实现步骤如下: 1. 创建WebGLRenderTarget对象,用于生成渲染目标,并设置其宽度和高度。 ``` const renderTarget = new THREE.WebGLRenderTarget(window.innerWidth, window.innerHeight); ``` 2. 创建ShaderMaterial对象,并将renderTarget对象添加到uniforms中。 ``` const material = new THREE.ShaderMaterial({ uniforms: { texture: { value: renderTarget.texture } }, vertexShader: document.getElementById('vertexShader').textContent, fragmentShader: document.getElementById('fragmentShader').textContent }); ``` 3. 创建对象,并将ShaderMaterial对象添加到对象中。 ``` const plane = new THREE.Mesh(new THREE.PlaneBufferGeometry(50, 50), material); scene.add(plane); ``` 4. 在渲染时,先渲染到renderTarget上,然后将渲染结果应用到ShaderMaterial对象的纹理中。 ``` renderer.setRenderTarget(renderTarget); renderer.render(scene, camera); renderer.setRenderTarget(null); ``` 其中,vertexShader和fragmentShader分别为顶点着色器和片元着色器代码。可以在ShaderMaterial对象中直接使用字符串,也可以将代码放置在HTML中,并通过document.getElementById()方法获取。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值