如何在WebGL中进行最大强度投影[MIP]

时间:2012-08-07 05:51:05

标签: webgl three.js

我使用three.js创建了一个演示[http://jsfiddle.net/georgeneil/cfrsj/16/],它执行混合,即THREE.AdditiveBlending。但这给了我一种白光效果,因此感觉信息丢失了。

我需要一个可以投射最大强度的混合结果。我怎么能用three.js做到这一点?

在OpenGL中,我可以使用glBlendEquationEXT(GL_MAX_EXT)来完成此操作。

我更新了演示[http://jsfiddle.net/georgeneil/cfrsj/21],使概念更加清晰。现在有8个颗粒,4个是红色,剩下4个是黑色。如果MIP正常工作,即使BLACK重叠RED enter image description here

,我们也只能看到RED粒子

我正在寻找的内容可以从这个演示[http://jsfiddle.net/georgeneil/cfrsj/28/]中解释。我需要看到黑色像素,其中不与红色像素重叠。我需要获得附加图像中显示的效果。enter image description here

3 个答案:

答案 0 :(得分: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;

然后我用

检查alpha是否是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)));

答案 1 :(得分:0)

这是webgl中的一个错误。解决方法是使用

初始化gl
gl = canvas.getContext("experimental-webgl", { alpha: false } );

答案 2 :(得分:0)