5

このページの基本的な threejs の例で、threejs カメラの dat-gui コントロールを有効にしたいと考えています。

https://github.com/mrdoob/three.js/

var camera, scene, renderer;
var geometry, material, mesh;

init();
animate();

function init() {

    camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 10000 );
    camera.position.z = 1000;

    scene = new THREE.Scene();

    geometry = new THREE.CubeGeometry( 200, 200, 200 );
    material = new THREE.MeshBasicMaterial( { color: 0xff0000, wireframe: true } );

    mesh = new THREE.Mesh( geometry, material );
    scene.add( mesh );

    renderer = new THREE.CanvasRenderer();
    renderer.setSize( window.innerWidth, window.innerHeight );

    document.body.appendChild( renderer.domElement );

}

function animate() {

    // note: three.js includes requestAnimationFrame shim
    requestAnimationFrame( animate );

    mesh.rotation.x += 0.01;
    mesh.rotation.y += 0.02;

    renderer.render( scene, camera );

}

私は次のコードを試しました:

var params = {
    z: 100
}

var gui = new dat.GUI();

gui.add(params, 'z', -500,500).step(5).onChange(function(value){
        changeCameraZ(value);
    });
function changeCameraZ(value){
    camera.position.z = value;
}

これは機能しますが、新しい関数を作成する必要があることを意味します。 changeBlah();

three.js 変数ごとに、GUI から変更したいと考えています。これを達成するためのより良い、よりクリーンな方法はありますか?

4

2 に答える 2

10

DAT.gui が参照を使用する方法を利用することもできます。

gui.add( camera.position , 'z', -500, 500 ).step(5)

そして例

http://jsfiddle.net/2WKqL/2/

于 2012-09-27T13:09:05.750 に答える
4

このワンライナーは機能するはずです。

gui.add( params, 'z', -500, 500 ).step(5).onChange( function( value ){ camera.position.z = value; } );
于 2012-09-27T11:37:52.540 に答える