渲染队列排序问题,导致Alpha混合效果出错

    FrustumCulling._traversalCulling=function(camera,scene,context,renderList){
        var validCount=renderList.length;
        var renders=renderList.elements;
        var boundFrustum=camera.boundFrustum;
        var camPos=camera._transform.position;
        for (var i=0;i < validCount;i++){
            var render=renders ;
            if (camera._isLayerVisible(render._owner._layer)&& render._enable){
                Stat.frustumCulling++;
                if (!camera.useOcclusionCulling || render._needRender(boundFrustum)){
                    render._visible=true;
                    var bounds=render.bounds;
                    render._distanceForSort=Vector3.distance(bounds.getCenter(),camPos);
                    var elements=render._renderElements;
                    for (var j=0,m=elements.length;j < m;j++){
                        var element=elements[j];
                        var renderQueue=scene._getRenderQueue(element.material.renderQueue);
                        if (renderQueue.isTransparent)
                            element.addToTransparentRenderQueue(context,renderQueue);
                        else
                        element.addToOpaqueRenderQueue(context,renderQueue);
                    }
                    }else {
                    render._visible=false;
                }
                }else {
                render._visible=false;
            }
        }
    }
 
render._distanceForSort=Vector3.distance(bounds.getCenter(),camPos);
用这个距离计算出来的值作为渲染队列排队的依据当两个物体有遮挡关系的时候,位置的变化,在某种情况下会引起渲染队列中的元素重新排序后的先后关系错误,导致Apha
之后的效果错误。

下图中的圆圈是要给Quad,应该跟背景图混合,但是由于这个bug,导致圆圈先绘制,背景Quad后绘制,颜色计算错误,
大家,有遇到过这个问题的吗?
alpha_bug.png
已邀请:

Laya_Aaron

赞同来自:

请提供复现demo 并说明一下预期效果

要回复问题请先

商务合作
商务合作