raycast:无法阅读属性'可见'未定义的

时间:2016-06-08 18:50:13

标签: three.js

我试图加载我的.obj&将MTL文件转换为threejs并使用raycaster应用简单的墙碰撞。场景中有墙壁和其他物体。

  • 使用指针控件示例
  • 加载和纹理到位 问题是当使用raycaster时会抛出错误"无法读取未定义的属性#34;我猜我的引用很糟糕。

我使用scene.children在raycaster中传递对象 这是ray caster和obj loader的代码。请让我知道我哪里出错了

var mtlLoader = new THREE.MTLLoader();
                mtlLoader.setBaseUrl( 'neavik/' );
                mtlLoader.setPath( 'neavik/' );
                mtlLoader.load( 'room.mtl', function( materials ) {
                    materials.preload();
                    var objLoader = new THREE.OBJLoader();
                    objLoader.setMaterials( materials );
                    objLoader.setPath( 'neavik/' );
                    objLoader.load( 'room.obj', function ( object ) {

                        object.position.y = - 5;
                        object.scale.x=object.scale.y=object.scale.z=0.05

                        object.traverse( function( child ) { if ( child instanceof THREE.Mesh ) {
                            if (child.material.name == "Interior_wall")  {
                                        child.material = innerwall;
                                        child.castShadow = true;
                                        child.receiveShadow = true;
                                    }
                                    if (child.material.name == "Loby")  {
                                        child.material = innerwall1;
                                        child.castShadow = true;
                                        child.receiveShadow = true;
                                    }
                                    if (child.material.name == "TV_Black_Plastic")  {
                                        child.material = Black;
                                        child.castShadow = true;
                                        child.receiveShadow = true;
                                    }});
                                    object.name = "object";
                                    scene.add( object );
                });

        } );

// Raycast

var rayCaster = new THREE.Raycaster(controls.getObject().position, cameraDirection);    
    var intersects = rayCaster.intersectObject(scene.children, true);   //getting error on this line

    $("#status").html("camera direction x: " + cameraDirection.x + " , z: " + cameraDirection.z);

//代码的其余部分

1 个答案:

答案 0 :(得分:0)

我有同样的错误,在我的情况下,原因是要交叉的对象尚未存在或在交叉时发现。

因此我添加了一种空检查以防止出现此错误消息:

if (typeof scene != "undefined")