繁体   English   中英

Three.js-在立方体上而不是在导入的JSON网格对象上渲染阴影

[英]Three.js - shadows rendering on cube but not on imported json mesh object

我试图让我的赛车在地板上投下阴影。 阴影从多维数据集开始工作(多维数据集正在投射阴影),但是racecar(导入的json网格对象)没有投射阴影。 我怎样才能使赛车蒙上阴影? 这与在材料上烘焙的json文件有关吗? 代码obj.castShadow = true; 实际需要继续obj的子对象吗? 在哪种情况下,哪个孩子? 我在这里做错了什么?

这是json文件这是演示的链接

以下是相关代码:

    var loader = new THREE.ObjectLoader();  
    loader.load("models/ferrari-f1-race-car.json", function (obj) {
        obj.castShadow = true;
        obj.scale.set(50,50,50);
        obj.position.x = 30;
        obj.rotation.y = Math.PI/1;
        scene.add (obj);
    });

    boxgeometry = new THREE.BoxGeometry(100, 100, 100);
    boxmaterial = new THREE.MeshLambertMaterial({
        color: 0x0aeedf
    });
    var cube = new THREE.Mesh(boxgeometry, boxmaterial);
    cube.castShadow = true;
    cube.position.x = -80;
    cube.position.y = 50;
    cube.position.z = 0;
    scene.add(cube);

    function createFloor(){ 
        floor = new THREE.Mesh(new THREE.PlaneBufferGeometry(1000,500), new THREE.MeshBasicMaterial({color: 0x8594a2}));
        floor.rotation.x = -Math.PI/2;
        floor.position.y = -0;
        floor.castShadow = false;
        floor.receiveShadow = true;
        scene.add(floor);
    }

投射阴影非常昂贵,而且自定义对象也无法很好地支持阴影,因此经常会出现错误。

最好的解决方案是在汽车下方的透明平面上绘制阴影纹理。 如果您需要旋转汽车或灯光并需要精确的阴影,则可能会出现问题,因为纹理不会随角度变化。 由作者决定使用技巧(旋转相机或使用偏斜的阴影)。 仍然可以提供出色的效果图,请查看http://helloracer.com/racer-s/以及使用的简单图像:

带有阴影的阴影纹理以替换投射阴影

更令人印象深刻:

在此处输入图片说明

对于此逼真的演示, 请访问http://www.littleworkshop.fr/renaultespace/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM