2012-08-09 09:45:04 +00:00
|
|
|
#region Using Statements
|
2011-11-16 00:00:17 +00:00
|
|
|
using System;
|
|
|
|
using ANX.Framework.NonXNA;
|
2012-08-25 17:27:45 +00:00
|
|
|
|
2011-11-16 00:00:17 +00:00
|
|
|
|
|
|
|
#endregion // Using Statements
|
|
|
|
|
2012-08-09 09:45:04 +00:00
|
|
|
// This file is part of the ANX.Framework created by the
|
|
|
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
|
|
|
// For details see: http://anxframework.codeplex.com/license
|
2011-11-16 00:00:17 +00:00
|
|
|
|
|
|
|
|
|
|
|
namespace ANX.Framework.Graphics
|
|
|
|
{
|
|
|
|
public class BasicEffect : Effect, IEffectMatrices, IEffectLights, IEffectFog
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
private bool vertexColorEnabled = false;
|
|
|
|
private bool perPixelLighting = false;
|
|
|
|
private bool lightingEnabled = false;
|
|
|
|
private bool fogEnabled = false;
|
|
|
|
private bool textureEnabled = false;
|
2011-12-27 08:19:27 +00:00
|
|
|
|
|
|
|
private EffectParameter world;
|
|
|
|
private EffectParameter view;
|
|
|
|
private EffectParameter projection;
|
2012-03-14 05:54:13 +00:00
|
|
|
private EffectParameter texture;
|
|
|
|
private EffectParameter fogColor;
|
|
|
|
private EffectParameter fogVector;
|
|
|
|
|
|
|
|
private DirectionalLight[] directionalLight;
|
|
|
|
private Vector3 ambientLightColor;
|
2011-12-27 08:19:27 +00:00
|
|
|
|
2012-09-06 09:58:13 +00:00
|
|
|
public BasicEffect(GraphicsDevice graphics)
|
|
|
|
: base(graphics, GetByteCode(), GetSourceLanguage())
|
2011-11-16 00:00:17 +00:00
|
|
|
{
|
2011-12-27 08:19:27 +00:00
|
|
|
world = base.Parameters["World"];
|
|
|
|
view = base.Parameters["View"];
|
|
|
|
projection = base.Parameters["Projection"];
|
2012-03-14 05:54:13 +00:00
|
|
|
|
|
|
|
directionalLight = new DirectionalLight[]
|
|
|
|
{
|
|
|
|
new DirectionalLight(base.Parameters["LightDirection[0]"], base.Parameters["LightDiffuseColor[0]"], base.Parameters["LightSpecularColor[0]"], null),
|
|
|
|
new DirectionalLight(base.Parameters["LightDirection[1]"], base.Parameters["LightDiffuseColor[1]"], base.Parameters["LightSpecularColor[1]"], null),
|
|
|
|
new DirectionalLight(base.Parameters["LightDirection[2]"], base.Parameters["LightDiffuseColor[2]"], base.Parameters["LightSpecularColor[2]"], null),
|
|
|
|
};
|
|
|
|
|
|
|
|
fogColor = base.Parameters["FogColor"];
|
|
|
|
fogVector = base.Parameters["FogVector"];
|
|
|
|
|
|
|
|
texture = base.Parameters["Texture"];
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
protected BasicEffect(BasicEffect cloneSource)
|
|
|
|
: base(cloneSource)
|
|
|
|
{
|
|
|
|
throw new NotImplementedException();
|
2012-09-06 09:58:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#region GetByteCode
|
|
|
|
private static byte[] GetByteCode()
|
|
|
|
{
|
|
|
|
var creator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>();
|
|
|
|
return creator.GetShaderByteCode(PreDefinedShader.BasicEffect);
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region GetSourceLanguage
|
|
|
|
private static EffectSourceLanguage GetSourceLanguage()
|
|
|
|
{
|
|
|
|
var creator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>();
|
|
|
|
return creator.GetStockShaderSourceLanguage;
|
|
|
|
}
|
|
|
|
#endregion
|
2011-11-16 00:00:17 +00:00
|
|
|
|
|
|
|
public bool PreferPerPixelLighting
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
return perPixelLighting;
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
perPixelLighting = value;
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public Matrix Projection
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2011-12-27 08:19:27 +00:00
|
|
|
return this.projection.GetValueMatrix();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2011-12-27 08:19:27 +00:00
|
|
|
this.projection.SetValue(value);
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public Matrix View
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2011-12-27 08:19:27 +00:00
|
|
|
return this.view.GetValueMatrix();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2011-12-27 08:19:27 +00:00
|
|
|
this.view.SetValue(value);
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public Matrix World
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2011-12-27 08:19:27 +00:00
|
|
|
return this.world.GetValueMatrix();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2011-12-27 08:19:27 +00:00
|
|
|
this.world.SetValue(value);
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void EnableDefaultLighting()
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
LightingEnabled = true;
|
|
|
|
ambientLightColor = new Vector3(0.05333332f, 0.09882354f, 0.1819608f);
|
|
|
|
|
|
|
|
directionalLight[0].Direction = new Vector3(-0.5265408f, -0.5735765f, -0.6275069f);
|
|
|
|
directionalLight[0].DiffuseColor = new Vector3(1.0000000f, 0.9607844f, 0.8078432f);
|
|
|
|
directionalLight[0].SpecularColor = new Vector3(1.0000000f, 0.9607844f, 0.8078432f);
|
|
|
|
directionalLight[0].Enabled = true;
|
|
|
|
|
|
|
|
directionalLight[1].Direction = new Vector3(0.7198464f, 0.3420201f, 0.6040227f);
|
|
|
|
directionalLight[1].DiffuseColor = new Vector3(0.9647059f, 0.7607844f, 0.4078432f);
|
|
|
|
directionalLight[1].SpecularColor = new Vector3(0.0000000f, 0.0000000f, 0.0000000f);
|
|
|
|
directionalLight[1].Enabled = true;
|
|
|
|
|
|
|
|
directionalLight[2].Direction = new Vector3(0.4545195f, -0.7660444f, 0.4545195f);
|
|
|
|
directionalLight[2].DiffuseColor = new Vector3(0.3231373f, 0.3607844f, 0.3937255f);
|
|
|
|
directionalLight[2].SpecularColor = new Vector3(0.3231373f, 0.3607844f, 0.3937255f);
|
|
|
|
directionalLight[2].Enabled = true;
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public Vector3 AmbientLightColor
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
return ambientLightColor;
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
ambientLightColor = value;
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public DirectionalLight DirectionalLight0
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
get
|
|
|
|
{
|
|
|
|
return directionalLight[0];
|
|
|
|
}
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public DirectionalLight DirectionalLight1
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
get
|
|
|
|
{
|
|
|
|
return directionalLight[1];
|
|
|
|
}
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public DirectionalLight DirectionalLight2
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
get
|
|
|
|
{
|
|
|
|
return directionalLight[2];
|
|
|
|
}
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public bool LightingEnabled
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
return lightingEnabled;
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
lightingEnabled = value;
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public Vector3 FogColor
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
return this.fogColor.GetValueVector3();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
this.fogVector.SetValue(value);
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public bool FogEnabled
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
return fogEnabled;
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
FogEnabled = value;
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public float FogEnd
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2012-03-10 11:52:21 +00:00
|
|
|
throw new NotImplementedException();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2012-03-10 11:52:21 +00:00
|
|
|
throw new NotImplementedException();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public float FogStart
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2012-03-10 11:52:21 +00:00
|
|
|
throw new NotImplementedException();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2012-03-10 11:52:21 +00:00
|
|
|
throw new NotImplementedException();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public Texture2D Texture
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
return this.texture.GetValueTexture2D();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
this.texture.SetValue(value);
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public bool TextureEnabled
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
return textureEnabled;
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2012-03-14 05:54:13 +00:00
|
|
|
TextureEnabled = value;
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public Vector3 DiffuseColor
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2012-03-10 11:52:21 +00:00
|
|
|
throw new NotImplementedException();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2012-03-10 11:52:21 +00:00
|
|
|
throw new NotImplementedException();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public Vector3 EmissiveColor
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2012-03-10 11:52:21 +00:00
|
|
|
throw new NotImplementedException();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2012-03-10 11:52:21 +00:00
|
|
|
throw new NotImplementedException();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public Vector3 SpecularColor
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2012-03-10 11:52:21 +00:00
|
|
|
throw new NotImplementedException();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2012-03-10 11:52:21 +00:00
|
|
|
throw new NotImplementedException();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public float SpecularPower
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2012-03-10 11:52:21 +00:00
|
|
|
throw new NotImplementedException();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2012-03-10 11:52:21 +00:00
|
|
|
throw new NotImplementedException();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public float Alpha
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2012-03-10 11:52:21 +00:00
|
|
|
throw new NotImplementedException();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2012-03-10 11:52:21 +00:00
|
|
|
throw new NotImplementedException();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public bool VertexColorEnabled
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
2011-12-27 08:19:27 +00:00
|
|
|
return this.vertexColorEnabled;
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
set
|
|
|
|
{
|
2011-12-27 08:19:27 +00:00
|
|
|
this.vertexColorEnabled = value;
|
|
|
|
SetTechnique();
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public override Effect Clone()
|
|
|
|
{
|
|
|
|
return new BasicEffect(this);
|
|
|
|
}
|
2011-12-27 08:19:27 +00:00
|
|
|
|
|
|
|
private void SetTechnique()
|
|
|
|
{
|
|
|
|
//TODO: implement completly
|
|
|
|
|
|
|
|
if (vertexColorEnabled)
|
|
|
|
{
|
|
|
|
this.CurrentTechnique = Techniques["VertexColor"];
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2012-03-10 11:52:21 +00:00
|
|
|
//this.CurrentTechnique = Techniques["NormalTex"]; //TODO: this is for ModelSample to be work
|
|
|
|
throw new InvalidOperationException("Currently ANX's BasicEffect only supports VertexColor technique");
|
2011-12-27 08:19:27 +00:00
|
|
|
}
|
2011-11-16 00:00:17 +00:00
|
|
|
}
|
|
|
|
}
|