• (转)地形碰撞高度计算


    地形碰撞计算:
    一.如果是鼠标点击地面,
    可将射线固定长度并分段,然后用射线与每一个分段上的点所落在的地面tile(两个三角形)进行求交,
    相交则返回对应位置,否则继续与下一个段上的点所落在的地面tile求交
    /*
          0      1
           ---->
          | \  |
          |  \ |
        2 V ---  3   
    */
    这里不讨论点击屏幕求射线方法与射线分段处理,只算求交
    如下d3d求交得出uv,再求位置:
     VECTOR3 vPickPos;
     // 右边:
     if( D3DXIntersectTri(&v0, &v1, &v3, &vOrig, &vDir, &u, &v, NULL) == TRUE)
     {
      vPickPos = v0 + u * (v1 - v0) + v * (v3 - v0);
      return vPickPos.z;
     }
     // 左边:
     if( D3DXIntersectTri(&v0, &v3, &v2, &vOrig, &vDir, &u, &v, NULL) == TRUE)
     {
      vPickPos = v0 + u * (v3 - v0) + v * (v2 - v0); 
      return vPickPos.z;
     }

    二.如果是仅是求地表某点高度
    则可用uv重心求法(注意上述第一点的d3d的那个uv重心求法不太一样,他的uv跟他的向量走?)
     float u = (fX-(int)fX);
     float v = (fY-(int)fY);

     float p0 = fHeight[0];
     float p1 = fHeight[1];
     float p2 = fHeight[2];
     float p3 = fHeight[3];

     if(u>v){ // 右边
      return p0 + u * (p1 - p0) + v * (p3 - p1);;
     }
     else{  // 左边
      return  p0 + u * (p3 - p2) + v * (p2 - p0);
     }

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/flipcode/archive/2008/03/03/2143584.aspx

  • 相关阅读:
    ArcMap和ArcGIS Pro加载百度地图
    智能家居系列之——WIFI小车
    关于GIS中Scale和Resolution的那些事儿
    git cherry-pick
    虚拟DOM与DOM diff
    变量提升
    如果判定 this 又混乱了,就从头再读一遍……
    js 高程 Array
    Js高程-DOM
    剑指 Offer 15. 二进制中1的个数
  • 原文地址:https://www.cnblogs.com/lancidie/p/1869890.html
Copyright © 2020-2023  润新知