Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
BoundingBoxExtensions.cs
Go to the documentation of this file.
1 // Copyright (c) 2014 Silicon Studio Corp. (http://siliconstudio.co.jp)
2 // This file is distributed under GPL v3. See LICENSE.md for details.
3 using System.Linq;
4 using SiliconStudio.Core.Mathematics;
5 using SiliconStudio.Paradox.Effects.Data;
6 using SiliconStudio.Paradox.Graphics.Data;
7 
8 namespace SiliconStudio.Paradox.Extensions
9 {
10  public static class BoundingBoxExtensions
11  {
12  public unsafe static BoundingBox ComputeBoundingBox(this VertexBufferBindingData vertexBufferBinding, ref Matrix matrix)
13  {
14  var positionOffset = vertexBufferBinding.Declaration
15  .EnumerateWithOffsets()
16  .First(x => x.VertexElement.SemanticAsText == "POSITION")
17  .Offset;
18 
19  var boundingBox = BoundingBox.Empty;
20 
21  var vertexStride = vertexBufferBinding.Declaration.VertexStride;
22  fixed (byte* bufferStart = &vertexBufferBinding.Buffer.Value.Content[vertexBufferBinding.Offset])
23  {
24  byte* buffer = bufferStart;
25  for (int i = 0; i < vertexBufferBinding.Count; ++i)
26  {
27  var position = (Vector3*)(buffer + positionOffset);
28  Vector3 transformedPosition;
29 
30  Vector3.TransformCoordinate(ref *position, ref matrix, out transformedPosition);
31  BoundingBox.Merge(ref boundingBox, ref transformedPosition, out boundingBox);
32 
33  buffer += vertexStride;
34  }
35  }
36 
37  return boundingBox;
38  }
39  }
40 }
Represents an axis-aligned bounding box in three dimensional space.
Definition: BoundingBox.cs:42
Represents a three dimensional mathematical vector.
Definition: Vector3.cs:42
SiliconStudio.Core.Serialization.ContentReference< SiliconStudio.Paradox.Graphics.Data.BufferData > Buffer
Data field for SiliconStudio.Paradox.Graphics.VertexBufferBinding.Buffer.
Data type for SiliconStudio.Paradox.Graphics.VertexBufferBinding.
System.Int32 Offset
Data field for SiliconStudio.Paradox.Graphics.VertexBufferBinding.Offset.
static unsafe BoundingBox ComputeBoundingBox(this VertexBufferBindingData vertexBufferBinding, ref Matrix matrix)
Represents a 4x4 mathematical matrix.
Definition: Matrix.cs:47