Home | Aanpassen | Blog | Extra's | Log In | Info
Handleiding | D&D iconen | GML Parser | Archief | Iso City
Gebruikersnaam: Wachtwoord:  
Over ons | Features | Directory | Banners | Contact

Het ontwerpen van spellen met Game Maker
Het ontwerpen van spellen met Game Maker

Polygons in 3D tekenen

Het probleem met op de oude manier tekenen is dat een sprite of polygon altijd in de xy-plane ligt, dat betekent dat alle hoeken dezelfde diepte hebben. Voor echt 3D wil je vertices op verschillende diepten kunnen hebben. Vanaf dit moment zullen we alleen over z-coördinaten praten in plaats van diepte. Dus willen we coördinaten specificeren in (x,y,z) formaat. Hiervoor zijn er speciale versies van de geavanceerde tekenfuncties:

d3d_primitive_begin(type) Begin een 3D primitive van het aangegeven type: pr_pointlist, pr_linelist, pr_linestrip, pr_trianglelist, pr_trianglestrip of pr_trianglefan.
d3d_vertex(x, y, z) Voeg vertex (x,y,z) toe aan de primitive, gebruikmakend van de vooraf ingestelde kleur en doorzichtigheid.
d3d_vertex_color(x, y, z, klr, doorzichtigheid) Voeg vertex (x,y,z) toe aan de primitive, met zijn eigen kleur en doorzichtigheid. Dit maakt het mogelijk om primitieven te maken met een vloeiend veranderende kleur en doorzichtigheid.
d3d_primitive_end() Beëindig de beschrijving van de primitive. Deze functie tekent hem.

Om bijvoorbeeld een tetrahedron (driezijdige piramide) te tekenen die op de z=0 plane staat met zijn top op z = 200, kun je de volgende code gebruiken:

{
  d3d_primitive_begin(pr_trianglelist);
    d3d_vertex(100,100,0);
    d3d_vertex(100,200,0);    
    d3d_vertex(150,150,200);
    d3d_vertex(100,200,0);
    d3d_vertex(200,200,0);    
    d3d_vertex(150,150,200);
    d3d_vertex(200,200,0);
    d3d_vertex(100,100,0);    
    d3d_vertex(150,150,200);
    d3d_vertex(100,100,0);
    d3d_vertex(100,200,0);    
    d3d_vertex(200,200,0);
  d3d_primitive_end();
}

Als je dit nu wilt gebruiken, zie je hoogst waarschijnlijk alleen een driehoek op het scherm omdat de top van de tetrahedron erachter zal zijn van het gezichtspunt. Ook, slechts één kleur gebruikend, zou het moeilijk zijn om de verschillende oppervlakken te zien. Hieronder zullen we manieren zien om het gezichtspunt te veranderen. Kleuren toewijzen kan worden gedaan zoals hiervoor door de functie draw_set_color(col) op te roepen tussen de vertices.

Je kunt ook textured polygons in 3D gebruiken. Het werkt precies hetzelfde als beschreven in de geavanceerde tekenfuncties in de documentatie. Maar deze keer heb je 3D varianten nodig van de basisfuncties. Eén ding moet je je realiseren. In een textuur is positie (0,0) de linkerbovenhoek. Maar wanneer je projecties gebruikt (zoals hieronder aangegeven), is de linker onderhoek vaak (0,0). In zulke situaties moet je mogelijk de textuur verticaal spiegelen.

d3d_primitive_begin_texture(type, texid) Begin een 3D primitive van het aangegeven type met de gegeven textuur.
d3d_vertex_texture(x, y, z, xtex, ytex) Voeg vertex (x,y,z) toe aan de primitive met positie (xtex,ytex) in de textuur, verkleurd met vooraf ingestelde kleur en doorzichtigheid.
d3d_vertex_texture_color(x, y, z, xtex, ytex, klr, doorzichtigheid) Voeg vertex (x,y,z) toe aan de primitive met positie (xtex,ytex) in de textuur, verkleurd met zijn eigen kleur en doorzichtigheid.
d3d_primitive_end() Beëindig de beschrijving van de primitive. Deze functie tekent hem.

Dus kun je bijvoorbeeld de volgende code gebruiken om een achtergrond te tekenen die verdwijnt in de verte.

{
  var ttt;
  ttt = background_get_texture(back);
  d3d_primitive_begin_texture(pr_trianglefan,ttt);
    d3d_vertex_texture(0,480,0,0,0);
    d3d_vertex_texture(640,480,0,1,0);    
    d3d_vertex_texture(640,480,1000,1,1);
    d3d_vertex_texture(0,480,1000,0,1);
  d3d_primitive_end();
}

Een driehoek heeft een voor- en achterkant. De voorkant wordt gedefinieerd als de zijde waar de vertices tegen de klok in worden gedefinieerd. Normaal worden beide zijden getekend. Maar als je een gesloten vorm maakt is dit verspilling omdat de achterkant van de driehoek nooit kan worden gezien. In zulke gevallen kun je backface culling aanzetten. Dit bespaart ongeveer de helft van de tekentijd, maar laat aan jou de taak om je polygons op de goede manier te definiƫren. De volgende functie bestaat:

d3d_set_culling(cull) Geeft het starten van backface culling (true) of het stoppen van backface culling (false) aan.

Zoeken Zoeken


Alternatieve versies Alternatieve versies

Je kan de handleiding ook lezen op een lange pagina (± 1.5 mb)

Ook beschikbaar in: Engels Frans Duits

ZIP Download helpfile

Advertentie Advertentie

GameMaker Handleiding