每个面使用不同纹理的Three.js立方体。如何隐藏边缘/顶点。

3

我正在尝试使用Three.js创建一个立方体,并在立方体的每个面上使用不同的图像作为纹理。

如何隐藏网格的边缘/顶点?

代码:

var container, camera, scene, renderer, cube;

init();
animate();

function init(){
    container = document.getElementById('container');
    scene = new THREE.Scene();
    camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 1000);
    camera.position.y = 150;
    camera.position.z = 500;
    scene.add( camera );

    var materials = [];
    for ( var i = 0; i < 6; i ++ ) {
        materials.push( new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( 'img/' + i + '.png') } ) );
    }

    cube = new THREE.Mesh( new THREE.CubeGeometry( 200, 200, 200, 5,5,5, materials ), new THREE.MeshFaceMaterial() );
    cube.position.y = 150;
    scene.add( cube );
    renderer = new THREE.CanvasRenderer();
    renderer.setSize( window.innerWidth, window.innerHeight);
    container.appendChild( renderer.domElement );
    }

function animate() {
    requestAnimationFrame( animate );
    render();
}

function render(){
    cube.rotation.y += 0.005;
    renderer.render( scene, camera );
}

这段代码似乎不会显示边缘...你需要在某个地方设置wireframe:true标志才能看到它们。你能否在某个地方发布你的代码实例,以便我们可以看到你在说什么? - Stemkoski
我想在 jsfiddle 上发布一个示例,但它无法工作。 - gang
当我在for循环中使用overdraw: true时,它不再显示边缘。 当我不像EliSherer建议的那样对网格进行细分时,立方体的面会以奇怪的方式移动。 请参见https://github.com/mrdoob/three.js/issues/659。 - gang
3个回答

3

变更:

for ( var i = 0; i < 6; i ++ ) {
    materials.push( new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( 'img/' + i + '.jpg') } ) );
}

to:

for ( var i = 0; i < 6; i ++ ) {
    materials.push( new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( 'img/' + i + '.jpg'), overdraw: true } ) );
}

1

更改这一行:

cube = new THREE.Mesh( new THREE.CubeGeometry( 200, 200, 200, 5,5,5, materials ), new THREE.MeshFaceMaterial() );

致:

cube = new THREE.Mesh( new THREE.CubeGeometry( 200, 200, 200, 1,1,1, materials ), new THREE.MeshFaceMaterial() );

0

尝试使用另一个渲染器。更改此行:

 renderer = new THREE.CanvasRenderer();

变成这个:

 renderer = new THREE.WebGLRenderer();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接