using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using Aiwaz.Common; using Aiwaz.Core; using Aiwaz.Contracts; using Aiwaz.Resources; using Aiwaz.Resources.Prefab; using SlimDX.Windows; using System.Drawing; using Aiwaz.Common.Animations; namespace Aiwaz.Demo { static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { var console = new Win32Console(); var renderForm = new RenderForm("Aiwaz.Demo"); Engine.Initialize(null); var model = new BluModel(new BluModelParams() { FileName = "Data/ChamferBox.blu" } ); model.RootTransformation.LocalScale = new SlimDX.Vector3(0.1f, 0.1f, 0.1f); model.RootTransformation.LocalPosition = new SlimDX.Vector3(1.0f, 0.0f, 2.0f); var swapChain = new SwapChain(renderForm.Handle); swapChain.ClearColor = new SlimDX.Color4(Color.DarkBlue); swapChain.HasDepthStencilBuffer = true; swapChain.VSync = false; var camera = new PerspectiveCamera(new PerspectiveCameraParams() { aspectRatio = (float)renderForm.Size.Width / renderForm.Size.Height } ); var normalMapping = new Shader(new ShaderParams() { FileName = "Data/NormalOutput.fx", TechniqueName = "NormalMapping" } ); var wallTexture = new Texture(new FileTextureParams() { FileName = "Data/Wall.jpg" } ); var wallNormalTexture = new Texture(new FileTextureParams() { FileName = "Data/WallNormal.jpg" }); wallNormalTexture.BindingName = "Normal"; var roomCube = new Cube(new CubeParams() { Width = 10.0f, Height = 10.0f, Depth = 10.0f, IsInverted = true } ); var roomCubeTransformation = new Transformation(new DefaultTransformationBindings()); roomCubeTransformation.LocalPosition = new SlimDX.Vector3(0.0f, 0.0f, 2.0f); var lightPosition = new ReferenceT(new SlimDX.Vector3(0.0f, 1.0f, 0.0f)); var lightColor = new ReferenceT(new SlimDX.Vector4(2.0f, 2.0f, 1.0f, 1.0f)); var lightParameters = new ShaderParameterSet(); lightParameters.IsPreconditionForFollowingShaders = true; lightParameters.SetParameter("LightPosition", lightPosition, ParameterBindType.BindBySemantic); lightParameters.SetParameter("LightColor", lightColor, ParameterBindType.BindBySemantic); var rootRenderNode = new RenderCommandNode(); rootRenderNode.Children.Add(swapChain); rootRenderNode.Children.Add(camera); rootRenderNode.Children.Add(lightParameters); rootRenderNode.Children.Add(roomCubeTransformation); rootRenderNode.Children.Add(normalMapping); rootRenderNode.Children.Add(wallTexture); rootRenderNode.Children.Add(wallNormalTexture); rootRenderNode.Children.Add(roomCube.GeometryBuffer); rootRenderNode.Children.Add(model.RootNode); var refreshTimer = 0.0f; MessagePump.Run(renderForm, () => { rootRenderNode.Update(false); rootRenderNode.ProcessCommands(); swapChain.Present(); float time = (float)HiPerfTimer.ElapsedTime * 10.0f; lightColor.Value = new SlimDX.Vector4(2.0f, 2.0f, 1.0f, 1.0f) * ((float)Math.Sin(time)+ 2.0f); roomCubeTransformation.LocalRotationYPR = new SlimDX.Vector3(time, time, time) * 0.01f; refreshTimer -= (float)HiPerfTimer.LastDeltaTime; if (refreshTimer < 0.0f) { refreshTimer = 1.0f; renderForm.Text = string.Format("Aiwaz: {0:F2} FPS ({1:F2} ms)", 1.0 / HiPerfTimer.LastDeltaTime, HiPerfTimer.LastDeltaTime * 1000); } model.RootTransformation.LocalRotationYPR = new SlimDX.Vector3(time, time, time) * 0.03f; }); renderForm = null; swapChain = null; Engine.Uninitialize(); } } }