zoukankan      html  css  js  c++  java
  • threejs通过射线Ray获取指定的点

    例:获取cube方向上的面的中点坐标(该cube默认方向为(0,1,0))

    (中心点向cube quaternion 方向上发射射线,与正前方的面相交的点即为目标点;

    由于ray只支持box和face,所以需要先生成与cube相同的box)

    let center = cube.position.clone(),
      quaternion = cube.quaternion.clone();
     
    //获取cube的长宽高
    cube.geometry.computeBoundingBox();
    let size = this.cube.geometry.boundingBox.getSize();
    let scale = this.cube.scale;
    let scaleSize = new THREE.Vector3(size.x * scale.x, size.y * scale.y, size.z * scale.z);
     
    //在坐标原点位置生成box,方便ray射线操作.该box长宽高与cube一致,只是quaternion不同
    let box = new THREE.Box3()
        .setFromCenterAndSize(new THREE.Vector3(0, 0, 0), scaleSize);
     
    //在坐标原点位置生成box和ray,得到目标点,再通过quaterion变换到目标位置
    let ray = new THREE.Ray(new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, 1, 0));
    let intersect = ray.intersectBox(box);
     
    //该点由于射线原点在(0,0,0),所以applyQuaternion只起到旋转作用
    let rotatedPoint = intersect.applyQuaternion(quaternion)
    //最后位移center 的向量
    let point=rotatedPoint.add(center)
     
  • 相关阅读:
    Python如何爬取淘宝MM呢?教你一招
    Python爬虫实战之如何爬取百度贴吧帖子?案例详解
    SpringBoot定时任务如何正确运用?案例详解
    JS数组之重排序方法
    JS数组之栈和队列
    JS数组之转换方法
    计算机相关推荐教程
    多维数组
    重新认识变量和数组
    数组
  • 原文地址:https://www.cnblogs.com/brainworld/p/8662458.html
Copyright © 2011-2022 走看看