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(); }
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); }