javascript - Three.js - 棋盘平面

标签 javascript three.js geometry plane

我正在尝试使用 Three.js 为网页 3D 示例创建棋盘。但是,我当前的代码分配了三种颜色,而我只需要两种颜色(黑色/白色)。如何重构数学以产生正确的棋盘?

// Geometry
var cbgeometry = new THREE.PlaneGeometry( 500, 500, 8, 8 );

// Materials
var cbmaterials = []; 

cbmaterials.push( new THREE.MeshBasicMaterial( { color: 0xffffff, side: THREE.DoubleSide }) );
cbmaterials.push( new THREE.MeshBasicMaterial( { color: 0x000000, side: THREE.DoubleSide }) );
cbmaterials.push( new THREE.MeshBasicMaterial( { color: 0x0000ff, side: THREE.DoubleSide }) );

// Assign a material to each face (each face is 2 triangles)
var l = cbgeometry.faces.length / 2;

for( var i = 0; i < l; i ++ ) {
    var j = 2 * i;
    cbgeometry.faces[ j ].materialIndex = i % 3;
    cbgeometry.faces[ j + 1 ].materialIndex = i % 3;
}

// Mesh
cb = new THREE.Mesh( cbgeometry, new THREE.MeshFaceMaterial( cbmaterials ) );
scene.add( cb );

最佳答案

编辑:

如果我们的开发环境不同,我会建议修复此代码:

编辑2:

索引选择部分中的“j”应该是“i”,我刚刚更改了它。

试试这个:

// Geometry
var cbgeometry = new THREE.PlaneGeometry( 500, 500, 8, 8 );

// Materials
var cbmaterials = []; 

cbmaterials.push( new THREE.MeshBasicMaterial( { color: 0xffffff, side: THREE.DoubleSide }) );
cbmaterials.push( new THREE.MeshBasicMaterial( { color: 0x000000, side: THREE.DoubleSide }) );

var l = cbgeometry.faces.length / 2; // <-- Right here. This should still be 8x8 (64)

console.log("This should be 64: " + l);// Just for debugging puporses, make sure this is 64

for( var i = 0; i < l; i ++ ) {
    j = i * 2; // <-- Added this back so we can do every other 'face'
    cbgeometry.faces[ j ].materialIndex = ((i + Math.floor(i/8)) % 2); // The code here is changed, replacing all 'i's with 'j's. KEEP THE 8
    cbgeometry.faces[ j + 1 ].materialIndex = ((i + Math.floor(i/8)) % 2); // Add this line in, the material index should stay the same, we're just doing the other half of the same face
}

// Mesh
cb = new THREE.Mesh( cbgeometry, new THREE.MeshFaceMaterial( cbmaterials ) );
scene.add( cb );

我评论了我在哪里进行了行更改。

我将 Math.floor(i/8) 放入 Material 索引中以抵消所有其他层。否则,它只是垂直线。

此外,第三种 Material 被删除,只留下白色和黑色可供使用。

感谢您提出这个问题,解决这个问题很有趣!

关于javascript - Three.js - 棋盘平面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22689898/

相关文章:

javascript - Angular 2 : check empty form if radio button is set

c# - 将 JSON 字符串转换为有意义的完整数据进行解析

javascript - Three.js/WebGL/GLSL - "#include <common>"是什么意思?

algorithm - 给定一组点,找出是否存在从这些点出发的凸四边形,除此之外没有其他点,那么它的角在里面

javascript - SunSpider JavaScript Benchmark 中的置信区间

javascript - ExtJs 4 ViewPort 与带有边框布局的面板 - 使用哪个以及为什么?

javascript - 三.js在浏览器中加载3d模型的问题

javascript - 如何在 Three.js 中比较像素

java - 使用 Java 或 PostgreSQL/PostGIS 将路径分为 N 段

math - 在 switch case 语句中检测 2 个变量值的 4 个排列