【发布时间】:2019-11-23 02:26:05
【问题描述】:
好的,你好。我刚刚进入 threejs。我目前正在开发一种积木游戏(比较 Minecraft)。
我决定不将整个程序基于对象,而是基于平面。 (每个 PlaneGeometry 类)
由于我几乎完成了渲染器的编写,我想使用具有不同纹理的不同块 - 就像在我的世界中一样 - 因为到目前为止每个块的纹理都是相同的。
如何在一个 Geometry 对象上使用不同的 THREE.Mesh 纹理?
这有可能吗?有人知道我该怎么做吗?
我在下面发布了我的部分代码:
/* geometry.js */
let size = 100;
let matrix = new THREE.Matrix4();
for (let z = 0; z < world.size.depth; z++) {
for (let x = 0; x < world.size.width; x++) {
for (let y = 0; y < world.size.height; y++) {
matrix.makeTranslation(
x * size - (world.size.width / 2) * size,
y * size,
z * size - (world.size.depth / 2) * size
);
// generate 6 PlaneGeometry's (6 cube sides)
// and merge visible ones to the geometry
geometry.merge(PlaneGeometry_N_0to5, matrix);
}
}
}
geometry = new THREE.BufferGeometry().fromGeometry(geometry);
/* texture.js */
// make this stuff for multiple textures (different $path$) for sure
let loader = new THREE.TextureLoader();
let texture = loader.load("$path$"); // path of texture
texture.magFilter = THREE.NearestFilter;
texture.minFilter = THREE.LinearMipMapLinearFilter;
let mesh = new THREE.Mesh(
geometry,
new THREE.MeshLambertMaterial({
map: texture,
vertexColors: THREE.VertexColors,
side: THREE.DoubleSide
})
);
scene.add(mesh)
【问题讨论】:
标签: javascript html three.js 3d rendering