2012-02-12 4 views

答えて

4

あなたは関数が何をすべきか、そしてあなたの1文字の変数名が実際に意味するものをよく説明しません。私はabが線分上の点であり、pが注目点であると推測します。 rは、関数がテストする距離でなければなりません(一般的に、距離を返してユーザーにテストさせる必要があります。

実際の問題は、C、C++、またはGLSLのどちらでも、「パワーを上げる」演算子^ではないと思います。いずれの場合においても

次のように、この関数のcorrect versionは次のようになります。このコードはテストされていないこと

float DistToLine(vec2 pt1, vec2 pt2, vec2 testPt) 
{ 
    vec2 lineDir = pt2 - pt1; 
    vec2 perpDir = vec2(lineDir.y, -lineDir.x); 
    vec2 dirToPt1 = pt1 - testPt; 
    return abs(dot(normalize(perpDir), dirToPt1)); 
} 

注意。私はちょうど与えられたサイトで提示されたソリューションを実装しています。これは、ベクトル演算でベクトル表記法で実装されています。私は非常にめったにXとYコンポーネントを取得しないことに注意してください(私は垂直を得るために1回しか行いません)。

+0

ありがとう、Nicol;私は '力'機能について知らなかった。それは今働いている。 – Jackalope

+1

多分このサイトのためのあまりにも多くの脇に、glsl.heroku.comはそのような質問をilustratingと急速に実験するのに最適です... –

+0

@ dan-brickleyあなたはそうです、そして、[ShaderToy](http:// shadertoy .com/view/4djGRV)もあります。 – wil

関連する問題