여러면으로 구성된 맞춤형 지오메트리로 Object3D에 텍스처를 적용하려고합니다. 사용자의 관점에서 볼 때 이것은 단일 표면이어야하며 텍스쳐는 측면 비율을 유지하면서 이상적으로 늘어나야합니다. 나는 다양한 질감 설정을 시도했지만 지금까지 운이 없다. 위해서는 http://jsfiddle.net/Immugio/Lg5vbzot/Three.js를 사용하여 여러면에 걸쳐 텍스처 늘이기
function render() {
renderer.render(scene, camera);
};
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);
var light = new THREE.DirectionalLight(0xffffff);
light.intensity = 0.5;
light.position.set(0, 1, 1).normalize();
scene.add(light);
var ambient = new THREE.AmbientLight(0x777777);
scene.add(ambient);
var controls = new THREE.OrbitControls(camera);
controls.damping = 0.2;
controls.addEventListener('change', render);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
THREE.ImageUtils.crossOrigin = '';
var textureMaterial = new THREE.MeshPhongMaterial({
map: THREE.ImageUtils.loadTexture('https://dl.dropboxusercontent.com/u/20925853/crate.jpg', null, function() {
render();
})
});
var geo = new THREE.Geometry();
geo.vertices = [
new THREE.Vector3(0, 0, 0),
new THREE.Vector3(0, 4, 0),
new THREE.Vector3(4, 4, 0),
new THREE.Vector3(4, 0, 0),
new THREE.Vector3(1, 4, 0),
new THREE.Vector3(1, 6, 0),
new THREE.Vector3(3, 6, 0),
new THREE.Vector3(3, 4, 0)
];
geo.faces = [
new THREE.Face3(0, 1, 2),
new THREE.Face3(0, 2, 3),
new THREE.Face3(4, 5, 6),
new THREE.Face3(4, 6, 7)
];
var faceuv = [
new THREE.Vector2(0, 1),
new THREE.Vector2(1, 1),
new THREE.Vector2(1, 0),
new THREE.Vector2(0, 0)
];
geo.faceVertexUvs[0] = [];
geo.faceVertexUvs[0][0] = [faceuv[0], faceuv[1], faceuv[2]];
geo.faceVertexUvs[0][1] = [faceuv[0], faceuv[2], faceuv[3]];
geo.faceVertexUvs[0][2] = [faceuv[0], faceuv[1], faceuv[2]];
geo.faceVertexUvs[0][3] = [faceuv[0], faceuv[2], faceuv[3]];
geo.computeFaceNormals();
var mesh = new THREE.Mesh(geo, textureMaterial);
mesh.rotation.x = Math.PI/180 * 135;
mesh.rotation.z = Math.PI/180 * 135;
scene.add(mesh);
camera.position.z = 10;
로 교체. 이를 위해서는 두 개의 텍스처를 필요로합니다. 256 x 256 크기로 이미지 크기를 조정하고 다시 시도하십시오. – WestLangley
@WestLangley 그것을 지적 해 주셔서 감사합니다. 실수로 'RepeatWrapping'비트가 나타납니다. 내가 jsfiddle에 일치하도록 코드 샘플을 수정했습니다. – Immugio