Welcome, Guest! Log In | Create Account

Changeset 1865

Show
Ignore:
Timestamp:
11/04/09 17:35:18 (2 months ago)
Author:
borrillis
Message:

-- Light


-- SceneQuery? Type Flags

Location:
branches/ogre_1.7_update/Projects/Axiom
Files:
12 modified

Legend:

Unmodified
Added
Removed
  • branches/ogre_1.7_update/Projects/Axiom/Engine/Core/BillboardSet.cs

    r1800 r1865  
    17981798        #endregion 
    17991799 
    1800         #region Implementation of SceneObject 
     1800        #region MovableObject Implementation 
    18011801 
    18021802        public override AxisAlignedBox BoundingBox 
     
    20362036        } 
    20372037 
    2038         #endregion 
     2038        public override ulong TypeFlags 
     2039        { 
     2040            get 
     2041            { 
     2042                return (ulong)SceneQueryTypeMask.Fx; 
     2043            } 
     2044        } 
     2045 
     2046        #endregion MovableObject Implementation 
    20392047    } 
    20402048 
  • branches/ogre_1.7_update/Projects/Axiom/Engine/Core/CoreEnums.cs

    r1741 r1865  
    7575                Overhead = 16 
    7676        } 
     77    /// <summary> 
     78    /// Scene Query Type Mask values 
     79    /// </summary> 
     80    /// <seealso cref="SceneQuery"/> 
     81    [Flags] 
     82    public enum SceneQueryTypeMask : ulong 
     83    { 
     84        /// <summary>Query type mask which will be used for world geometry <see cref="SceneQuery"/></summary> 
     85        WorldGeometry   = 0x80000000, 
     86        /// <summary>Query type mask which will be used for entities <see cref="SceneQuery"/></summary> 
     87        Entity          = 0x40000000, 
     88        /// <summary>Query type mask which will be used for effects like billboardsets / particle systems <see cref="SceneQuery"/></summary> 
     89        Fx              = 0x20000000, 
     90        /// <summary>Query type mask which will be used for StaticGeometry <see cref="SceneQuery"/></summary> 
     91        StaticGeometry  = 0x10000000, 
     92        /// <summary>Query type mask which will be used for lights <see cref="SceneQuery"/></summary> 
     93        Light           = 0x08000000, 
     94        /// <summary>Query type mask which will be used for frusta and cameras <see cref="SceneQuery"/></summary> 
     95        Frustum         = 0x04000000, 
     96        /// <summary>User type mask limit</summary> 
     97        UserLimit       = Frustum 
     98    } 
    7799 
    78100    /// <summary> 
  • branches/ogre_1.7_update/Projects/Axiom/Engine/Core/Entity.cs

    r1800 r1865  
    16171617        #endregion 
    16181618 
    1619         #region Implementation of SceneObject 
     1619        #region MovableObject Implementation 
    16201620 
    16211621        private static TimingMeter copyAnimationMeter = MeterManager.GetMeter( "Copy Animation", "Entity Queue" ); 
     
    22172217        } 
    22182218 
    2219         #endregion Methods 
     2219        public override ulong TypeFlags 
     2220        { 
     2221            get 
     2222            { 
     2223                return (ulong)SceneQueryTypeMask.Entity; 
     2224            } 
     2225        } 
     2226 
     2227        #endregion MovableObject Implementation 
    22202228 
    22212229        /// <summary> 
  • branches/ogre_1.7_update/Projects/Axiom/Engine/Core/Frustum.cs

    r1800 r1865  
    18231823                #endregion 
    18241824 
    1825                 #region SceneObject Members 
     1825                #region MovableObject Implementation 
    18261826 
    18271827                /// <summary> 
     
    18661866                                queue.AddRenderable(this); 
    18671867                        } 
    1868                 } 
    1869  
    1870                 #endregion SceneObject Members 
    1871  
    1872                 #region IRenderable Members 
    1873  
    1874                 public bool CastsShadows 
     1868        } 
     1869 
     1870        public override ulong TypeFlags 
     1871        { 
     1872            get 
     1873            { 
     1874                return (ulong)SceneQueryTypeMask.Frustum; 
     1875            } 
     1876        } 
     1877 
     1878        #endregion  MovableObject Implementation 
     1879 
     1880        #region IRenderable Members 
     1881 
     1882        public bool CastsShadows 
    18751883                { 
    18761884                        get 
  • branches/ogre_1.7_update/Projects/Axiom/Engine/Core/Light.cs

    r1663 r1865  
    162162        protected LightType type; 
    163163 
     164        protected Real powerScale = 1.0f; 
     165        protected bool ownShadowFarDistance = false; 
     166        protected Real shadowFarDistance = 0.0f; 
     167        protected Real shadowFarDistanceSquared = 0.0f; 
     168 
    164169        #endregion 
    165170 
     
    440445            get 
    441446            { 
    442                 throw new NotImplementedException(); 
    443             } 
    444             set 
    445             { 
    446                 throw new NotImplementedException(); 
     447                return ownShadowFarDistance ? shadowFarDistance : Manager.ShadowFarDistance; 
     448            } 
     449            set 
     450            { 
     451                ownShadowFarDistance = true; 
     452                shadowFarDistance = value; 
     453                shadowFarDistanceSquared = value * value; 
     454            } 
     455        } 
     456 
     457        public float ShadowFarDistanceSquared 
     458        { 
     459            get 
     460            { 
     461                return ownShadowFarDistance ? shadowFarDistanceSquared : Manager.ShadowFarDistanceSquared; 
    447462            } 
    448463        } 
     
    452467            get 
    453468            { 
    454                 throw new NotImplementedException(); 
    455             } 
    456             set 
    457             { 
    458                 throw new NotImplementedException(); 
     469                return powerScale; 
     470            } 
     471            set 
     472            { 
     473                powerScale = value; 
    459474            } 
    460475        } 
     
    12271242        } 
    12281243 
     1244        public override ulong TypeFlags 
     1245        { 
     1246            get 
     1247            { 
     1248                return (ulong)SceneQueryTypeMask.Light; 
     1249            } 
     1250        } 
     1251 
    12291252        #endregion MovableObject Implementation 
    12301253 
  • branches/ogre_1.7_update/Projects/Axiom/Engine/Core/MovableObject.cs

    r1793 r1865  
    449449        ///             meaning of the bits is application-specific. 
    450450        /// </remarks> 
    451         public ulong QueryFlags 
     451        public virtual ulong QueryFlags 
    452452        { 
    453453            get 
  • branches/ogre_1.7_update/Projects/Axiom/Engine/Core/SceneQuery.cs

    r1793 r1865  
    108108            this.creator = creator; 
    109109 
     110            this.queryMask = 0xFFFFFFFF; 
     111 
     112            // default type mask to everything except lights & fx (previous behaviour) 
     113            this.queryTypeMask = ( 0xFFFFFFFF & (ulong)~SceneQueryTypeMask.Fx ) & (ulong)~SceneQueryTypeMask.Light; 
     114  
    110115            // default to no world fragments queried 
    111116            AddWorldFragmentType( WorldFragmentType.None ); 
  • branches/ogre_1.7_update/Projects/Axiom/Engine/Core/StaticGeometry/Region.cs

    r1793 r1865  
    508508            } 
    509509 
     510            public override ulong TypeFlags 
     511            { 
     512                get 
     513                { 
     514                    return (ulong)SceneQueryTypeMask.StaticGeometry; 
     515                } 
     516            } 
    510517            #endregion MovableObject Implementation 
    511518        } 
  • branches/ogre_1.7_update/Projects/Axiom/Engine/ParticleSystems/ParticleSystem.cs

    r1663 r1865  
    16451645                } 
    16461646 
     1647        public override ulong TypeFlags 
     1648        { 
     1649            get 
     1650            { 
     1651                return (ulong)SceneQueryTypeMask.Fx; 
     1652            } 
     1653        } 
     1654 
    16471655                internal ParticleSystemRenderer Renderer 
    16481656                { 
  • branches/ogre_1.7_update/Projects/Axiom/Plugins/OctreeZone/TerrainZoneRenderable.cs

    • Property svn:mergeinfo
      •  

        old new  
        11/branches/crickhollow/Projects/Axiom/Source/Plugins/OctreeZone/TerrainZoneRenderable.cs:1012-1662 
         2/trunk/Projects/Axiom/Plugins/OctreeZone/TerrainZoneRenderable.cs:1842-1861 
    r1800 r1865  
    17031703        } 
    17041704 
     1705        public override ulong TypeFlags 
     1706        { 
     1707            get 
     1708            { 
     1709                return (ulong)SceneQueryTypeMask.WorldGeometry; 
     1710            } 
     1711        } 
     1712 
    17051713        #endregion 
    17061714    } 
  • branches/ogre_1.7_update/Projects/Axiom/SceneManagers/Bsp/BspSceneManager.cs

    r1822 r1865  
    13431343 
    13441344                    // check object against brushes 
    1345                     foreach ( BspBrush brush in leaf.SolidBrushes) 
    1346                     { 
    1347                         if ( brush == null ) 
    1348                             continue; 
    1349  
    1350                         // test brush against object 
    1351                         boundedVolume.planes = brush.Planes; 
    1352                         if ( boundedVolume.Intersects( aBox ) ) 
     1345                    if ( ( QueryTypeMask & (ulong)SceneQueryTypeMask.WorldGeometry ) != 0 ) 
     1346                    { 
     1347                        foreach ( BspBrush brush in leaf.SolidBrushes ) 
    13531348                        { 
    1354                             // check if this pair is already reported 
    1355                             IList interBrushList = brushIntersections.FindBucket( aObj ); 
    1356                             if ( interBrushList == null || interBrushList.Contains( brush ) == false) 
     1349                            if ( brush == null ) 
     1350                                continue; 
     1351 
     1352                            // test brush against object 
     1353                            boundedVolume.planes = brush.Planes; 
     1354                            if ( boundedVolume.Intersects( aBox ) ) 
    13571355                            { 
    1358                                 brushIntersections.Add( aObj, brush ); 
    1359                                 // report this brush as it's WorldFragment 
    1360                                 listener.OnQueryResult( aObj, brush.Fragment ); 
     1356                                // check if this pair is already reported 
     1357                                IList interBrushList = brushIntersections.FindBucket( aObj ); 
     1358                                if ( interBrushList == null || interBrushList.Contains( brush ) == false ) 
     1359                                { 
     1360                                    brushIntersections.Add( aObj, brush ); 
     1361                                    // report this brush as it's WorldFragment 
     1362                                    listener.OnQueryResult( aObj, brush.Fragment ); 
     1363                                } 
    13611364                            } 
    13621365                        } 
     
    14661469 
    14671470            // Check ray against brushes 
    1468             for ( int brushPoint = 0; brushPoint < leaf.SolidBrushes.Length; brushPoint++ ) 
    1469             { 
    1470                 BspBrush brush = leaf.SolidBrushes[ brushPoint ]; 
    1471  
    1472                 if ( brush == null ) 
    1473                     continue; 
    1474  
    1475                 boundedVolume.planes = brush.Planes; 
    1476  
    1477                 IntersectResult result = tracingRay.Intersects( boundedVolume ); 
    1478                 // if the result came back positive and intersection point is inside 
    1479                 // the node, check if this brush is closer 
    1480                 if ( result.Hit && result.Distance <= maxDistance ) 
    1481                 { 
    1482                     if ( result.Distance < intersectBrushDist ) 
    1483                     { 
    1484                         intersectBrushDist = result.Distance; 
    1485                         intersectBrush = brush; 
    1486                     } 
    1487                 } 
    1488             } 
    1489  
    1490             if ( intersectBrush != null ) 
    1491             { 
    1492                 listener.OnQueryResult( intersectBrush.Fragment, intersectBrushDist + traceDistance ); 
    1493                 StopRayTracing = true; 
     1471            if ( ( QueryTypeMask & (ulong)SceneQueryTypeMask.WorldGeometry ) != 0 ) 
     1472            { 
     1473                for ( int brushPoint = 0; brushPoint < leaf.SolidBrushes.Length; brushPoint++ ) 
     1474                { 
     1475                    BspBrush brush = leaf.SolidBrushes[ brushPoint ]; 
     1476 
     1477                    if ( brush == null ) 
     1478                        continue; 
     1479 
     1480                    boundedVolume.planes = brush.Planes; 
     1481 
     1482                    IntersectResult result = tracingRay.Intersects( boundedVolume ); 
     1483                    // if the result came back positive and intersection point is inside 
     1484                    // the node, check if this brush is closer 
     1485                    if ( result.Hit && result.Distance <= maxDistance ) 
     1486                    { 
     1487                        if ( result.Distance < intersectBrushDist ) 
     1488                        { 
     1489                            intersectBrushDist = result.Distance; 
     1490                            intersectBrush = brush; 
     1491                        } 
     1492                    } 
     1493                } 
     1494 
     1495                if ( intersectBrush != null ) 
     1496                { 
     1497                    listener.OnQueryResult( intersectBrush.Fragment, intersectBrushDist + traceDistance ); 
     1498                    StopRayTracing = true; 
     1499                } 
    14941500            } 
    14951501        } 
  • branches/ogre_1.7_update/Projects/Axiom/SceneManagers/Octree/TerrainRenderable.cs

    r1800 r1865  
    550550                #endregion Methods 
    551551 
    552                 #region SceneObject Members 
     552                #region MovableObject Implementation 
    553553 
    554554                public override AxisAlignedBox BoundingBox 
     
    567567                        } 
    568568                } 
     569 
     570        public override ulong TypeFlags 
     571        { 
     572            get 
     573            { 
     574                return (ulong)SceneQueryTypeMask.WorldGeometry; 
     575            } 
     576        } 
    569577 
    570578                public override void NotifyCurrentCamera( Camera camera ) 
     
    605613                { 
    606614                        queue.AddRenderable( this ); 
    607                 } 
    608  
    609                 #endregion SceneObject Members 
    610  
    611                 #region IRenderable Members 
    612  
    613                 public bool CastsShadows 
     615        } 
     616 
     617        #endregion MovableObject Implementation 
     618 
     619        #region IRenderable Implementation 
     620 
     621        public bool CastsShadows 
    614622                { 
    615623                        get 
     
    9941002                } 
    9951003 
    996                 #endregion 
     1004                #endregion IRenderable Implementation 
    9971005        } 
    9981006