public SkyFace(string sName, SkyBox.Face face) { m_sName = sName; // create the vertices for the box m_Corners = new CustomVertex.PositionNormalTextured[4]; switch (face) { case SkyBox.Face.Top: m_Corners[0].X = -500.0f; m_Corners[0].Y = 500.0f; m_Corners[0].Z = -500.0f; m_Corners[0].Tu = 0.0f; m_Corners[0].Tv = 1.0f; m_Corners[0].Nx = 0.0f; m_Corners[0].Ny = -1.0f; m_Corners[0].Nz = 0.0f; m_Corners[1].X = 500.0f; m_Corners[1].Y = 500.0f; m_Corners[1].Z = -500.0f; m_Corners[1].Tu = 0.0f; m_Corners[1].Tv = 0.0f; m_Corners[1].Nx = 0.0f; m_Corners[1].Ny = -1.0f; m_Corners[1].Nz = 0.0f; m_Corners[2].X = -500.0f; m_Corners[2].Y = 500.0f; m_Corners[2].Z = 500.0f; m_Corners[2].Tu = 1.0f; m_Corners[2].Tv = 1.0f; m_Corners[2].Nx = 0.0f; m_Corners[2].Ny = -1.0f; m_Corners[2].Nz = 0.0f; m_Corners[3].X = 500.0f; m_Corners[3].Y = 500.0f; m_Corners[3].Z = 500.0f; m_Corners[3].Tu = 1.0f; m_Corners[3].Tv = 0.0f; m_Corners[3].Nx = 0.0f; m_Corners[3].Ny = -1.0f; m_Corners[3].Nz = 0.0f; break; case SkyBox.Face.Bottom: m_Corners[0].X = -500.0f; // nw m_Corners[0].Y = -500.0f; m_Corners[0].Z = 500.0f; m_Corners[0].Tu = 0.0f; m_Corners[0].Tv = 0.0f; m_Corners[0].Nx = 0.0f; m_Corners[0].Ny = 1.0f; m_Corners[0].Nz = 0.0f; m_Corners[1].X = 500.0f; // ne m_Corners[1].Y = -500.0f; m_Corners[1].Z = 500.0f; m_Corners[1].Tu = 1.0f; m_Corners[1].Tv = 1.0f; m_Corners[1].Nx = 0.0f; m_Corners[1].Ny = 1.0f; m_Corners[1].Nz = 0.0f; m_Corners[2].X = -500.0f; // sw m_Corners[2].Y = -500.0f; m_Corners[2].Z = -500.0f; m_Corners[2].Tu = 1.0f; m_Corners[2].Tv = 0.0f; m_Corners[2].Nx = 0.0f; m_Corners[2].Ny = 1.0f; m_Corners[2].Nz = 0.0f; m_Corners[3].X = 500.0f; // se m_Corners[3].Y = -500.0f; m_Corners[3].Z = -500.0f; m_Corners[3].Tu = 0.0f; m_Corners[3].Tv = 1.0f; m_Corners[3].Nx = 0.0f; m_Corners[3].Ny = 1.0f; m_Corners[3].Nz = 0.0f; break; case SkyBox.Face.Front: m_Corners[0].X = -500.0f; // upper nw m_Corners[0].Y = 500.0f; m_Corners[0].Z = 500.0f; m_Corners[0].Tu = 0.0f; m_Corners[0].Tv = 0.0f; m_Corners[0].Nx = 0.0f; m_Corners[0].Ny = 0.0f; m_Corners[0].Nz = -1.0f; m_Corners[1].X = 500.0f; // upper ne m_Corners[1].Y = 500.0f; m_Corners[1].Z = 500.0f; m_Corners[1].Tu = 1.0f; m_Corners[1].Tv = 0.0f; m_Corners[1].Nx = 0.0f; m_Corners[1].Ny = 0.0f; m_Corners[1].Nz = -1.0f; m_Corners[2].X = -500.0f; // lower nw m_Corners[2].Y = -500.0f; m_Corners[2].Z = 500.0f; m_Corners[2].Tu = 0.0f; m_Corners[2].Tv = 1.0f; m_Corners[2].Nx = 0.0f; m_Corners[2].Ny = 0.0f; m_Corners[2].Nz = -1.0f; m_Corners[3].X = 500.0f; // lower ne m_Corners[3].Y = -500.0f; m_Corners[3].Z = 500.0f; m_Corners[3].Tu = 1.0f; m_Corners[3].Tv = 1.0f; m_Corners[3].Nx = 0.0f; m_Corners[3].Ny = 0.0f; m_Corners[3].Nz = -1.0f; break; case SkyBox.Face.Right: m_Corners[0].X = 500.0f; // upper ne m_Corners[0].Y = 500.0f; m_Corners[0].Z = 500.0f; m_Corners[0].Tu = 0.0f; m_Corners[0].Tv = 0.0f; m_Corners[0].Nx = -1.0f; m_Corners[0].Ny = 0.0f; m_Corners[0].Nz = 0.0f; m_Corners[1].X = 500.0f; // upper se m_Corners[1].Y = 500.0f; m_Corners[1].Z = -500.0f; m_Corners[1].Tu = 1.0f; m_Corners[1].Tv = 0.0f; m_Corners[1].Nx = -1.0f; m_Corners[1].Ny = 0.0f; m_Corners[1].Nz = 0.0f; m_Corners[2].X = 500.0f; // lower ne m_Corners[2].Y = -500.0f; m_Corners[2].Z = 500.0f; m_Corners[2].Tu = 0.0f; m_Corners[2].Tv = 1.0f; m_Corners[2].Nx = -1.0f; m_Corners[2].Ny = 0.0f; m_Corners[2].Nz = 0.0f; m_Corners[3].X = 500.0f; // lower se m_Corners[3].Y = -500.0f; m_Corners[3].Z = -500.0f; m_Corners[3].Tu = 1.0f; m_Corners[3].Tv = 1.0f; m_Corners[3].Nx = -1.0f; m_Corners[3].Ny = 0.0f; m_Corners[3].Nz = 0.0f; break; case SkyBox.Face.Back: m_Corners[0].X = 500.0f; // upper se m_Corners[0].Y = 500.0f; m_Corners[0].Z = -500.0f; m_Corners[0].Tu = 0.0f; m_Corners[0].Tv = 0.0f; m_Corners[0].Nx = 0.0f; m_Corners[0].Ny = 0.0f; m_Corners[0].Nz = -1.0f; m_Corners[1].X = -500.0f; // upper sw m_Corners[1].Y = 500.0f; m_Corners[1].Z = -500.0f; m_Corners[1].Tu = 1.0f; m_Corners[1].Tv = 0.0f; m_Corners[1].Nx = 0.0f; m_Corners[1].Ny = 0.0f; m_Corners[1].Nz = -1.0f; m_Corners[2].X = 500.0f; // lower se m_Corners[2].Y = -500.0f; m_Corners[2].Z = -500.0f; m_Corners[2].Tu = 0.0f; m_Corners[2].Tv = 1.0f; m_Corners[2].Nx = 0.0f; m_Corners[2].Ny = 0.0f; m_Corners[2].Nz = -1.0f; m_Corners[3].X = -500.0f; // lower sw m_Corners[3].Y = -500.0f; m_Corners[3].Z = -500.0f; m_Corners[3].Tu = 1.0f; m_Corners[3].Tv = 1.0f; m_Corners[3].Nx = 0.0f; m_Corners[3].Ny = 0.0f; m_Corners[3].Nz = -1.0f; break; case SkyBox.Face.Left: m_Corners[0].X = -500.0f; // upper south m_Corners[0].Y = 500.0f; m_Corners[0].Z = -500.0f; m_Corners[0].Tu = 0.0f; m_Corners[0].Tv = 0.0f; m_Corners[0].Nx = 1.0f; m_Corners[0].Ny = 0.0f; m_Corners[0].Nz = 0.0f; m_Corners[1].X = -500.0f; // upper north m_Corners[1].Y = 500.0f; m_Corners[1].Z = 500.0f; m_Corners[1].Tu = 1.0f; m_Corners[1].Tv = 0.0f; m_Corners[1].Nx = 1.0f; m_Corners[1].Ny = 0.0f; m_Corners[1].Nz = 0.0f; m_Corners[2].X = -500.0f; // lower south m_Corners[2].Y = -500.0f; m_Corners[2].Z = -500.0f; m_Corners[2].Tu = 0.0f; m_Corners[2].Tv = 1.0f; m_Corners[2].Nx = 1.0f; m_Corners[2].Ny = 0.0f; m_Corners[2].Nz = 0.0f; m_Corners[3].X = -500.0f; // lower north m_Corners[3].Y = -500.0f; m_Corners[3].Z = 500.0f; m_Corners[3].Tu = 1.0f; m_Corners[3].Tv = 1.0f; m_Corners[3].Nx = 1.0f; m_Corners[3].Ny = 0.0f; m_Corners[3].Nz = 0.0f; break; } // load the texture for the face try { m_Image = new Image(sName); m_bValid = true; } catch { Console.AddLine("Unable to create skybox texture for " + sName); } }
public SkyFace(string sName, SkyBox.Face face) { m_sName = sName; // create the vertices for the box m_Corners = new CustomVertex.PositionNormalTextured[4]; switch (face) { case SkyBox.Face.Top: m_Corners[0].X = -100.0f; m_Corners[0].Y = 100.0f; m_Corners[0].Z = -100.0f; m_Corners[0].Tu = 0.0f; m_Corners[0].Tv = 1.0f; m_Corners[0].Nx = 0.0f; m_Corners[0].Ny = -1.0f; m_Corners[0].Nz = 0.0f; m_Corners[1].X = 100.0f; m_Corners[1].Y = 100.0f; m_Corners[1].Z = -100.0f; m_Corners[1].Tu = 0.0f; m_Corners[1].Tv = 0.0f; m_Corners[1].Nx = 0.0f; m_Corners[1].Ny = -1.0f; m_Corners[1].Nz = 0.0f; m_Corners[2].X = -100.0f; m_Corners[2].Y = 100.0f; m_Corners[2].Z = 100.0f; m_Corners[2].Tu = 1.0f; m_Corners[2].Tv = 1.0f; m_Corners[2].Nx = 0.0f; m_Corners[2].Ny = -1.0f; m_Corners[2].Nz = 0.0f; m_Corners[3].X = 100.0f; m_Corners[3].Y = 100.0f; m_Corners[3].Z = 100.0f; m_Corners[3].Tu = 1.0f; m_Corners[3].Tv = 0.0f; m_Corners[3].Nx = 0.0f; m_Corners[3].Ny = -1.0f; m_Corners[3].Nz = 0.0f; break; case SkyBox.Face.Bottom: m_Corners[0].X = -100.0f; // nw m_Corners[0].Y = -100.0f; m_Corners[0].Z = 100.0f; m_Corners[0].Tu = 0.0f; m_Corners[0].Tv = 0.0f; m_Corners[0].Nx = 0.0f; m_Corners[0].Ny = 1.0f; m_Corners[0].Nz = 0.0f; m_Corners[1].X = 100.0f; // ne m_Corners[1].Y = -100.0f; m_Corners[1].Z = 100.0f; m_Corners[1].Tu = 1.0f; m_Corners[1].Tv = 1.0f; m_Corners[1].Nx = 0.0f; m_Corners[1].Ny = 1.0f; m_Corners[1].Nz = 0.0f; m_Corners[2].X = -100.0f; // sw m_Corners[2].Y = -100.0f; m_Corners[2].Z = -100.0f; m_Corners[2].Tu = 1.0f; m_Corners[2].Tv = 0.0f; m_Corners[2].Nx = 0.0f; m_Corners[2].Ny = 1.0f; m_Corners[2].Nz = 0.0f; m_Corners[3].X = 100.0f; // se m_Corners[3].Y = -100.0f; m_Corners[3].Z = -100.0f; m_Corners[3].Tu = 0.0f; m_Corners[3].Tv = 1.0f; m_Corners[3].Nx = 0.0f; m_Corners[3].Ny = 1.0f; m_Corners[3].Nz = 0.0f; break; case SkyBox.Face.Front: m_Corners[0].X = -100.0f; // upper nw m_Corners[0].Y = 100.0f; m_Corners[0].Z = 100.0f; m_Corners[0].Tu = 0.0f; m_Corners[0].Tv = 0.0f; m_Corners[0].Nx = 0.0f; m_Corners[0].Ny = 0.0f; m_Corners[0].Nz = -1.0f; m_Corners[1].X = 100.0f; // upper ne m_Corners[1].Y = 100.0f; m_Corners[1].Z = 100.0f; m_Corners[1].Tu = 1.0f; m_Corners[1].Tv = 0.0f; m_Corners[1].Nx = 0.0f; m_Corners[1].Ny = 0.0f; m_Corners[1].Nz = -1.0f; m_Corners[2].X = -100.0f; // lower nw m_Corners[2].Y = -100.0f; m_Corners[2].Z = 100.0f; m_Corners[2].Tu = 0.0f; m_Corners[2].Tv = 1.0f; m_Corners[2].Nx = 0.0f; m_Corners[2].Ny = 0.0f; m_Corners[2].Nz = -1.0f; m_Corners[3].X = 100.0f; // lower ne m_Corners[3].Y = -100.0f; m_Corners[3].Z = 100.0f; m_Corners[3].Tu = 1.0f; m_Corners[3].Tv = 1.0f; m_Corners[3].Nx = 0.0f; m_Corners[3].Ny = 0.0f; m_Corners[3].Nz = -1.0f; break; case SkyBox.Face.Right: m_Corners[0].X = 100.0f; // upper ne m_Corners[0].Y = 100.0f; m_Corners[0].Z = 100.0f; m_Corners[0].Tu = 0.0f; m_Corners[0].Tv = 0.0f; m_Corners[0].Nx = -1.0f; m_Corners[0].Ny = 0.0f; m_Corners[0].Nz = 0.0f; m_Corners[1].X = 100.0f; // upper se m_Corners[1].Y = 100.0f; m_Corners[1].Z = -100.0f; m_Corners[1].Tu = 1.0f; m_Corners[1].Tv = 0.0f; m_Corners[1].Nx = -1.0f; m_Corners[1].Ny = 0.0f; m_Corners[1].Nz = 0.0f; m_Corners[2].X = 100.0f; // lower ne m_Corners[2].Y = -100.0f; m_Corners[2].Z = 100.0f; m_Corners[2].Tu = 0.0f; m_Corners[2].Tv = 1.0f; m_Corners[2].Nx = -1.0f; m_Corners[2].Ny = 0.0f; m_Corners[2].Nz = 0.0f; m_Corners[3].X = 100.0f; // lower se m_Corners[3].Y = -100.0f; m_Corners[3].Z = -100.0f; m_Corners[3].Tu = 1.0f; m_Corners[3].Tv = 1.0f; m_Corners[3].Nx = -1.0f; m_Corners[3].Ny = 0.0f; m_Corners[3].Nz = 0.0f; break; case SkyBox.Face.Back: m_Corners[0].X = 100.0f; // upper se m_Corners[0].Y = 100.0f; m_Corners[0].Z = -100.0f; m_Corners[0].Tu = 0.0f; m_Corners[0].Tv = 0.0f; m_Corners[0].Nx = 0.0f; m_Corners[0].Ny = 0.0f; m_Corners[0].Nz = -1.0f; m_Corners[1].X = -100.0f; // upper sw m_Corners[1].Y = 100.0f; m_Corners[1].Z = -100.0f; m_Corners[1].Tu = 1.0f; m_Corners[1].Tv = 0.0f; m_Corners[1].Nx = 0.0f; m_Corners[1].Ny = 0.0f; m_Corners[1].Nz = -1.0f; m_Corners[2].X = 100.0f; // lower se m_Corners[2].Y = -100.0f; m_Corners[2].Z = -100.0f; m_Corners[2].Tu = 0.0f; m_Corners[2].Tv = 1.0f; m_Corners[2].Nx = 0.0f; m_Corners[2].Ny = 0.0f; m_Corners[2].Nz = -1.0f; m_Corners[3].X = -100.0f; // lower sw m_Corners[3].Y = -100.0f; m_Corners[3].Z = -100.0f; m_Corners[3].Tu = 1.0f; m_Corners[3].Tv = 1.0f; m_Corners[3].Nx = 0.0f; m_Corners[3].Ny = 0.0f; m_Corners[3].Nz = -1.0f; break; case SkyBox.Face.Left: m_Corners[0].X = -100.0f; // upper south m_Corners[0].Y = 100.0f; m_Corners[0].Z = -100.0f; m_Corners[0].Tu = 0.0f; m_Corners[0].Tv = 0.0f; m_Corners[0].Nx = 1.0f; m_Corners[0].Ny = 0.0f; m_Corners[0].Nz = 0.0f; m_Corners[1].X = -100.0f; // upper north m_Corners[1].Y = 100.0f; m_Corners[1].Z = 100.0f; m_Corners[1].Tu = 1.0f; m_Corners[1].Tv = 0.0f; m_Corners[1].Nx = 1.0f; m_Corners[1].Ny = 0.0f; m_Corners[1].Nz = 0.0f; m_Corners[2].X = -100.0f; // lower south m_Corners[2].Y = -100.0f; m_Corners[2].Z = -100.0f; m_Corners[2].Tu = 0.0f; m_Corners[2].Tv = 1.0f; m_Corners[2].Nx = 1.0f; m_Corners[2].Ny = 0.0f; m_Corners[2].Nz = 0.0f; m_Corners[3].X = -100.0f; // lower north m_Corners[3].Y = -100.0f; m_Corners[3].Z = 100.0f; m_Corners[3].Tu = 1.0f; m_Corners[3].Tv = 1.0f; m_Corners[3].Nx = 1.0f; m_Corners[3].Ny = 0.0f; m_Corners[3].Nz = 0.0f; break; } // load the texture for the face try { m_Texture = GraphicsUtility.CreateTexture(CGameEngine.Device3D, sName); m_bValid = true; } catch { Console.AddLine("Unable to create skybox texture for " + sName); } // Create a quad for rendering the face m_VB = new VertexBuffer(typeof(CustomVertex.PositionNormalTextured), 4, CGameEngine.Device3D, Usage.WriteOnly, CustomVertex.PositionNormalTextured.Format, Pool.Default); m_VB.Created += new System.EventHandler(this.CreateQuad); CreateQuad(m_VB, null); }