Three.js shadow对应于边界框,而不是实际的模型形状
我试图为恐龙模型(Three.JSON格式)获得一个正确的阴影 阴影显示出来了,但它是矩形的,好像它认为恐龙模型只是一个简单的长方体(如下截图) 如何生成与恐龙实际形状相对应的阴影 我已经在Blender中检查过OBJ模型中没有可见的包含框,我使用Three.js OBJ到JSON转换器从中创建了JSON模型文件 以下是一些相关代码片段: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
/* 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好的。。。我把它拿走了。在发布之前,我确实与内容所有者进行了核实。好吧。从你的帖子上看不清楚。