Drag3Drop

GM-versie:.x, .x
Pro vereist:Ja
Niveau:Gemiddeld

Met Drag3Drop kan je eenvoudig met D&D-acties een 3D-spel maken.
Bijna alle mogelijkheden van de d3d_-functies zijn ingebouwd, waaronder modellen en transformaties. Daarnaast zijn er een aantal functies toegevoegd om het werken met 3D nog wat makkelijker te maken.

Inhoud:

Downloads

Drag3Drop.gex build 2
Drag3Drop.gex build 1
Drag3Drop-voorbeeld

Handleiding

control3d

Enable/disable 3D mode
Zet de 3D-modus aan of uit.

Set projection
Stel de camera in voor de projectie. De camera kijkt van (xfrom,yfrom,zfrom) naar (xto,yto,zto).

Edit projection
Verander de projectie hierboven door een omhoogvector (xup,yup,zup) op te geven en een kijkhoek van Angle graden en een beeldverhouding van Aspect en een maximale kijkafstand van zfar.

Enter perspective projection
Maak een perspectieve projectie op het gebied van (x,y) tot (x+Width,y+Height) met een draaiing van Angle graden.

Enter orthographic projection
Maak een orthografische projectie op het gebied van (x,y) tot (x+Width,y+Height) met een draaiing van Angle graden.
Gebruik deze actie samen met om overlays te tekenen.

Enable/disable culling
Zet backface culling aan of uit (standaard uit). Als het aan staat, wordt alleen de buitenkant van een vorm of model getekend. Dit zorgt ervoor dat het tekenen een stuk sneller gaat, maar een model is van binnen niet te zien en muren en vloeren zijn maar aan ÚÚn kant zichtbaar.

Enable/disable hiding
Zet de dieptebuffer aan of uit (standaard aan). Als hij uit staat, wordt elke nieuwe tekenactie bovenop de vorige gedaan, ongeacht de diepte.
Het wordt aanbevolen om de dieptebuffer uit te zetten bij het orthografisch tekenen.

Set fog
Zet mist aan of uit. Alles wat je tekent tot een afstand van Start wordt niet be´nvloed, alles wat je buiten de afstand End tekent wordt volledig met de opgegeven kleur gekleurd en tussen Start en End verloopt het verkleuren geleidelijk.

Enable/disable lighting
Zet belichting aan of uit. Als belichting aan staat, wordt belichting toegepast op alles wat je tekent a.d.h.v. de opgegeven lichten.

Enable/disable light
Zet het licht Index aan of uit. Het licht kan ingesteld worden als puntlicht of gericht licht met onderstaande acties.

Set point light
Stel het licht Index in als puntlicht op positie (x,y,z) met een lichtbereik van Range. De kleur van het licht wordt bepaald door .

Set directional light
Stel het licht Index in als gericht omgevingslicht met de richting (dx,dy, dz). De kleur van het licht wordt bepaald door .
Gebruik de richting (0,0,-1) voor licht van bovenaf (in de standaardprojecties).

Transformaties

Voor informatie over hoe je 3D-transformaties kan gebruiken, kan je terecht bij [Tut] Transformaties (3D).

Translate over X/Y/Z
Verplaats het huidige nulpunt met Amount in de x-, y- of z-richting. Gebruik om over alle assen in ÚÚn keer te verplaatsen.

Rotate over X/Y/Z
Draai over het huidige nulpunt met Amount graden over de x-, y- of z-as.
Gebruik bijvoorbeeld gevolgd door om een vorm/model gedraaid te tekenen.

Add translation
Verplaats het huidige nulpunt naar (x,y,z).

Scale
Verander de schaal waarop getekend wordt.

Reset transformation
Maak alle transformaties ongedaan.

draw3d

Standaard worden vormen egaal gekleurd met de tekenkleur zoals opgegeven met . Je kan met , of een afbeelding op de vormen plakken.

Draw wall
Teken een muur van (x1,y1,z1) naar (x2,y2,z2).

Draw floor
Teken een vloer van (x1,y1,z1) naar (x2,y2,z2).

Draw block
Teken een balk van (x1,y1,z1) naar (x2,y2,z2).

Draw ellipsoid
Teken een ellipso´de - een uitgerekte bol - van (x1,y1,z1) naar (x2,y2,z2).

Draw cone
Teken een verticale kegel van (x1,y1,z1) naar (x2,y2,z2).

Draw cylinder
Teken een verticale cilinder van (x1,y1,z1) naar (x2,y2,z2).

Opties

Set texture from sprite
Stel een afbeelding van een sprite in als textuur.

Set texture from background
Stel een achtergrondafbeelding in als textuur.

Set texture
Stel handmatig een afbeelding in als textuur.
Gebruik deze actie bijvoorbeeld in combinatie met surface_get_texture om een surface in te stellen als textuur.

Set precision
Stel de tekenprecisie (standaard 24) in voor ronde vormen, zoals bollen en cirkels.

Set closed
Stel het sluiten van vormen in (standaard gesloten). Als het aanstaat, worden cilinders en kegels afgesloten aan de boven- en onderkant, wat anders niet gebeurt.

