using System;
using System.Windows.Forms;
using Microsoft.DirectX.Direct3D;
namespace blue_dish_te
{
///
/// Objekt pro vykreslovani podlahy. Objekt si vytvori VertexBuffer a naplni jej vrcholy.
/// Metoda Render vykresli buffer do zarizeni device (parametr konstruktoru)
///
internal class Podlaha
{
private Device device;
private VertexBuffer vb = null;
private Texture t;
public char type = ' ';
///
/// Konstruktor vytvori VertexBuffer a naplni ho souradnicemi
///
/// Reference na device do ktereho se bude kreslit
public Podlaha(Device dev)
{
device = dev;
//inicializace textury
try
{
t = TextureLoader.FromFile(device, "textury/podlaha.jpg");
}
catch (Exception e)
{
MessageBox.Show("Nepovedlo se nacist texturu pro podlahu.");
Console.WriteLine(e);
return;
}
//nacteni bodu
vb = new VertexBuffer(typeof(CustomVertex.PositionNormalTextured), //buffer obsahuje pouze souradnice, normaly a nastaveni pozic na texture
5, //celkem 5 bodu
device, //zarizeni pro ktere je buffer vytovren
Usage.WriteOnly, //do bufferu se bude pouze zapisovat
CustomVertex.PositionNormalTextured.Format, //format vrcholu
Pool.Managed); //jakym zpusobem je VB zpravovan
//uzamceni VB a ziskani pole
CustomVertex.PositionNormalTextured[] v = (CustomVertex.PositionNormalTextured[]) vb.Lock(0, 0);
//naplneni VB souradnicemi vrcholu x y z nx ny nz u v
v[0] = new CustomVertex.PositionNormalTextured(2, 0, 0, 0, 1, 0, 1, 1);
v[1] = new CustomVertex.PositionNormalTextured(0, 0, 0, 0, 1, 0, 0, 1);
v[2] = new CustomVertex.PositionNormalTextured(2, 0, 2, 0, 1, 0, 1, 0);
v[3] = new CustomVertex.PositionNormalTextured(0, 0, 0, 0, 1, 0, 0, 1);
v[4] = new CustomVertex.PositionNormalTextured(0, 0, 2, 0, 1, 0, 0, 0);
vb.Unlock(); //odemknuti VB
}
///
/// Vykresleni VertexBufferu jako trojuhelnikoveho stripu
///
public void Render()
{
device.SetTexture(0, t);
device.SetStreamSource(0, vb, 0); //nastaveni zdroje dat
device.VertexFormat = CustomVertex.PositionNormalTextured.Format; //format dat
device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 3); //vykresleni VB jako TriangleStrip
}
}
}