0

私はthree.jsにかなり慣れていません。r55 を使用していくつかのものをまとめ、ライトを追加したいと考えました。Mrdoobのドキュメントに従ってDirectionalLightを追加しようとしました-運が悪い...追加しようとしたライトが表示されません-デバッグ用にsh​​adowCameraVisibleを追加しましたが、表示されません...私のコードが間違っている可能性がありますか??? ご意見をお待ちしております!!

function init() {
    container = document.createElement('div');
    document.body.appendChild(container);

    scene = new THREE.Scene();
    camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);

    renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    container.appendChild(renderer.domElement);

    //CUBE
    var material = new THREE.MeshBasicMaterial({
        color: 0xff0000
    });
    var geometry = new THREE.CubeGeometry(x, y, z);
    cube = new THREE.Mesh(geometry, material);
    cube.position.z = z / 2;
    scene.add(cube);

    //FLOOR
    //floor color:
    var floorMaterial = new THREE.MeshBasicMaterial({
        color: 0xcccccc
    });
    //floor size:
    var floorGeometry = new THREE.PlaneGeometry(20, 20, 1, 1);
    var floor = new THREE.Mesh(floorGeometry, floorMaterial);
    floor.position.y = -0.5;
    floor.doubleSided = true;
    scene.add(floor);

    //LIGHTS
    var dLight = new THREE.DirectionalLight(0xffffff);
    dLight.position.set = (0, 0, 1);
    dLight.shadowCameraVisible = true;
    dLight.shadowCameraNear = 1;
    dLight.shadowCameraFar = 150;
    dLight.castshadow = true;
    scene.add(dLight);

    //CAMERA POSITION
    camera.position.z = 50;
    controls = new THREE.TrackballControls(camera);

    renderer.shadowMapEnabled = true;
    renderer.shadowMapType = THREE.PCFShadowMap;

}
4

4 に答える 4

1
dLight.position.set = (0,0,1);

おっと、それは正しく見えません...これを実行した後、ライトの位置は 3D ベクトルではNaNなく、ライトの位置で行われた計算から生成されます。

dLight.position.set(0,0,1);
// or
dLight.position = new THREE.Vector3(0,0,1);
于 2013-02-11T18:22:55.363 に答える
1

あなたはによって光を設定します

light.position.set (0,0,1);

しかし、あなたの光はジオメトリの中にあると思います。http://jsfiddle.net/aSt8c/を見てください。影付きの有効なディレクショナル ライトがあります。

于 2013-02-11T20:37:09.453 に答える
0

ポイントは、オブジェクトのマテリアルが MeshLambertMaterial または MeshPhongMaterial でなければならないということです。他の素材は光を反射できません。

//CUBE var material = new THREE.MeshPhongMaterial({ color: 0xff0000 }); OR var material = new THREE.MeshLambertMaterial({ color: 0xff0000 });

MeshPhongMaterial は光沢のあるサーフェスに使用でき、MeshLambertMaterial は光沢のない (ランバート) サーフェスに使用できます。

于 2014-07-08T17:22:09.297 に答える