首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Three.js -多材质平面

Three.js -多材质平面
EN

Stack Overflow用户
提问于 2012-09-15 23:30:28
回答 1查看 7K关注 0票数 5

我正在尝试在一个平面上使用多种材质来制作一个简单的地形编辑器。所以我创建了几个材质,并尝试为我的平面中的每个顶点指定一个材质索引:

代码语言:javascript
复制
var materials = [];
materials.push(new THREE.MeshFaceMaterial( { color: 0xff0000 }));
materials.push(new THREE.MeshFaceMaterial( { color: 0x00ff00 }));
materials.push(new THREE.MeshFaceMaterial( { color: 0x0000ff }));
// Plane
var planegeo = new THREE.PlaneGeometry( 500, 500, 10, 10 );
planegeo.materials = materials;
for(var i = 0; i <  planegeo.faces.length; i++)
{
    planegeo.faces[i].materialIndex = (i%3);
}

planegeo.dynamic = true;
this.plane = THREE.SceneUtils.createMultiMaterialObject(planegeo, materials);

但是我总是在着色器中得到一大堆错误,或者如果我使用MeshBasicMaterial而不是FaceMaterial,只会得到一个全红色的平面。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-16 02:12:41

要获得具有三种颜色的棋盘图案,请执行以下操作:

代码语言:javascript
复制
// geometry
var geometry = new THREE.PlaneGeometry( 500, 500, 10, 10 );

// materials
var materials = [];
materials.push( new THREE.MeshBasicMaterial( { color: 0xff0000 }) );
materials.push( new THREE.MeshBasicMaterial( { color: 0x00ff00 }) );
materials.push( new THREE.MeshBasicMaterial( { color: 0x0000ff }) );

// assign a material to each face (each face is 2 triangles)
var l = geometry.faces.length / 2;
for( var i = 0; i < l; i ++ ) {
    var j = 2 * i;
    geometry.faces[ j ].materialIndex = i % 3;
    geometry.faces[ j + 1 ].materialIndex = i % 3;
}

// mesh
mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) );
scene.add( mesh );

编辑:针对three.js r.60更新

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12438674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档