三.js - 使用CubeTextureLoader在立方体的每个面上创建不同的图像
Three.js - Using CubeTextureLoader to create a different image on each face of a cube
我正在尝试使用 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
});
我猜我使用了错误的材质类型或网格,但找不到有关如何正确执行此操作的任何信息或示例。有什么想法吗?
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 );
正如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 );
相关文章:
- 从2D RGB阵列创建图像
- 从Div创建图像,并使用Javascript和ASP.net将其保存到服务器
- Angular ng重复创建图像-也尝试解析url
- Javascript从包含日期的文件名创建图像库
- 使用jquery创建图像序列
- 如何创建图像数组作为链接
- 在消耗大量内存后,浏览器在创建图像Blob的ObjectURL时抛出错误
- 如何在JQuery中创建图像托盘
- 如何使用createjs创建图像映射
- 我想在不使用额外插件的情况下使用鼠标拖动来创建图像滑块
- 使用js(不是PHP)创建图像文件
- 如何使用数据在服务器上创建图像文件
- JavaScript:从字节数组创建图像资源
- 如何在 JavaScript 中创建图像而不是图像
- 如何在 JQuery 中创建图像“更改”效果
- Javascript - 如何使用基于站点像素颜色的画布创建图像
- 为 Web 应用程序创建图像工具栏
- 创建图像对象数组
- 通过javascript动态创建图像映射
- 如何从 mysql 数据库中的图像创建图像幻灯片