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


    地形碰撞计算:
    一.如果是鼠标点击地面,
    可将射线固定长度并分段,然后用射线与每一个分段上的点所落在的地面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);
     }

    转自:http://blog.csdn.net/flipcode/archive/2008/03/03/2143584.aspx

  • 相关阅读:
    第一周编程总结
    7-3 抓老鼠亏了还是赚了
    7-1 打印沙漏
    2019春第十二周作业
    2019春第十一周作业
    2019年春第十周作业
    第九周作业总结
    第八周作业总结
    第七周作业总结
    第六周作业
  • 原文地址:https://www.cnblogs.com/tuzhiye/p/2084500.html
Copyright © 2020-2023  润新知