【问题标题】:Split three.js texture into chunks将three.js 纹理拆分成块
【发布时间】:2013-07-04 12:51:50
【问题描述】:

我需要在一组小平面上投影一个大图像(如拼图)。但是我不想独立加载图像片段。无论如何我可以加载单个纹理并用原始纹理的不同区域包裹每个平面吗?

【问题讨论】:

    标签: three.js textures


    【解决方案1】:

    您可以让每个平面网格共享相同的材质(因此共享一个复合纹理),但每个平面网格必须具有不同的几何形状。几何形状的 UV 会有所不同。使用这样的模式:

    var geometry1 = new THREE.PlaneGeometry( 10, 10 );
    var geometry2 = new THREE.PlaneGeometry( 10, 10 );
    
    geometry1.faceVertexUvs[ 0 ][ 0 ][ 0 ].set( 0.0, 1.0 ); // upper left quarter
    geometry1.faceVertexUvs[ 0 ][ 0 ][ 1 ].set( 0.0, 0.5 );
    geometry1.faceVertexUvs[ 0 ][ 0 ][ 2 ].set( 0.5, 0.5 );
    geometry1.faceVertexUvs[ 0 ][ 0 ][ 3 ].set( 0.5, 1.0 );
    
    geometry2.faceVertexUvs[ 0 ][ 0 ][ 0 ].set( 0.5, 0.5 ); // lower right quarter
    geometry2.faceVertexUvs[ 0 ][ 0 ][ 1 ].set( 0.5, 0.0 );
    geometry2.faceVertexUvs[ 0 ][ 0 ][ 2 ].set( 1.0, 0.0 );
    geometry2.faceVertexUvs[ 0 ][ 0 ][ 3 ].set( 1.0, 0.5 );
    
    
    mesh1 = new THREE.Mesh( geometry1, material );
    mesh2 = new THREE.Mesh( geometry2, material );
    

    同时使用WebGLRenderer 来防止失真。如果您需要使用CanvasRenderer,则必须对平面几何图形进行细分。

    var geometry1 = new THREE.PlaneGeometry( 10, 10, 4, 4 );
    

    方法是一样的——只是因为涉及的面孔更多,所以更乏味。

    three.js r.58

    【讨论】:

      猜你喜欢
      • 2014-04-15
      • 2021-01-29
      • 2012-09-17
      • 2017-10-05
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      相关资源
      最近更新 更多