95 lines
4.1 KiB
C#
95 lines
4.1 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// The main entry point for the application.
|
|
/// </summary>
|
|
[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<SlimDX.Vector3>(new SlimDX.Vector3(0.0f, 1.0f, 0.0f));
|
|
var lightColor = new ReferenceT<SlimDX.Vector4>(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();
|
|
}
|
|
}
|
|
}
|