Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js shadow对应于边界框,而不是实际的模型形状_Three.js - Fatal编程技术网

Three.js shadow对应于边界框,而不是实际的模型形状

Three.js shadow对应于边界框,而不是实际的模型形状,three.js,Three.js,我试图为恐龙模型(Three.JSON格式)获得一个正确的阴影 阴影显示出来了,但它是矩形的,好像它认为恐龙模型只是一个简单的长方体(如下截图) 如何生成与恐龙实际形状相对应的阴影 我已经在Blender中检查过OBJ模型中没有可见的包含框,我使用Three.js OBJ到JSON转换器从中创建了JSON模型文件 以下是一些相关代码片段: /* Dinosaur! */ var loader = new THREE.JSONLoader(); var filePath = 'models/t

我试图为恐龙模型(Three.JSON格式)获得一个正确的阴影

阴影显示出来了,但它是矩形的,好像它认为恐龙模型只是一个简单的长方体(如下截图)

如何生成与恐龙实际形状相对应的阴影

我已经在Blender中检查过OBJ模型中没有可见的包含框,我使用Three.js OBJ到JSON转换器从中创建了JSON模型文件

以下是一些相关代码片段:

/* Dinosaur! */

var loader = new THREE.JSONLoader();

var filePath = 'models/trex/trex.js';

loader.load(filePath, function(geometry, materials) {

    mesh = new THREE.Mesh( geometry,
        new THREE.MeshFaceMaterial( materials ) );

    mesh.scale.set(1000, 1000, 1000);
    mesh.position.set( 0, -75, 0 );
    mesh.rotation.y = Math.PI;
    mesh.castShadow = true;

    scene.add( mesh );

});

...

/* Lights */

var ambientLight = new THREE.AmbientLight( 0xFFFFFF );
scene.add( ambientLight );

var directionalLight = new THREE.DirectionalLight( 0xeeeeff, 0.5 );
directionalLight.position.set(0, 0, 1);
scene.add( directionalLight );

var spotlight = new THREE.SpotLight(0xFFFFFF, 0.2, 2000);
spotlight.position.set( 50, 100, 0 );
spotlight.target.position.set( 0, 0, 0 );
spotlight.castShadow = true;
scene.add( spotlight );

...

/* Renderer */

renderer = new THREE.WebGLRenderer();
renderer.setClearColor(0xffffff);
renderer.setSize(renderWidth, renderHeight);

renderer.shadowMapEnabled = true;
renderer.shadowMapSoft = true;

container.appendChild(renderer.domElement);

...

/* Terrain */

var img = new Image();
img.onload = function() {

    heightData = buildHeightData(img);

    var plane = new THREE.PlaneGeometry( 100, 100, HEIGHT_MAP_SIZE-1, HEIGHT_MAP_SIZE-1 );

    var l = plane.vertices.length;

    for( var i=0; i < l; i++ ) {
        // We change z because by default the plane will be placed vertically. 
        // We rotate it afterwards (so the effect on z will end up being the 
        // effect on y).
        plane.vertices[i].z = heightData[i] * 10;
    }

    terrainMesh = buildMesh(
        {
            geometry: plane,
            scale: 100,
            x: 0,
            y: -370,
            z: -1050,
            material: terrainMaterial
        } );

    terrainMesh.rotation.x = -Math.PI / 2;
    terrainMesh.receiveShadow = true;
    scene.add( terrainMesh );

};
img.src = 'img/heightmap.jpg';
/*恐龙*/
var loader=new THREE.JSONLoader();
var filePath='models/trex/trex.js';
loader.load(文件路径、函数(几何体、材质){
网格=新的三个网格(几何体,
新三、网面材料(材料));
网。规模。设置(1000,1000,1000);
网格位置设置(0,-75,0);
mesh.rotation.y=Math.PI;
mesh.castShadow=true;
场景。添加(网格);
});
...
/*灯光*/
var环境光=新的三个环境光(0xFFFFFF);
场景。添加(环境光);
var方向灯=新的三个方向灯(0xEEFF,0.5);
方向灯位置设置(0,0,1);
场景。添加(方向光);
var spotlight=新的三个聚光灯(0xFFFFFF,0.22000);
聚光灯位置设置(50,100,0);
聚光灯.target.position.set(0,0,0);
spotlight.castShadow=true;
场景。添加(聚光灯);
...
/*渲染器*/
renderer=new THREE.WebGLRenderer();
renderer.setClearColor(0xffffff);
renderer.setSize(renderWidth,renderHeight);
renderer.shadowMapEnabled=true;
renderer.shadowMapSoft=true;
container.appendChild(renderer.domeElement);
...
/*地形*/
var img=新图像();
img.onload=函数(){
高度数据=建筑高度数据(img);
var plane=新的三个平面几何图形(100100,高度图尺寸-1,高度图尺寸-1);
var l=平面.顶点.长度;
对于(变量i=0;i
p、 我使用的是Three.js v66


哎呀。我得出了一个错误的结论。这只是因为聚光灯不够高(见新截图,shadowcameravible=true)


一些代码可能会有所帮助。如何创建场景、加载恐龙、启用其阴影?@NikolaDimitroff我添加了代码片段。谢谢。这个模型是版权所有的。你不应该把它贴在这里或任何地方。@gaitat好的。。。我把它拿走了。在发布之前,我确实与内容所有者进行了核实。好吧。从你的帖子上看不清楚。