2012-08-07 17 views
2

我使用three.js創建了演示[http://jsfiddle.net/georgeneil/cfrsj/16/],該演示執行混合,即THREE.AdditiveBlending。但是這給了我一種白色的光效,因此會有信息丟失的感覺。如何做WebGL中的最大強度投影[MIP]

我需要一個可以投影最大強度的混合結果。我如何使用three.js來做到這一點?

在OpenGL中,我能夠使用glBlendEquationEXT(GL_MAX_EXT)來完成此操作。

我已更新演示[http://jsfiddle.net/georgeneil/cfrsj/21],使概念更清晰。現在有8個粒子,4個是紅色,其餘4個是黑色。如果MIP正常工作,即使當BLACK重疊時,我們也只能看到RED粒子。enter image description here

我正在尋找的可以從這個演示[http://jsfiddle.net/georgeneil/cfrsj/28/]中解釋。我需要看到黑色像素與其不與紅色像素重疊。我需要得到如附圖所示的效果。 enter image description here

回答

0

這是webgl中的一個錯誤。解決方法是用gl初始化gl

gl = canvas.getContext("experimental-webgl", { alpha: false }); 
+0

我沒有明白你的意思。你可以讓它在jsfiddle演示中工作。 – 2012-08-07 09:01:42

+2

會是關於預期的效果? http://jsfiddle.net/cfrsj/19/ – Roest 2012-08-07 09:28:48

+0

我認爲MIP邏輯仍然不起作用。我更新了演示[http://jsfiddle.net/georgeneil/cfrsj/21/],以使這個概念更加清晰。現在有8個粒子,4個是紅色,其餘4個是黑色。如果MIP正常工作,即使在BLACK重疊時,我們也可以看到只有紅色顆粒RED – 2012-08-07 11:49:49

1

如果我理解了你的問題,那麼這應該是一個正確的解決方案。

http://jsfiddle.net/cfrsj/26/

編輯:

這是我的模擬功能。我使用NormalBlending。

首先我要確保顏色與

float r= vColor.r > 0.0? 1.0 : 0.0; 
    float g= vColor.g > 0.0? 1.0 : 0.0; 
    float b= vColor.b > 0.0? 1.0 : 0.0; 

然後飽和我檢查,如果阿爾法是nessecary與

gl_FragColor.a = gl_FragColor.a * 
        texture2D(texture, gl_PointCoord).r * 
        (test.r > 0.0 ? 1.0 : 
         (test.g > 0.0?1.0: 
         (test.b > 0.0?1.0:0.0))); 
+0

在這裏,我們只能看到最亮的像素。我正在尋找的可以從這個演示中解釋[http://jsfiddle.net/georgeneil/cfrsj/28/]。我需要看到黑色像素與其不與紅色像素重疊。我需要得到如附圖所示的效果。 – 2012-08-09 06:44:04