Models

Met deze extensie kan je ook modellen gebruiken. Je kan modellen inladen met nadat je ze hebt aangemaakt.
Je kan ook zelf een model opbouwen door in een een blok basisvormen te tekenen.
Let op: transformaties zijn momenteel niet mogelijk binnen het opbouwen van een model, maar dit kan later veranderen!

Create model
Maak een nieuw model met de naam Name. Deze naam wordt globaal opgeslagen en is dus overal beschikbaar.

Check model
Vraag op of model Name bestaat en voer de volgende actie uit als dat zo is.

Draw model
Teken het model Name op (x,y,z).

Destroy model
Verwijder het model Name.

Load model
Laad een model uit een bestand in en plaats het in model Name. Standaard worden GM-modellen (.mod, .gmmod) en WaveFront-modellen (.obj) ondersteund.

Save model
Sla model Name op in een bestand.

Start model
Begin te tekenen in een model. Alle basisvormen worden vanaf hier in het model getekend.

End model
Stop met het tekenen in het model.

Functies

Als het nodig is, kan je ook enkele model-gerelateerde functies aanroepen in GML.
Zo kan je drag3drop_model_get gebruiken om een model in GML aan te passen of door te geven aan een andere extensie.

drag3drop_model_create(str)
Maak een nieuw model met de naam str. Als het model met die naam al bestaat, wordt het geleegd.

drag3drop_model_exists(str)
Vraag op of het model genaamd str bestaat.

drag3drop_model_destroy(str)
Verwijder het model genaamd str. Geeft terug of het verwijderen is gelukt.

drag3drop_model_load(str, fname)
Laad een model uit het bestand fname in en plaats het in het model genaamd str. Standaard worden GM-modellen (.mod, .gmmod) en Wavefront-modellen (.obj) ondersteund.

drag3drop_model_save(str, fname)
Sla het model genaamd str op in het bestand fname.

drag3drop_model_get(str)
Vraag de index van het model genaamd str op.

drag3drop_model_bind(str, ind)
Koppel model ind aan de naam str.

drag3drop_model_unbind(str)
Verwijder de koppeling met het model genaamd str. In tegenstelling tot drag3drop_model_destroy verwijdert deze functie alleen de koppeling, dus vergeet niet zelf het model te verwijderen.


Vaak wil je de schermco÷rdinaten van een punt in de wereld. De functies hieronder helpen hierbij. Om ze te initialiseren moet je eerst drag3drop_set_projection_ext aanroepen - dit gebeurt automatisch bij and .

drag3drop_set_projection_ext(xfrom, yfrom, zfrom, xto, yto, zto, xup, yup, zup, angle, aspect, znear, zfar)
Update de interne variabelen en stel de projectie in. De argumenten zijn hetzelfde als die van d3d_set_projection_ext.

drag3drop_point_get_distance(x, y, z)
Geeft de diepte (langs de kijkrichting) van een punt terug.

drag3drop_point_get_visible(x, y, z)
Geeft terug of een punt zichtbaar is, dus of het tussen znear en zfar ligt.

drag3drop_point_get_x(x, y, z)
Vraag de x-co÷rdinaat van een punt zoals geprojecteerd op het scherm.

drag3drop_point_get_y(x, y, z)
Vraag de y-co÷rdinaat van een punt zoals geprojecteerd op het scherm.

Credits

Naamsvermeldingen gaan uit naar:

Voor ontwikkelaars

Standaard kunnen Game Maker- en Wavefront-modellen ingeladen worden, maar ook andere formaten kunnen ondersteund worden.
Voeg hiervoor je modellaadscript toe met ds_map_add(drag3drop_model_load_scripts, ".extensie", mijn_laadscript) en je script wordt aangeroepen met de argumenten (ind, fname). (bijvoorbeeld dit script)

Wil je de extensie verder uitbreiden of delen van de code gebruiken? Dat kan. De enige vereiste is dat je Paul (indien de Wavefront-lader gebruikt wordt) en mij vermeldt en dat afgeleiden onder dezelfde licentie vallen.

Wijzigingen en toekomst

Wat er nog op het todo-lijstje staat: Het laatste is vooral belangrijk omdat beginnende gamemakers het best z.s.m. kunnen leren om met modellen te werken, omdat deze sneller getekend kunnen worden, het mogelijk maken om met mooie modellen te werken en stimuleren om transformaties te gebruiken.

Changelog:

Wijzigingen in dit pakket:

DatumWijziging
2013-06-25Extensie geplaatst
2013-10-20Build 2 voltooid in zowel Engels en Nederlands.
Co÷rdinaten van vormen worden nu in hun eigen actie opgegeven in plaats van een voorafgaande actie. Dit heeft als gevolg dat de ingestelde tekenkleur nu wordt gebruikt, dat texturen nu los en via een drop-downmenu kunnen worden opgegeven en dat het instellen van de precisie optioneel is. Bovendien kunnen co÷rdinaten nu relatief aan de instance opgegeven worden in plaats van dat de 2e set co÷rdinaten relatief was aan de eerste. (Dit heeft wel als nadeel dat de variabele z verplicht wordt.)