获取三角形中任意点的位置

时间:2016-11-24 14:48:30

标签: java opengl geometry linear

我的问题如下: 我已经定义了一个3分的三角形。

坐标系的定义如下:

  • X轴向右移动
  • Y轴朝上
  • Z-Axis走出我的屏幕

这是OpenGL中最常用的坐标系(我认为)。 现在我得到了我的三角形。每个点的X和Z值都不同。 我需要通过给出X和Z坐标来找到三角形上的Y坐标。 有人编写了这个方法并称之为barryCentric(Point a,Point b,Point c,Point pos)(我很确定他的意思是" baryCentric"但很好。

 public static float barryCentric(Vector3f p1, Vector3f p2, Vector3f p3, Vector3f pos) {
        float det = (p2.z - p3.z) * (p1.x - p3.x) + (p3.x - p2.x) * (p1.z - p3.z);
        float l1 = ((p2.z - p3.z) * (pos.x - p3.x) + (p3.x - p2.x) * (pos.y - p3.z)) / det;
        float l2 = ((p3.z - p1.z) * (pos.x - p3.x) + (p1.x - p3.x) * (pos.y - p3.z)) / det;
        float l3 = 1.0f - l1 - l2;
        return l1 * p1.y + l2 * p2.y + l3 * p3.y;
    }

我不确定这种方法是否有意义。他还使用了pos.y值,所以我猜这不是我想要的。有谁知道一个可以帮助我解决问题的算法?

问候,芬恩

1 个答案:

答案 0 :(得分:2)

这个方法有意义,它是barycentric interpolation的实现 - 程序在三角形中找到(x,z)点的重心坐标 - l1,l2,l3,链接页面中的u,w,v。 / p>

但是实现包含错误 - 你是对的,不应该使用未知的pos.y.而且,这是无意义的 - 从y减去z。所以把pos.y改成pos.z:

    float l1 = ((p2.z - p3.z) * (pos.x - p3.x) + (p3.x - p2.x) * (pos.z - p3.z)) / det;
    float l2 = ((p3.z - p1.z) * (pos.x - p3.x) + (p1.x - p3.x) * (pos.z - p3.z)) / det;