3

I need to project a big image on a group of small planes (like a puzzle). However I don't want to load the image pieces independently. Is there anyway I can load a single texture and wrap each plane with a different region of the original texture?

4

1 回答 1

4

您可以让每个平面网格共享相同的材质(因此共享单个复合纹理),但每个平面网格必须具有不同的几何形状。几何形状的 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 );

方法是一样的——只是因为涉及到更多的面孔而更加乏味。

三.js r.58

于 2013-07-06T18:43:26.007 回答