Stu*_*emo 4 javascript 3d three.js
我正在尝试创建一个每边使用不同图像的立方体CubeTextureLoader.我的过程是:
new THREE.CubeTextureLoader()相关代码如下.我可以使用单一材质绘制一个立方体,可以很好地使用所有面部THREE.TextureLoader(),但是当我使用时,CubeTextureLoader屏幕上没有任何内容或任何控制台错误.
var textureLoader = new THREE.CubeTextureLoader();
textureLoader.load([
'textures/face-1.jpg',
'textures/face-2.jpg',
'textures/face-3.jpg',
'textures/face-4.jpg',
'textures/face-5.jpg',
'textures/face-6.jpg'
], function (texture) {
var material = new THREE.MeshBasicMaterial({
color: 0xffffff,
map: texture
});
var cube = new THREE.Mesh(
new THREE.BoxGeometry(20, 20, 20),
material
);
// add & draw calls happen after all this
});
Run Code Online (Sandbox Code Playgroud)
我猜我使用了错误的材料类型或网格,但无法找到有关如何正确执行此操作的任何信息或示例.有任何想法吗?
正如Micnil所提到的,CubeTextureLoader是用于SkyBox或EnvMap的CubeMap.
请MeshFaceMaterial改用.
var textureLoader = new THREE.TextureLoader();
var texture0 = textureLoader.load( './0.jpg' );
var texture1 = textureLoader.load( './1.jpg' );
var texture2 = textureLoader.load( './2.jpg' );
var texture3 = textureLoader.load( './3.jpg' );
var texture4 = textureLoader.load( './4.jpg' );
var texture5 = textureLoader.load( './5.jpg' );
var materials = [
new THREE.MeshBasicMaterial( { map: texture0 } ),
new THREE.MeshBasicMaterial( { map: texture1 } ),
new THREE.MeshBasicMaterial( { map: texture2 } ),
new THREE.MeshBasicMaterial( { map: texture3 } ),
new THREE.MeshBasicMaterial( { map: texture4 } ),
new THREE.MeshBasicMaterial( { map: texture5 } )
];
var faceMaterial = new THREE.MeshFaceMaterial( materials );
var geometry = new THREE.BoxGeometry( 20, 20, 20 );
var boxMesh = new THREE.Mesh( geometry, faceMaterial );
Run Code Online (Sandbox Code Playgroud)
THREE.MultiMaterial也已被删除,如https://github.com/mrdoob/three.js/issues/10931中所述
现在,您可以在网格构造器中使用一系列材料。例如:
let cubeGeometry = new THREE.BoxGeometry(1,1,1);
let loader = new THREE.TextureLoader();
let materialArray = [
new THREE.MeshBasicMaterial( { map: loader.load("xpos.png") } ),
new THREE.MeshBasicMaterial( { map: loader.load("xneg.png") } ),
new THREE.MeshBasicMaterial( { map: loader.load("ypos.png") } ),
new THREE.MeshBasicMaterial( { map: loader.load("yneg.png") } ),
new THREE.MeshBasicMaterial( { map: loader.load("zpos.png") } ),
new THREE.MeshBasicMaterial( { map: loader.load("zneg.png") } ),
];
let mesh = new THREE.Mesh( cubeGeometry, materialArray );
Run Code Online (Sandbox Code Playgroud)