[XNA] Move the world or the camera

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • maniak
  • Registratie: Augustus 2000
  • Laatst online: 20-08 20:32
Ik ben nu een tijdje aan het proberen, lezen en coderen om een procedural terrain te maken. Het procedural deel is opzich niet zo moeilijk dmv perlin noise. Wat ik doe is een groot 'tapijt' van vertices en indices maken wat het terrein wordt. Op dit moment heb ik een flying cam en kan ik het terrein bekijken vanuit alle hoeken.

Wat ik wil bereiken is een 'eindeloze' wereld. Dus ik dacht door de camera op fixed locatie te zetten, op de hoogte na dan, dat ik de wereld beweeg ipv de camera. Vooralsnog bouw ik de vertices en indices opnieuw op maar dat is erg intensief. Zijn er functies om een set vertices en indices te verplaatsen? Of denk ik verkeerd en moet ik dus wel de camera verplaatsen?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Wat is volgens jou het voordeel van het bewegen van de wereld over het bewegen van de wereld en alles erin? Je zal in beide gevallen het einde van de wereld aan moeten vullen, toch?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • maniak
  • Registratie: Augustus 2000
  • Laatst online: 20-08 20:32
NMe schreef op woensdag 20 juli 2011 @ 19:37:
Wat is volgens jou het voordeel van het bewegen van de wereld over het bewegen van de wereld en alles erin? Je zal in beide gevallen het einde van de wereld aan moeten vullen, toch?
Het terrein is opgedeeld in blokken. Een blok wordt getoond als het dicht genoeg is bij de locatie. Door de camera stil te houden op een locatie voorkom ik mogelijke limieten van int's enzo.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:15

.oisyn

Moderator Devschuur®

Demotivational Speaker

Waarom zou je vertices willen verplaatsen? Je rendert het terrain toch met een matrix? Genereer die dingen gewoon in local space rond de oorspong

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • maniak
  • Registratie: Augustus 2000
  • Laatst online: 20-08 20:32
.oisyn schreef op woensdag 20 juli 2011 @ 20:22:
Waarom zou je vertices willen verplaatsen? Je rendert het terrain toch met een matrix? Genereer die dingen gewoon in local space rond de oorspong
Ik ben nogal nieuw met 3D programming, dus misschien mag mijn vraag vreemd lijken. Dit is wat ik doe:

C#:
1
2
3
4
5
6
7
8
9
vertices = new VertexPositionColorNormal[terrainWidth * terrainHeight];
for (int x = 0; x < terrainWidth; x++)
{
    for (int y = 0; y < terrainHeight; y++)
    {
        vertices[x + y * terrainWidth].Position = new Vector3(x + offSetX, y + offSetY, WorldData.getHeight(x + xLocation, y + yLocation));
        vertices[x + y * terrainWidth].Color = Color.ForestGreen;
    }
}

Omdat er dus een position gezet wordt dacht ik dat ik deze moet aanpassen om de wereld te verplaatsen. Maar misschien heb ik het mis?

[ Voor 4% gewijzigd door RobIII op 21-07-2011 00:48 . Reden: Code tags toegevoegd ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:15

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je moet de vertices gewoon transformeren met behulp van een matrix in je vertex shader op het moment dat je ze gaat renderen.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • maniak
  • Registratie: Augustus 2000
  • Laatst online: 20-08 20:32
.oisyn schreef op donderdag 21 juli 2011 @ 00:37:
Je moet de vertices gewoon transformeren met behulp van een matrix in je vertex shader op het moment dat je ze gaat renderen.
Oke.. maar welk object transformeer ik dan, ik heb alles in een VertexBuffer en in een IndexBuffer gestopt.

Ik moet zeggen dat ik 3D programming wel erg frustrerend vind als je niemand om je heen hebt die je kan helpen.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:15

.oisyn

Moderator Devschuur®

Demotivational Speaker

ik heb alles in een VertexBuffer en in een IndexBuffer gestopt.
En bij het renderen gaat elke vertex door de vertexshader, waar jij objecten transformeert van localspace naar viewspace aan de hand van de object, camera en projectiematrices.

Maar dit is wel heel erg basic, ik stel voor dat je een goede tutorial doorneemt (die zijn er genoeg op het gebied van XNA) :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 08-09 11:33
Als je een beginner bent zul je waarschijnlijk BasicEffect gebruiken ipv een echte Vertex (en Pixel) shader. In je code zal je dan ergens
C#:
1
BasicEffect.WorldMatrix = Matrix.Identity
(of een andere matrix) hebben staan, daar moet je mee gaan spelen mbv de static functies in de matrix class. Probeer bijvoorbeeld eens

C#:
1
BasicEffect.WorldMatrix = Matrix.CreateTranslation(position) * Matrix.CreateScale(0.5f * Vector3.One);


je moet natuurlijk het basic effect hebben dat geasocieerd is met je terrain

[ Voor 21% gewijzigd door roy-t op 25-07-2011 14:00 ]

~ Mijn prog blog!

Pagina: 1