如何渲染兩個半透明的交叉的三角形?

時間 2021-06-01 16:57:35

1樓:喬貓

可以先渲染三角形A,寫入深度顏色資料

然後關閉深度快取的寫入,渲染三角形B兩遍,第一遍讓源深度比目標深度小的片元通過,片元顏色 = 源顏色 * 源alpha + 目標顏色 * (1 - 源alpha)

第二遍第一遍讓源深度比目標深度大的片元通過,片元顏色 = 源顏色 * (1 - 目標alpha) + 目標顏色 * 目標alpha

確實是個很菜的做法。。。不過倒是能解決這個問題,而且在固定管線上也能用2333

更正:

之前的方法並不能給出正確的結果。。。這裡再胡扯乙個。。。

首先把Depth Test調整為z更大的通過,關閉Alpha Blend,渲染兩個三角形

然後關閉Depth Test,設定Alpha Blend的混合因子為(1 - dst_alpha, dst_alpha),渲染乙個全螢幕的長方形,顏色與背景保持一致

最後再把Depth Test調成z更小的通過(必須是嚴格小於),設定Alpha Blend的混合因子為(src_alpha, 1 - src_alpha),渲染兩個三角形

這個方法缺點很多,不僅慢而且只能處理兩層半透明互相遮擋,更多的就不正確了

反正用固定管線幹這個太作死,還是用oit或者拆開渲染比較好

2樓:韋易笑

紋理但凡帶alpha通道的,都需要排序,按由遠及近繪製出來,排序佇列裡面的三角形都不相交,送入排序佇列之前就得判斷是否和前面的相交,如果相交就要將後者切割好了再放進去呀。

如何證明有兩個角平分線相等的三角形是等腰三角形?

吃葡萄不吐葡萄皮 最暴力的辦法是直接用角平分線長公式,把2條角平分線的長度用三邊長一表示,再列個等式,剩下就是化簡了,你寫出來就知道了。下面說乙個純幾何的辦法,用到了4對全等三角形。假設我們的三角形ABC中,角C的平分線交AB於D,角B的平分線交AC於E。我們先來添輔助線,構造第1對全等三角形 作 ...

兩個變數的運算為什麼會產生三角函式影象?

勝勳 這是數學問題 f x sin x 這是sin函式a kx 這是物理函式,彈簧受力正比於拉動距離而在數學上,sin函式和彈簧函式是同步的 include inti 臨時變數 doublex 0.0f x座標值 doublev 1.0f x方向的速度 intmain system PAUSE re...

如何證明圓的外接三角形中正三角形的面積最小?

傻子.傻問題殺手 引理1 半徑為r圓形的外接三角形,固定某個角,當另外兩個角相等時,三角形面積最小。設另外兩個角分別為2 alpha,2 beta,如下圖 S 1 2 r 2 ctan alpha ctan beta ctan pi 2 alpha beta 易知最後一項 ctan pi 2 alp...