Exemplo n.º 1
0
        public void SaveXnd(IO.XndNode node, List <CombineVoxel.BoxVolume> bvs)
        {
            var set = new GamePlay.SceneGraph.GPvsSet();

            set.WorldMatrix    = this.WorldMatrix;
            set.WorldMatrixInv = Matrix.Invert(ref this.WorldMatrix);
            set.PvsData        = mBitSets;
            set.PvsCells       = new List <GamePlay.SceneGraph.GPvsCell>(bvs.Count);
            for (int i = 0; i < bvs.Count; i++)
            {
                var cellSize = bvs[i].Voxels[0].Shape.GetSize();
                var cell     = new GamePlay.SceneGraph.GPvsCell();

                cell.BoundVolume.Minimum.X = cellSize.X * (float)bvs[i].xMin;
                cell.BoundVolume.Minimum.Y = cellSize.Y * (float)bvs[i].yMin;
                cell.BoundVolume.Minimum.Z = cellSize.Z * (float)bvs[i].zMin;

                cell.BoundVolume.Maximum.X = cellSize.X * (float)bvs[i].xMax;
                cell.BoundVolume.Maximum.Y = cellSize.Y * (float)bvs[i].yMax;
                cell.BoundVolume.Maximum.Z = cellSize.Z * (float)bvs[i].zMax;

                cell.PvsIndex = FindBitSetIndex(bvs[i].Voxels[0].Bits);
                System.Diagnostics.Debug.Assert(cell.PvsIndex >= 0);

                set.PvsCells.Add(cell);
            }
            var att = node.AddAttrib("BoxVolumes");

            att.BeginWrite();
            att.WriteMetaObject(set);
            att.EndWrite();
        }
Exemplo n.º 2
0
        public GamePlay.SceneGraph.GPvsSet CreatePVSSet(List <CombineVoxel.BoxVolume> bvs)
        {
            var retSet = new GamePlay.SceneGraph.GPvsSet();

            retSet.WorldMatrix    = this.WorldMatrix;
            retSet.WorldMatrixInv = Matrix.Invert(ref this.WorldMatrix);
            retSet.PvsData        = mCombinedBitSets;
            retSet.PvsCells       = new List <GamePlay.SceneGraph.GPvsCell>(bvs.Count);

            var offset = BVSize / 2;

            for (int i = 0; i < bvs.Count; i++)
            {
                var cellSize = bvs[i].Voxels[0].Shape.GetSize();
                var cell     = new GamePlay.SceneGraph.GPvsCell();
                cell.HostSet = retSet;

                cell.BoundVolume.Minimum.X = cellSize.X * (float)bvs[i].xMin;
                cell.BoundVolume.Minimum.Y = cellSize.Y * (float)bvs[i].yMin;
                cell.BoundVolume.Minimum.Z = cellSize.Z * (float)bvs[i].zMin;
                cell.BoundVolume.Minimum  -= offset;

                cell.BoundVolume.Maximum.X = cellSize.X * (float)(bvs[i].xMax + 1);
                cell.BoundVolume.Maximum.Y = cellSize.Y * (float)(bvs[i].yMax + 1);
                cell.BoundVolume.Maximum.Z = cellSize.Z * (float)(bvs[i].zMax + 1);
                cell.BoundVolume.Maximum  -= offset;

                //cell.PvsIndex = FindBitSetIndex(bvs[i].Voxels[0].Bits);
                cell.PvsIndex = bvs[i].Combine.CmbIndex;
                System.Diagnostics.Debug.Assert(cell.PvsIndex >= 0);

                retSet.PvsCells.Add(cell);
            }
            return(retSet);
        }
Exemplo n.º 3
0
        public static GamePlay.SceneGraph.GPvsSet LoadXnd(IO.XndNode node)
        {
            var att = node.FindAttrib("BoxVolumes");

            att.BeginRead();
            var retVal = new GamePlay.SceneGraph.GPvsSet();

            att.ReadMetaObject(retVal);
            att.EndRead();

            return(retVal);
        }