Three.js 中的纹理
Texture in Three.js
我正在尝试将纹理应用于 three.js 中的 birds example。
// instantiate a loader
var loader = new THREE.TextureLoader();
// load a resource
loader.load('imgs/birdtexture.jpg', function (texture) {
var material = new THREE.MeshBasicMaterial( {
map: texture,
side: THREE.DoubleSide
});
var bird = new THREE.Mesh( new Bird(), material);
);
出于某种原因,这不起作用,而且我没有收到任何错误。看来我遗漏了什么。我做错了什么?
编辑:
我按照描述 here 使用 UV 使其工作。这是代码:
var texture = new THREE.TextureLoader().load("imgs/birdtexture.jpg");
texture.wrapS = THREE.RepeatWrapping;
texture.wrapT = THREE.RepeatWrapping;
texture.repeat.set( 0.05, 0.05);
var geometry = new Bird();
function assignUVs(geometry) {
geometry.faceVertexUvs[0] = [];
geometry.faces.forEach(function(face) {
var components = ['x', 'y', 'z'].sort(function(a, b) {
return Math.abs(face.normal[a]) > Math.abs(face.normal[b]);
});
var v1 = geometry.vertices[face.a];
var v2 = geometry.vertices[face.b];
var v3 = geometry.vertices[face.c];
geometry.faceVertexUvs[0].push([
new THREE.Vector2(v1[components[0]], v1[components[1]]),
new THREE.Vector2(v2[components[0]], v2[components[1]]),
new THREE.Vector2(v3[components[0]], v3[components[1]])
]);
});
geometry.uvsNeedUpdate = true;
}
assignUVs(geometry);
var bird = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial( {map:texture, side: THREE.DoubleSide }));
试试这个(未测试):
// instantiate a loader
var loader = new THREE.TextureLoader();
// Create material
var material = new THREE.MeshBasicMaterial({side: THREE.DoubleSide});
// load a resource
loader.load('imgs/birdtexture.jpg', function (texture) {
marterial.map = texture;
});
var bird = new THREE.Mesh( new Bird(), material);
);
我正在尝试将纹理应用于 three.js 中的 birds example。
// instantiate a loader
var loader = new THREE.TextureLoader();
// load a resource
loader.load('imgs/birdtexture.jpg', function (texture) {
var material = new THREE.MeshBasicMaterial( {
map: texture,
side: THREE.DoubleSide
});
var bird = new THREE.Mesh( new Bird(), material);
);
出于某种原因,这不起作用,而且我没有收到任何错误。看来我遗漏了什么。我做错了什么?
编辑: 我按照描述 here 使用 UV 使其工作。这是代码:
var texture = new THREE.TextureLoader().load("imgs/birdtexture.jpg");
texture.wrapS = THREE.RepeatWrapping;
texture.wrapT = THREE.RepeatWrapping;
texture.repeat.set( 0.05, 0.05);
var geometry = new Bird();
function assignUVs(geometry) {
geometry.faceVertexUvs[0] = [];
geometry.faces.forEach(function(face) {
var components = ['x', 'y', 'z'].sort(function(a, b) {
return Math.abs(face.normal[a]) > Math.abs(face.normal[b]);
});
var v1 = geometry.vertices[face.a];
var v2 = geometry.vertices[face.b];
var v3 = geometry.vertices[face.c];
geometry.faceVertexUvs[0].push([
new THREE.Vector2(v1[components[0]], v1[components[1]]),
new THREE.Vector2(v2[components[0]], v2[components[1]]),
new THREE.Vector2(v3[components[0]], v3[components[1]])
]);
});
geometry.uvsNeedUpdate = true;
}
assignUVs(geometry);
var bird = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial( {map:texture, side: THREE.DoubleSide }));
试试这个(未测试):
// instantiate a loader
var loader = new THREE.TextureLoader();
// Create material
var material = new THREE.MeshBasicMaterial({side: THREE.DoubleSide});
// load a resource
loader.load('imgs/birdtexture.jpg', function (texture) {
marterial.map = texture;
});
var bird = new THREE.Mesh( new Bird(), material);
);