我需要在一组小平面上投影一个大图像(就像拼图一样)。但是我不想独立加载图像片段。无论如何,我可以加载单个纹理并用原始纹理的不同区域包裹每个平面吗?
您可以让每个平面网格共享相同的材质(因此共享单个复合纹理),但每个平面网格必须具有不同的几何形状。几何形状的 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 );
Run Code Online (Sandbox Code Playgroud)
也可用于WebGLRenderer防止失真。如果您需要使用CanvasRenderer,则必须对平面几何图形进行细分。
var geometry1 = new THREE.PlaneGeometry( 10, 10, 4, 4 );
Run Code Online (Sandbox Code Playgroud)
方法是一样的——只是更加乏味,因为涉及的面孔更多。
三.js r.58