add SkyBox helper class
This commit is contained in:
parent
17807036d4
commit
e70b7d8af5
|
@ -226,6 +226,7 @@
|
||||||
<Compile Include="Entities\SystemComponents\EntityPresetComponent.cs" />
|
<Compile Include="Entities\SystemComponents\EntityPresetComponent.cs" />
|
||||||
<Compile Include="Graphics\PerspectiveCamera.cs" />
|
<Compile Include="Graphics\PerspectiveCamera.cs" />
|
||||||
<Compile Include="Graphics\EulerPerspectiveCamera.cs" />
|
<Compile Include="Graphics\EulerPerspectiveCamera.cs" />
|
||||||
|
<Compile Include="Graphics\Helpers\SkyBox.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
207
Blarg.GameFramework/Graphics/Helpers/SkyBox.cs
Normal file
207
Blarg.GameFramework/Graphics/Helpers/SkyBox.cs
Normal file
|
@ -0,0 +1,207 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Blarg.GameFramework.Graphics.Helpers
|
||||||
|
{
|
||||||
|
public class SkyBox
|
||||||
|
{
|
||||||
|
Texture _top;
|
||||||
|
Texture _bottom;
|
||||||
|
Texture _left;
|
||||||
|
Texture _right;
|
||||||
|
Texture _front;
|
||||||
|
Texture _back;
|
||||||
|
VertexBuffer _vertices;
|
||||||
|
|
||||||
|
RenderState _renderState;
|
||||||
|
BlendState _blendState;
|
||||||
|
|
||||||
|
public SkyBox(Texture top,
|
||||||
|
Texture bottom,
|
||||||
|
Texture left,
|
||||||
|
Texture right,
|
||||||
|
Texture front,
|
||||||
|
Texture back)
|
||||||
|
{
|
||||||
|
if (top == null || bottom == null || left == null || right == null || front == null || back == null)
|
||||||
|
throw new ArgumentNullException();
|
||||||
|
|
||||||
|
_top = top;
|
||||||
|
_bottom = bottom;
|
||||||
|
_left = left;
|
||||||
|
_right = right;
|
||||||
|
_front = front;
|
||||||
|
_back = back;
|
||||||
|
SetupRenderSettings();
|
||||||
|
GenerateVertices();
|
||||||
|
}
|
||||||
|
|
||||||
|
public SkyBox(Texture top,
|
||||||
|
Texture side,
|
||||||
|
Texture bottom)
|
||||||
|
{
|
||||||
|
if (top == null || side == null || bottom == null)
|
||||||
|
throw new ArgumentNullException();
|
||||||
|
|
||||||
|
_top = top;
|
||||||
|
_bottom = bottom;
|
||||||
|
_left = side;
|
||||||
|
_right = side;
|
||||||
|
_front = side;
|
||||||
|
_back = side;
|
||||||
|
SetupRenderSettings();
|
||||||
|
GenerateVertices();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetupRenderSettings()
|
||||||
|
{
|
||||||
|
_renderState = new RenderState();
|
||||||
|
_renderState.DepthTesting = false;
|
||||||
|
_renderState.DepthWriting = false;
|
||||||
|
|
||||||
|
_blendState = new BlendState();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GenerateVertices()
|
||||||
|
{
|
||||||
|
const float n = 10.0f;
|
||||||
|
|
||||||
|
_vertices = new VertexBuffer(Framework.GraphicsDevice,
|
||||||
|
VertexAttributeDeclarations.TexturePosition3D,
|
||||||
|
36,
|
||||||
|
BufferObjectUsage.Static);
|
||||||
|
|
||||||
|
// front
|
||||||
|
_vertices.SetTexCoord(0, 1.0f, 1.0f);
|
||||||
|
_vertices.SetTexCoord(1, 0.0f, 1.0f);
|
||||||
|
_vertices.SetTexCoord(2, 1.0f, 0.0f);
|
||||||
|
_vertices.SetTexCoord(3, 0.0f, 1.0f);
|
||||||
|
_vertices.SetTexCoord(4, 0.0f, 0.0f);
|
||||||
|
_vertices.SetTexCoord(5, 1.0f, 0.0f);
|
||||||
|
_vertices.SetPosition3D(0, -n, -n, -n);
|
||||||
|
_vertices.SetPosition3D(1, n, -n, -n);
|
||||||
|
_vertices.SetPosition3D(2, -n, n, -n);
|
||||||
|
_vertices.SetPosition3D(3, n, -n, -n);
|
||||||
|
_vertices.SetPosition3D(4, n, n, -n);
|
||||||
|
_vertices.SetPosition3D(5, -n, n, -n);
|
||||||
|
|
||||||
|
// left
|
||||||
|
_vertices.SetTexCoord(6, 1.0f, 1.0f);
|
||||||
|
_vertices.SetTexCoord(7, 0.0f, 1.0f);
|
||||||
|
_vertices.SetTexCoord(8, 1.0f, 0.0f);
|
||||||
|
_vertices.SetTexCoord(9, 0.0f, 1.0f);
|
||||||
|
_vertices.SetTexCoord(10, 0.0f, 0.0f);
|
||||||
|
_vertices.SetTexCoord(11, 1.0f, 0.0f);
|
||||||
|
_vertices.SetPosition3D(6, -n, -n, n);
|
||||||
|
_vertices.SetPosition3D(7, -n, -n, -n);
|
||||||
|
_vertices.SetPosition3D(8, -n, n, n);
|
||||||
|
_vertices.SetPosition3D(9, -n, -n, -n);
|
||||||
|
_vertices.SetPosition3D(10, -n, n, -n);
|
||||||
|
_vertices.SetPosition3D(11, -n, n, n);
|
||||||
|
|
||||||
|
// back
|
||||||
|
_vertices.SetTexCoord(12, 1.0f, 1.0f);
|
||||||
|
_vertices.SetTexCoord(13, 0.0f, 1.0f);
|
||||||
|
_vertices.SetTexCoord(14, 1.0f, 0.0f);
|
||||||
|
_vertices.SetTexCoord(15, 0.0f, 1.0f);
|
||||||
|
_vertices.SetTexCoord(16, 0.0f, 0.0f);
|
||||||
|
_vertices.SetTexCoord(17, 1.0f, 0.0f);
|
||||||
|
_vertices.SetPosition3D(12, n, -n, n);
|
||||||
|
_vertices.SetPosition3D(13, -n, -n, n);
|
||||||
|
_vertices.SetPosition3D(14, n, n, n);
|
||||||
|
_vertices.SetPosition3D(15, -n, -n, n);
|
||||||
|
_vertices.SetPosition3D(16, -n, n, n);
|
||||||
|
_vertices.SetPosition3D(17, n, n, n);
|
||||||
|
|
||||||
|
// right
|
||||||
|
_vertices.SetTexCoord(18, 1.0f, 1.0f);
|
||||||
|
_vertices.SetTexCoord(19, 0.0f, 1.0f);
|
||||||
|
_vertices.SetTexCoord(20, 1.0f, 0.0f);
|
||||||
|
_vertices.SetTexCoord(21, 0.0f, 1.0f);
|
||||||
|
_vertices.SetTexCoord(22, 0.0f, 0.0f);
|
||||||
|
_vertices.SetTexCoord(23, 1.0f, 0.0f);
|
||||||
|
_vertices.SetPosition3D(18, n, -n, -n);
|
||||||
|
_vertices.SetPosition3D(19, n, -n, n);
|
||||||
|
_vertices.SetPosition3D(20, n, n, -n);
|
||||||
|
_vertices.SetPosition3D(21, n, -n, n);
|
||||||
|
_vertices.SetPosition3D(22, n, n, n);
|
||||||
|
_vertices.SetPosition3D(23, n, n, -n);
|
||||||
|
|
||||||
|
// top
|
||||||
|
_vertices.SetTexCoord(24, 0.0f, 1.0f);
|
||||||
|
_vertices.SetTexCoord(25, 0.0f, 0.0f);
|
||||||
|
_vertices.SetTexCoord(26, 1.0f, 1.0f);
|
||||||
|
_vertices.SetTexCoord(27, 0.0f, 0.0f);
|
||||||
|
_vertices.SetTexCoord(28, 1.0f, 0.0f);
|
||||||
|
_vertices.SetTexCoord(29, 1.0f, 1.0f);
|
||||||
|
_vertices.SetPosition3D(24, n, n, n);
|
||||||
|
_vertices.SetPosition3D(25, -n, n, n);
|
||||||
|
_vertices.SetPosition3D(26, n, n, -n);
|
||||||
|
_vertices.SetPosition3D(27, -n, n, n);
|
||||||
|
_vertices.SetPosition3D(28, -n, n, -n);
|
||||||
|
_vertices.SetPosition3D(29, n, n, -n);
|
||||||
|
|
||||||
|
// bottom
|
||||||
|
_vertices.SetTexCoord(30, 0.0f, 1.0f);
|
||||||
|
_vertices.SetTexCoord(31, 0.0f, 0.0f);
|
||||||
|
_vertices.SetTexCoord(32, 1.0f, 1.0f);
|
||||||
|
_vertices.SetTexCoord(33, 0.0f, 0.0f);
|
||||||
|
_vertices.SetTexCoord(34, 1.0f, 0.0f);
|
||||||
|
_vertices.SetTexCoord(35, 1.0f, 1.0f);
|
||||||
|
_vertices.SetPosition3D(30, -n, -n, n);
|
||||||
|
_vertices.SetPosition3D(31, n, -n, n);
|
||||||
|
_vertices.SetPosition3D(32, -n, -n, -n);
|
||||||
|
_vertices.SetPosition3D(33, n, -n, n);
|
||||||
|
_vertices.SetPosition3D(34, n, -n, -n);
|
||||||
|
_vertices.SetPosition3D(35, -n, -n, -n);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Render()
|
||||||
|
{
|
||||||
|
var graphicsDevice = Framework.GraphicsDevice;
|
||||||
|
|
||||||
|
_renderState.Apply(graphicsDevice);
|
||||||
|
_blendState.Apply(graphicsDevice);
|
||||||
|
|
||||||
|
var shader = graphicsDevice.SimpleTextureShader;
|
||||||
|
graphicsDevice.BindShader(shader);
|
||||||
|
graphicsDevice.BindVertexBuffer(_vertices);
|
||||||
|
|
||||||
|
var modelViewMatrix = graphicsDevice.ViewContext.ModelViewMatrix;
|
||||||
|
// position at the origin, but keep current rotation
|
||||||
|
modelViewMatrix.M14 = 0.0f;
|
||||||
|
modelViewMatrix.M24 = 0.0f;
|
||||||
|
modelViewMatrix.M34 = 0.0f;
|
||||||
|
shader.SetModelViewMatrix(ref modelViewMatrix);
|
||||||
|
|
||||||
|
shader.SetProjectionMatrix(graphicsDevice.ViewContext.ProjectionMatrix);
|
||||||
|
|
||||||
|
// front
|
||||||
|
graphicsDevice.BindTexture(_front);
|
||||||
|
graphicsDevice.RenderTriangles(0, 2);
|
||||||
|
|
||||||
|
// left
|
||||||
|
graphicsDevice.BindTexture(_left);
|
||||||
|
graphicsDevice.RenderTriangles(6, 2);
|
||||||
|
|
||||||
|
// back
|
||||||
|
graphicsDevice.BindTexture(_back);
|
||||||
|
graphicsDevice.RenderTriangles(12, 2);
|
||||||
|
|
||||||
|
// right
|
||||||
|
graphicsDevice.BindTexture(_right);
|
||||||
|
graphicsDevice.RenderTriangles(18, 2);
|
||||||
|
|
||||||
|
// top
|
||||||
|
graphicsDevice.BindTexture(_top);
|
||||||
|
graphicsDevice.RenderTriangles(24, 2);
|
||||||
|
|
||||||
|
// bottom
|
||||||
|
graphicsDevice.BindTexture(_bottom);
|
||||||
|
graphicsDevice.RenderTriangles(30, 2);
|
||||||
|
|
||||||
|
graphicsDevice.UnbindShader();
|
||||||
|
graphicsDevice.UnbindVertexBuffer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Reference in a new issue