@@ -577,7 +577,7 @@ define([
577
577
this . _cameraVR = undefined ;
578
578
this . _aspectRatioVR = undefined ;
579
579
580
- this . frustumSize2D = 1.0e6 ;
580
+ this . frustumSize2D = 1.75e6 ;
581
581
582
582
// initial guess at frustums.
583
583
var near = camera . frustum . near ;
@@ -1099,7 +1099,7 @@ define([
1099
1099
curFar = Math . min ( far , farToNearRatio * curNear ) ;
1100
1100
} else {
1101
1101
curNear = near + m * frustumSize2D ;
1102
- curFar = curNear + frustumSize2D ;
1102
+ curFar = Math . min ( far , curNear + frustumSize2D ) ;
1103
1103
}
1104
1104
1105
1105
var frustumCommands = frustumCommandsList [ m ] ;
@@ -1562,6 +1562,8 @@ define([
1562
1562
var clearDepth = scene . _depthClearCommand ;
1563
1563
var depthPlane = scene . _depthPlane ;
1564
1564
1565
+ var height2D = camera . position . z ;
1566
+
1565
1567
// Execute commands in each frustum in back to front order
1566
1568
var j ;
1567
1569
var frustumCommandsList = scene . _frustumCommandsList ;
@@ -1571,18 +1573,10 @@ define([
1571
1573
var index = numFrustums - i - 1 ;
1572
1574
var frustumCommands = frustumCommandsList [ index ] ;
1573
1575
1574
- if ( scene . mode !== SceneMode . SCENE2D ) {
1575
- // Avoid tearing artifacts between adjacent frustums in the opaque passes
1576
- frustum . near = index !== 0 ? frustumCommands . near * OPAQUE_FRUSTUM_NEAR_OFFSET : frustumCommands . near ;
1577
- frustum . far = frustumCommands . far ;
1578
- us . updateFrustum ( frustum ) ;
1579
- } else {
1580
- camera . position . z = frustum . right - frustum . left ; //frustumCommands.near + 1.0;
1581
- frustum . far = frustumCommands . far - frustumCommands . near ;
1582
- frustum . near = 1.0 ;
1583
- us . update ( scene . frameState ) ;
1584
- us . updateFrustum ( frustum ) ;
1585
- }
1576
+ // Avoid tearing artifacts between adjacent frustums in the opaque passes
1577
+ frustum . near = index !== 0 ? frustumCommands . near * OPAQUE_FRUSTUM_NEAR_OFFSET : frustumCommands . near ;
1578
+ frustum . far = frustumCommands . far ;
1579
+ us . updateFrustum ( frustum ) ;
1586
1580
1587
1581
var globeDepth = scene . debugShowGlobeDepth ? getDebugGlobeDepth ( scene , index ) : scene . _globeDepth ;
1588
1582
@@ -1624,6 +1618,14 @@ define([
1624
1618
}
1625
1619
}
1626
1620
1621
+ if ( scene . mode === SceneMode . SCENE2D ) {
1622
+ camera . position . z = height2D - frustumCommands . near + 1.0 ;
1623
+ frustum . far = Math . max ( 1.0 , frustumCommands . far - frustumCommands . near ) ;
1624
+ frustum . near = 1.0 ;
1625
+ us . update ( scene . frameState ) ;
1626
+ us . updateFrustum ( frustum ) ;
1627
+ }
1628
+
1627
1629
// Execute commands in order by pass up to the translucent pass.
1628
1630
// Translucent geometry needs special handling (sorting/OIT).
1629
1631
var startPass = Pass . GROUND + 1 ;
@@ -1648,14 +1650,12 @@ define([
1648
1650
commands . length = frustumCommands . indices [ Pass . TRANSLUCENT ] ;
1649
1651
executeTranslucentCommands ( scene , executeCommand , passState , commands ) ;
1650
1652
1651
- /*
1652
1653
if ( defined ( globeDepth ) && environmentState . useGlobeDepthFramebuffer && scene . useDepthPicking ) {
1653
1654
// PERFORMANCE_IDEA: Use MRT to avoid the extra copy.
1654
1655
var pickDepth = getPickDepth ( scene , index ) ;
1655
1656
pickDepth . update ( context , globeDepth . framebuffer . depthStencilTexture ) ;
1656
1657
pickDepth . executeCopyDepth ( context , passState ) ;
1657
1658
}
1658
- */
1659
1659
}
1660
1660
}
1661
1661
0 commit comments