2.0 Terrain del 1

Nu tänkte jag gå igenom hur vi skapar en terrain/terräng till vårt spel.

En terräng består av massvis av trianglar som sitter ihop som ett rutnät. Så vi ska först gå igenom hur vi skapar vår första triangel (med färg).

Starta ett nytt projekt (Windows Game 4.0). Detta projekt får heta terrain...

När vi tidigare gjorde vår 3d axis så använde vi oss av Basic Effect för att rita ut våra vertices. Men den effecten kan endast måla vitt och är för basic för vår terräng som vi ska skapa. Eftersom jag inte har någon aning om hur man skriver effectfiler just nu så ska vi därför hämta en färdigskriven effectfil från Riemers XNA tutorial.

http://users.pandora.be/riemer/files/effects.fx

Tanka ner denna fil och lägg in den i terrainContent(Content). Istället för Basic Effect så skapar vi nu en Effect:

Effect effect;

Sedan går vi ner till Initialize voiden och sätter ett värde på vår effect. Den ska laddas från vår effects.fx som vi tankat ner:

effect = Content.Load<Effect>("effects");

Nu ska vi göra samma sak som vi gjorde med basic effecten. Vi ska gå igenom alla effectpass och applya dem till vår graphicsdevice. Tidigare så skrev vi såhär i Draw voiden:

foreach (EffectPass CurrentPass in effect.CurrentTechnique.Passes)
{
CurrentPass.Apply();
}


Nu ska vi göra liknande med vår effects.fx, men denna innehåller flera olika techniques än Basic Effect. Om du är nyfiken så kan du öppna upp effects.fx och se alla techniques som den innehåller:
  • Pretransformed
  • Colored
  • ColoredNoShading
  • Textured
  • TexturedNoShading
  • PointSprites

Den vi ska använda nu är Pretransformed, så vi går till vår Drawfunktion och ställer in vår CurrentTechnique till pretransformed. Sedan så applyar vi alla passes:

effect.CurrentTechnique = effect.Techniques["Pretransformed"];

foreach (EffectPass pass in effect.CurrentTechnique.Passes)
{
pass.Apply();
}

Nu kan vi börja rita ut vår första triangel så vi börjar med att skapa vår (globala) Vertex array, eftersom den ska har färger så ska vi använda oss av VertexPositionColor:

VertexPositionColor[] vertices;

Sedan skapar vi vår funktion som ska deklarera triangeln:

void SetUpVertices()
{
vertices = new VertexPositionColor[3];
vertices[0] = new VertexPositionColor(new Vector3(-0.5f, -0.5f, 0f), Color.Green);
vertices[1] = new VertexPositionColor(new Vector3(0f, 0.5f, 0f), Color.Yellow);
vertices[2] = new VertexPositionColor(new Vector3(0.5f, -0.5f, 0f), Color.Red);        
}

Vi anropar denna i LoadContent() funktionen så att triangeln deklareras och läggs i arrayen när spelet laddas.
Nu går vi ner till Draw och ritar ut triangeln med vår GraphicsDevice:

GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 1, VertexPositionColor.VertexDeclaration);

Nu vill vi inte att datorn ska dra streck mellan 2 punkter och som vi gjort tidigare, utan den ska fortsätta dra strecket och fylla ut mellanrummen var tredje punkt, så att det blir fyllda trianglar.

Dra en F5.



 


Kommentarer

Kommentera inlägget här:

Namn:
Kom ihåg mig?

E-postadress: (publiceras ej)

URL/Bloggadress:

Kommentar:

Trackback
RSS 2.0