Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

Hoogte punt in triangle van heightmap (3D)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig om een simpel RTS spel te maken en ben net 2 weken onderweg. Ik heb inmiddels een heightmap ingelezen en kan deze renderen. Nu wil ik de hoogte van een willekeurig punt in de heightmap bepalen.

De heightmap bestaat uit een 2d array van Vector3 welke de xyz positie bevat van elk punt in de map. Als ik de map render deel ik de vierkanten van de 2d array op in triangles. Ik ben inmiddels zover dat ik weet op welke triangle ik sta en hoef nu alleen de hoogte nog berekenen. Ik heb een flauw vermoeden dat dit met de soscastoa regel kan maar mijn wiskunde is niet je van het.

Ik heb al gezocht met de woorden heightmap triangle en height maar ben nog niet echt veel wijzer geworden dus ik hoop dat iemand mij in de goede richting kan duwen.

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 29-11 17:17
Zoek eens op 'barycentric coordinates'. Dat is wat je wilt hebben. (Is bijv. ook hoe je texture coordinates uit zou rekenen.)

[ Voor 30% gewijzigd door R4gnax op 12-07-2010 20:43 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 20:54

.oisyn

Moderator Devschuur®

Demotivational Speaker

Barycentrische coordinaten zijn een oplossing, al is het voor triangles in een heightmap ook wel wat simpeler te doen aangezien de triangles altijd gelijkbenig zijn en een rechte hoek hebben. Ik ga even uit van een z-as die de hoogte in gaat, als dat bij jouw coordinatenstelsel anders is moet je de boel even omdraaien.

Stel dit is je triangle
code:
1
2
3
4
5
6
7
8
9
10
(0, 0)    (1, 0)
v0 +------+ v2
   |  p  /
   |  + /
   |   /
   |  /
   | /
   |/
v1 +
(0, 1)

En p is het punt waarvan je de hoogte uit wilt rekenen. Feitelijk wil je gewoon bilinear interpoleren. Je berekent eerst de x- en y-coordinaten van p relatief aan de triangle, bijv. (0.5, 0.3). Het is van belang dat deze altijd tussen 0 en 1 liggen, vandaar dat ik de coordinaten van de hoekpunten ook zo heb gekozen in het plaatje. Dan is het simpelweg het uitrekenen van de z slopes in x- en y-richting (oftewel, voor de x, het verschil in de z van v2 en die van v0, en voor de y, het verschil in z van v1 en v0), en die vermenigvuldig je gewoon met resp. de x- en y-coordinaten van het punt dat je wilt berekenen, en dan heb je de z relatief aan v0. Dus voor de totale z moet je de z van dat punt er nog even bij optellen. Oftewel:
pz = v0z + px * (v2z - v0z) + py * (v1z - v0z)

[ Voor 13% gewijzigd door .oisyn op 13-07-2010 00:03 ]

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.


Verwijderd

Topicstarter
.oisyn, heel erg bedankt. Na wat aanpassing voor mijn coordinaten systeem is het hiermee gelukt.