120 lines
5.6 KiB
C#
120 lines
5.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using Aiwaz.Contracts;
|
|
using SlimDX;
|
|
using Aiwaz.Resources.Attributes;
|
|
using System.Collections.ObjectModel;
|
|
|
|
namespace Aiwaz.Resources.Prefab
|
|
{
|
|
[CreationParameters("Unity-sized one-sided quad")]
|
|
public class QuadParams : ICreationParams
|
|
{
|
|
public float Width;
|
|
public float Height;
|
|
public bool IsTwoSided;
|
|
|
|
public QuadParams()
|
|
{
|
|
Width = 1.0f;
|
|
Height = 1.0f;
|
|
IsTwoSided = false;
|
|
}
|
|
}
|
|
|
|
[AiwazResource("Quad", "A simple 2d non-uniform Quad")]
|
|
public class Quad : Resource
|
|
{
|
|
public struct CommonQuadVertex
|
|
{
|
|
public CommonQuadVertex(SlimDX.Vector3 pos,
|
|
SlimDX.Vector3 normal,
|
|
SlimDX.Vector2 tex)
|
|
{
|
|
this.Pos = pos;
|
|
this.Normal = normal;
|
|
this.Tex = tex;
|
|
}
|
|
public SlimDX.Vector3 Pos;
|
|
public SlimDX.Vector3 Normal;
|
|
public SlimDX.Vector2 Tex;
|
|
};
|
|
|
|
public GeometryBuffer GeometryBuffer { get; protected set; }
|
|
|
|
public Quad(QuadParams parameters)
|
|
{
|
|
this.creationParams = parameters;
|
|
float width = parameters.Width * 0.5f;
|
|
float height = parameters.Height * 0.5f;
|
|
|
|
CommonQuadVertex[] quadOneSidedVertices = new CommonQuadVertex[]
|
|
{
|
|
new CommonQuadVertex( new SlimDX.Vector3( -width, height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, -1.0f), new SlimDX.Vector2( 0.0f, 0.0f ) ),
|
|
new CommonQuadVertex( new SlimDX.Vector3( width, -height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, -1.0f), new SlimDX.Vector2( 1.0f, 1.0f ) ),
|
|
new CommonQuadVertex( new SlimDX.Vector3( -width, -height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, -1.0f), new SlimDX.Vector2( 0.0f, 1.0f ) ),
|
|
|
|
new CommonQuadVertex( new SlimDX.Vector3( -width, height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, -1.0f), new SlimDX.Vector2( 0.0f, 0.0f ) ),
|
|
new CommonQuadVertex( new SlimDX.Vector3( width, height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, -1.0f), new SlimDX.Vector2( 1.0f, 0.0f ) ),
|
|
new CommonQuadVertex( new SlimDX.Vector3( width, -height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, -1.0f), new SlimDX.Vector2( 1.0f, 1.0f ) ),
|
|
};
|
|
|
|
CommonQuadVertex[] quadTwoSidedVertices = new CommonQuadVertex[]
|
|
{
|
|
new CommonQuadVertex( new SlimDX.Vector3( -width, height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, -1.0f), new SlimDX.Vector2( 0.0f, 0.0f ) ),
|
|
new CommonQuadVertex( new SlimDX.Vector3( width, -height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, -1.0f), new SlimDX.Vector2( 1.0f, 1.0f ) ),
|
|
new CommonQuadVertex( new SlimDX.Vector3( -width, -height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, -1.0f), new SlimDX.Vector2( 0.0f, 1.0f ) ),
|
|
new CommonQuadVertex( new SlimDX.Vector3( -width, height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, -1.0f), new SlimDX.Vector2( 0.0f, 0.0f ) ),
|
|
new CommonQuadVertex( new SlimDX.Vector3( width, height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, -1.0f), new SlimDX.Vector2( 1.0f, 0.0f ) ),
|
|
new CommonQuadVertex( new SlimDX.Vector3( width, -height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, -1.0f), new SlimDX.Vector2( 1.0f, 1.0f ) ),
|
|
|
|
new CommonQuadVertex( new SlimDX.Vector3( -width, height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, 1.0f), new SlimDX.Vector2( 1.0f, 0.0f ) ),
|
|
new CommonQuadVertex( new SlimDX.Vector3( width, -height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, 1.0f), new SlimDX.Vector2( 0.0f, 1.0f ) ),
|
|
new CommonQuadVertex( new SlimDX.Vector3( -width, -height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, 1.0f), new SlimDX.Vector2( 1.0f, 1.0f ) ),
|
|
new CommonQuadVertex( new SlimDX.Vector3( -width, height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, 1.0f), new SlimDX.Vector2( 1.0f, 0.0f ) ),
|
|
new CommonQuadVertex( new SlimDX.Vector3( width, height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, 1.0f), new SlimDX.Vector2( 0.0f, 0.0f ) ),
|
|
new CommonQuadVertex( new SlimDX.Vector3( width, -height, 0.0f ), new SlimDX.Vector3(0.0f, 0.0f, 1.0f), new SlimDX.Vector2( 0.0f, 1.0f ) ),
|
|
};
|
|
|
|
var vertexElements = new VertexElement[]
|
|
{
|
|
new VertexElement(VertexElement.Format.Position),
|
|
new VertexElement(VertexElement.Format.Normal),
|
|
new VertexElement(VertexElement.Format.Texture2D)
|
|
};
|
|
|
|
var oneSidedIndices = new uint[] { 0,1,2, 3,4,5 };
|
|
var twoSidedIndices = new uint[] { 0, 1, 2, 3, 4, 5, 11, 10, 9, 8, 7, 6 };
|
|
|
|
this.GeometryBuffer = GeometryBuffer.Create<CommonQuadVertex>(
|
|
parameters.IsTwoSided ? twoSidedIndices : oneSidedIndices,
|
|
parameters.IsTwoSided ? quadTwoSidedVertices : quadOneSidedVertices,
|
|
vertexElements,
|
|
false);
|
|
}
|
|
|
|
private ICreationParams creationParams;
|
|
public override ICreationParams CreationParams
|
|
{
|
|
get { return creationParams; }
|
|
}
|
|
|
|
private ObservableCollection<IResource> children;
|
|
[ReadOnly]
|
|
public override ObservableCollection<IResource> Children
|
|
{
|
|
get
|
|
{
|
|
if (children == null)
|
|
{
|
|
children = new ObservableCollection<IResource>();
|
|
children.Add(GeometryBuffer);
|
|
}
|
|
return children;
|
|
}
|
|
}
|
|
}
|
|
}
|