2016-11-24 16 views
0

私の問題は次のとおりです: 私は3点で三角形を定義しました。三角形内の任意の点の位置を取得

座標系は次のように定義される:上方

  • Z軸ヘッド私の画面のうち右
  • Y軸ヘッドに

    • X軸ヘッド

    これはOpenGLで使われている最も一般的な座標系です(私は思っています)。 私は三角形を得ました。各点のXとZの値は異なります。 X座標とZ座標を指定して、三角形上のY座標を見つける必要があります。 誰かがこの方法を書かれ、呼ばれたそれbarryCentric(点A、点B、点C、点POS)(私は彼が「重心」を意味かなり確信しているが、細かい。

    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

    この方法は理にかなっていますbarycentric interpolationの実装です。 - プロシージャは、ここで三角形 - l1、l2、l3の(x、z)点の重心座標を求め、 u、w、vをリンクされたページに表示します。

    しかし、実装にはエラーが含まれています。あなたは未知の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; 
    
    +0

    ty great :)これは私を助けます。 –

    関連する問題