Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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

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
Javascript 使用自己的几何图形进行碰撞检测';我不能在Three.js中工作_Javascript_Three.js_Collision Detection - Fatal编程技术网

Javascript 使用自己的几何图形进行碰撞检测';我不能在Three.js中工作

Javascript 使用自己的几何图形进行碰撞检测';我不能在Three.js中工作,javascript,three.js,collision-detection,Javascript,Three.js,Collision Detection,我在THREE.js库中遇到碰撞检测问题。下面我找到了一个指向我的示例的链接(使用箭头键移动身体对象): 在本例中,我希望创建自己的几何体(“浮雕”和“主体”)并检测它们之间的碰撞。当主体的顶点位于浮雕内部时,左上角的红色正方形的不透明度为1,否则为半透明 车身的几何图形: var up = new THREE.CylinderGeometry(1, 1, 0.2, 3, 1), down = new THREE.CylinderGeometry(1, 1, 0.2, 3, 1

我在THREE.js库中遇到碰撞检测问题。下面我找到了一个指向我的示例的链接(使用箭头键移动身体对象):

在本例中,我希望创建自己的几何体(“浮雕”和“主体”)并检测它们之间的碰撞。当主体的顶点位于浮雕内部时,左上角的红色正方形的不透明度为1,否则为半透明

车身的几何图形:

var up = new THREE.CylinderGeometry(1, 1, 0.2, 3, 1),
        down = new THREE.CylinderGeometry(1, 1, 0.2, 3, 1);
for (var i = 0, l = up.vertices.length; i < l; i++) {
    up.vertices[i].x *= 1.75;
    up.vertices[i].z = up.vertices[i].z * 0.5;
    down.vertices[i].x *= -0.7;
    down.vertices[i].z = -down.vertices[i].z * 2.3 + 1;
}
THREE.GeometryUtils.merge(up, down);
var up=新的三圆柱几何体(1,1,0.2,3,1),
向下=新的三个圆柱几何体(1,1,0.2,3,1);
对于(var i=0,l=up.vertices.length;i
浮雕几何图形:

var geometry = new THREE.CubeGeometry(1, 32, 32, 1, 16, 16);
geometry.applyMatrix(new THREE.Matrix4().makeRotationZ(Math.PI / 2));
for (var i = 0, l = geometry.vertices.length; i < l; i++) {
    var x = Math.floor(i / 17),
        y = Math.floor(i / 289),
        z = i % 17;
    geometry.vertices[i].y = y === 0 ? (x - 8) * (x - 8) * 0.1 : -10;
}
var geometry=新的三个立方计量法(1,32,32,1,16,16);
geometry.applyMatrix(新的三个.Matrix4().makeRotationZ(Math.PI/2));
对于(var i=0,l=geometry.vertices.length;i
检测碰撞情况的功能:

function test() {
    var originPoint = body.position.clone();
    for (var vi = 0, vl = body.geometry.vertices.length; vi < vl; vi++) {
        var localVertex = body.geometry.vertices[vi].clone(),
            globalVertex = body.matrix.multiplyVector3(localVertex),
            directionVector = globalVertex.subSelf(body.position),
            ray = new THREE.Raycaster(originPoint, directionVector.clone().normalize()),
            results = ray.intersectObjects([relief]);

        if (results.length > 0 && results[0].distance < directionVector.length()) return true;
    }
    return false;
}
功能测试(){
var originPoint=body.position.clone();
对于(var vi=0,vl=body.geometry.vertices.length;vi0&&results[0].distance
它可以工作,但在某些情况下,主体位于浮雕的边界上,并且红色正方形是半透明的(而不是不透明1)。看起来是这样的:


这意味着,碰撞检测没有启动。为什么?为了检测任何冲突情况,我应该在代码中做哪些更改?

我无法为您调试代码,但我建议您升级到three.js r.61——您的代码与库的旧版本兼容。另外,当您移动顶点时,如果无法更正面质心、面法线和面顶点法线,则可能会遇到问题。@user2808747-很明显,默认情况下,JSFIDLE提供的three.js版本(当前的v54)已经过时。相反,在“框架和扩展”下选择“无”,然后在HTML部分输入threejs.org/build/three.min.js“>以始终使用库的最新版本。