protected override void InitializeInner() {
base.InitializeInner();
_materialsProvider = new MaterialsProviderDeferred();
_texturesProvider = new TexturesProvider();
DeviceContextHolder.Set(_materialsProvider);
DeviceContextHolder.Set(_texturesProvider);
Scene.Add(SkyObject.Create(500f));
IRenderableObject mainNode = null;
foreach (var kn5 in _kn5) {
if (mainNode == null) {
_carHelper.SetKn5(DeviceContextHolder);
} else {
_materialsProvider.SetKn5(kn5);
_texturesProvider.SetKn5(kn5.OriginalFilename, kn5);
}
var node = Kn5Converter.Convert(kn5.RootNode, DeviceContextHolder);
Scene.Add(node);
if (mainNode != null) continue;
node.IsReflectable = false;
mainNode = node;
}
var asList = mainNode as Kn5RenderableList;
if (asList != null) {
Scene.AddRange(_carHelper.LoadAmbientShadows(asList, 0.001f));
_carHelper.AdjustPosition(asList);
_carHelper.LoadMirrors(asList, DeviceContextHolder);
LoadLights(asList);
}
Scene.UpdateBoundingBox();
Camera = new CameraOrbit(32) {
Alpha = 0.9f,
Beta = 0.1f,
NearZ = 0.2f,
FarZ = 500f,
Radius = mainNode?.BoundingBox?.GetSize().Length() * 1.2f ?? 4.8f,
Target = (mainNode?.BoundingBox?.GetCenter() ?? Vector3.Zero) - new Vector3(0f, 0.05f, 0f)
};
_resetCamera = (CameraOrbit)Camera.Clone();
Sun = new DirectionalLight {
Color = FixLight(new Vector3(1.2f, 1.0f, 0.9f)) * 5f,
Direction = Vector3.Normalize(new Vector3(-1.2f, -3.4f, -2.2f))
};
_effect = DeviceContextHolder.GetEffect<EffectDeferredGObject>();
}