2017-02-08 82 views
0

我想繪製一條線,其中物體與片段着色器中的平面相交。在片段着色器中繪製物體和平面之間的交點

我將平面方程傳遞給片段着色器(a,b,c,d),並且希望以紅色繪製我的對象和此均勻平面之間的交點。

我想路口的寬度是始終不變的,無論我們多麼放大

現在,我從我的對象的距離,飛機在片段着色器爲:

// uPlane: vec4 where values are a.b.c.d (plane equation) 
    // vPos: wodlPosition of the fragment 
    vec4 prod = uPlane*vPos; 
    float distance = (prod.r + prod.g + prod.g + prod.a)/length(uPlane.xyz); 

    if(abs(distance) < 1.) { 
    gl_FragColor = vec4(1., 0., 0., .5); 
    } else { 
    gl_FragColor = vec4(0., 1., 0., .5); 
    } 

這種方法的問題是,當我放大/縮小時,交叉點的「寬度」會發生變化(請參見下面的截圖)。

這將是在我的對象和飛機制服之間的交點處繪製「2px寬度」線的最佳方法嗎?

enter image description here enter image description here

+0

一個解決方案可能是將片段位置投影到平面上,然後以某種方式計算投影屏幕座標,然後將投影的屏幕座標與片段屏幕座標進行比較,並使用該信息繪製線條 – Nicolas

回答

1

你必須考慮的 「放大倍數」 您的視圖/縮放。對於2D情況(你的圖片看起來非常2D),統一縮放和不旋轉,這很容易。傳遞模型視圖矩陣並提取[0] [0]個元素(或將該值傳遞給着色器)。用你的距離值除以它。 用於從旋轉和平移的模型視圖矩陣中提取適當的縮放值,請參閱this

相關問題