public void SkyBox_Render()
{
if (_instance.skyEnabled)
{
try
{
R3DVECTOR target = REngine.Instance._camera.Target;
Matrix view = REngine.Instance._camera.ViewMatrix.matrix;
Matrix proj = REngine.Instance._camera.ProjectionMatrix.matrix;
R3DVECTOR camPos = REngine.Instance._camera.Position;
skyBoxWorld = Matrix.Identity * Matrix.CreateScale(REngine.Instance._camera.zfar*0.5f) * Matrix.CreateWorld(camPos.vector, Vector3.Forward, Vector3.Up);
//skyBoxWorld = Matrix.Identity * Matrix.CreateWorld(camPos.vector, Vector3.Forward, Vector3.Up);
bool flip = false;
if (_reflected)
{
flip = true;
target.Y *= -1;
camPos.Y *= -1;
if (REngine.Instance._camera.Position.Y < RWater.water.World.Translation.Y)
flip = false;
//skyBoxWorld = (Matrix.CreateScale(REngine.Instance._camera.zfar) * Matrix.CreateTranslation(camPos.vector)) * _reflection;
skyBoxWorld *= _reflection;
//target.Y *= -1;
//camPos.Y *= -1;
//REngine.Instance._camera.Position = camPos;
//REngine.Instance._camera.LookAt(target);
//REngine.Instance._camera.Update();
//camPos.Y *= -1;
//view *= _reflection;
//view = Matrix.CreateV
//proj *= _reflection;
}
else
{
view = REngine.Instance._camera.viewMatrix;
}
_instance.skyEffect.Parameters["TextureScale"].SetValue(_instance.TextureScale);
_instance.skyEffect.Parameters["surfaceTexture"].SetValue(_instance.skyTex);
_instance.skyEffect.Parameters["View"].SetValue(view);
_instance.skyEffect.Parameters["Projection"].SetValue(proj);
_instance.skyEffect.Parameters["EyePosition"].SetValue(camPos.vector);
_instance.skyEffect.Parameters["World"].SetValue(skyBoxWorld);
_instance.skyEffect.Parameters["Reflected"].SetValue(flip);
//_instance.skyEffect.Parameters["FOGENABLE"].SetValue(RAtmosphere.Instance.fogEnabled);
//_instance.skyEffect.Parameters["FOGENABLE"].SetValue(false);
//_instance.skyEffect.Parameters["FOGCOLOR"].SetValue(RAtmosphere.Instance.fogColor);
//_instance.skyEffect.Parameters["FOGDIST"].SetValue(RAtmosphere.Instance.fogDistance);
REngine.Instance._game.GraphicsDevice.DepthStencilState.DepthBufferEnable = false;
//_instance.skyEffect.Begin();
REngine.Instance._graphics.GraphicsDevice.RasterizerState.CullMode = CullMode.None;
foreach (ModelMesh mesh in _instance.skyBox.Meshes)
{
mesh.Draw();
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
REngine.Instance.AddToLog(e.ToString());
}
}
}