|
Titel: [TUT] Alles over 3d (De Beginners Guide) Bericht door: thomasderoo op 31 Oktober 2009, 22:20:52 Starten met 3d, alles wat je moet weten!
Versie: :gm6: , :gm7: en :gm5: Registratie: Ja, dit is vereist Moeilijkheid: Gevorderden(kennis van gml is vereist) LET OP: De Beginners Guide betekent niet dat het voor beginners is. Het is voor gevorderde gm gebruikers geschreven. Als je bijv niet weet wat een argument is, ga dan niet verder. Waarom heb ik deze tut gemaakt : Ik vond dat http://www.game-maker.nl/forums/topic,6253.0 (http://www.game-maker.nl/forums/topic,6253.0) teveel tekst en weinig code was. 0. Introductie Deze Tut gaat over 3d games. Ik zie de laatste tijd veel 3d vragen. Hiermee hoop ik ze allemaal te beantwoorden. Het is wel een lange tutorial, maar laat je niet afschrikken door de hoeveelheid text Bijna alles in deze tutorial kun je kopiëren en plakken. Ik raad je echter af dat te doen omdat je er dan minder van leert. Het beste is dat je de tekst zelf overtypt. Zo leer je er het meest van. 1. Beginnen met 3d Bij een 3d spel in gm moet je altijd eerst 3d initialiseren(laden). Dus maak een object met de naam "obj_player". In het create event zet je: GML: d3d_start() ; Deze functie begint 3d. Hierna ga je alle parameters(variabelen) van je 3d wijzigen. Dit doe je door :GML: d3d_set_hidden(true) ; wat doet dit nou allemaal:d3d_set_lighting(false) ; d3d_set_shading(true) ; d3d_set_culling(false) ; d3d_set_fog(true,c_white,100,1000) ; texture_set_interpolation(true) ;
GML: d3d_start() ; Het laatste zorgt ervoor dat je niet in zwart drawt. Als je dit wel doet zie je alleen maar zwarte vormen.d3d_set_hidden(true) ; d3d_set_lighting(false) ; d3d_set_shading(true) ; d3d_set_culling(false) ; d3d_set_fog(true,c_white,100,1000) ; texture_set_interpolation(true) ; draw_set_color(c_white) ; Je kunt deze code letterlijk kopiëren en plakken. We gaan hem straks nog zelf veranderen. 2. De extra As Als je al een tijdje met gamemaker hebt gewerkt dan weet je dat de positie van een object wordt aangegeven met x en y. dit zijn coördinaten. X is de breedte. Y is de hoogte. In 3d krijg je daar nog een extra letter bij. De z coördinaat. deze geeft de diepte aan. dus: (http://img81.imageshack.us/img81/3220/3dvoorbeeld.png) Z is geen geen GM variabel, zoals x en y. De z moet je zelf definiëren. Dus achter je eerste code in het create event van "obj_player" zet je : GML: z = 16 ; Dit kun je later altijd nog veranderen. Maar voor nu zetten we hem op 16.3. De projection instellen. Bij 3d in gm moet je de projection instellen. De projection kun je zien als een camera. De projection intstellen doe je met de functie: GML: d3d_set_projection(xfrom,yfrom,zfrom,xto,yto,zto,xup,yup,zup) Bij de projection werk je met "from" en "to", "van" en "naar". "from" Is het punt waar de camera zich bevind. "to" Is het punt waar de camera naar kijkt.### Voor een First-Person-Shooter ###
Maak een room en zet daarin je "obj_player". Je kunt nu nog niet bewegen. 4. Besturing Er zijn eigenlijk 2 soorten besturing in 3d.
Mouselook is iets moeilijker. Zet in het step event van je "obj_player" : GML: direction+=round(((room_width/2)-mouse_x)/14) ; Het meet de afstand tussen de muis en het midden van het scherm. dit heeft geen zin als de muis niet constant in het midden van het scherm is. daarom zet je achter de laatste code:GML: display_mouse_set(window_get_x()+(room_width/2), hierdoor wordt de muis teruggezet naar het midden van je gamescherm.window_get_y()+(room_height/2)) ; Nu heb je een mouselook. Je moet natuurlijk ook nog kunnen lopen bij mouselook. Dit bereik je met dit script: GML: speed = keyboard_check(ord("W"))-keyboard_check(ord("S"))*2 ; Als je nu je game start, zie je nog helemaal niks. Dit komt omdat je nog helemaal niks hebt in je room. Het werkt hetzelfde met een echte camera. Als je niks is zie je ook niks. XD We gaan nu de muren, de vloer en het plafond maken. 5. Een vloer en Plafond/lucht Zonder iets in je room is een game nogal saai. We beginnen met een vloer. Maak eerst een background aan, maak hem 512 x 512 en maak een vloer naar keuze. Voorbeelden:
De code om een vloer te drawen is erg gemakkelijk: GML: d3d_draw_floor(x1,y1,z1,x2,y2,z2,texid,hrepeat,vrepeat) ; dit werkt net als draw_rectangle. Je weet vast wel hoe draw_rectangle werkt. Alleen hierbij heb je ook nog de z1 en z2. Dit is geen probleem omdat deze allebei 0 moeten zijn. Dit is je basis. daarboven ga je alles plaatsen. Je hebt net "tex_floor" gemaakt. Dit is het materiaal van je vloer. Het argument "texid" is waar je je texture moet invullen. Maar je kun niet zomaar "tex_floor" typen. Je moet de id van de texture krijgen. Dit doe je door background_get_texture(tex_floor). Deze functie geeft de texture id van deze background terug. Hrepeat en Vrepeat geven aan hoeveel de texture horizontaal en verticaal wordt herhaald. Ook hiermee moet je een beetje experimenteren. Dus in het draw event van je "obj_player" zet je:GML: d3d_draw_floor(0,0,0,room_width,room_height,0, Deze code drawt een vloer over de hele room. Als je nu je game start zul je zien dat je kunt rondlopen. Nog steeds is het wel een beetje saai. Laten we er ook nog even een lucht maken. Maak alweer een background van 512 x 512, en teken een texture voor de lucht, bijv: Wolken. Zorg dat de texture aansluit. Geef hem de naam "tex_sky". Nu zet je in het draw event van "obj_player":background_get_texture(tex_floor),64,48) ; GML: d3d_draw_floor(0,0,128,room_width,room_heigth,128, Nu heb je een lucht boven je level.background_get_texture(tex_sky),64,48) ; Toch is je game nog steeds erg leeg. We moeten wat objecten gaan toevoegen. 6. Objecten en muren Net als d3d_draw_floor zijn er nog meer vorm functies : Citaat van: De vertaling van de help documentatie van gamemaker, mede door dit forum. d3d_draw_block(x1,y1,z1,x2,y2,z2,texid,hherhaling,vherhaling) Tekent een blok in de huidige kleur met de aangegeven tegenoverliggende hoeken gebruikmakend van de aangegeven textuur. Gebruik -1 om geen textuur te gebruiken. hherhaling geeft aan hoe vaak de textuur moet worden herhaald langs de horizontale rand van elk oppervlak vherhaling doet hetzelfde voor de verticale rand. Dit is niet van mij. Het is gemaakt/vertaald door deze community.d3d_draw_cylinder(x1,y1,z1,x2,y2,z2,texid,hherhaling,vherhaling,gesloten,stappen) Tekent een verticale cilinder in de huidige kleur in de aangegeven bounding box gebruikmakend van de aangegeven textuur. Gebruik -1 om geen textuur te gebruiken hherhaling geeft aan hoe vaak de textuur moet worden herhaald langs de horizontale rand van elk oppervlak vherhaling doet hetzelfde voor de verticale rand. gesloten geeft aan of de cilinder een gesloten onder- en bovenkant moet hebben. stappen geeft aan hoeveel draaistappen moeten worden genomen. Een typische waarde is 24. d3d_draw_cone(x1,y1,z1,x2,y2,z2,texid,hherhaling,vherhaling,gesloten,stappen) Tekent een verticale conus in de huidige kleur in de aangegeven bounding box gebruikmakend van de aangegeven textuur. Gebruik -1 om geen textuur te gebruiken hherhaling geeft aan hoe vaak de textuur moet worden herhaald langs de horizontale rand van elk oppervlak vherhaling doet hetzelfde voor de verticale rand. gesloten geeft aan of de conus een gesloten onder- en bovenkant moet hebben. stappen geeft aan hoeveel draaistappen moeten worden genomen. Een typische waarde is 24. d3d_draw_ellipsoid(x1,y1,z1,x2,y2,z2,texid,hherhaling,vherhaling,stappen) Tekent een ellipsoïde in de huidige kleur in de aangegeven bounding box gebruikmakend van de aangegeven textuur. Gebruik -1 om geen textuur te gebruiken hherhaling geeft aan hoe vaak de textuur moet worden herhaald langs de horizontale rand van elk oppervlak vherhaling doet hetzelfde voor de verticale rand. stappen geeft aan hoeveel draaistappen moeten worden genomen. Een typische waarde is 24. d3d_draw_wall(x1,y1,z1,x2,y2,z2,texid,hherhaling,vherhaling) Tekent een verticale muur in de huidige kleur met de gegeven hoeken gebruikmakend van de aangegeven textuur. Gebruik -1 om geen textuur te gebruiken. hherhaling geeft aan hoe vaak de textuur moet worden herhaald langs de horizontale rand van elk oppervlak vherhaling doet hetzelfde voor de verticale rand. d3d_draw_floor(x1,y1,z1,x2,y2,z2,texid,hherhaling,vherhaling) Tekent een (schuine) vloer in de huidige kleur met de gegeven hoeken gebruikmakend van de aangegeven textuur. Gebruik -1 om geen textuur te gebruiken. hherhaling geeft aan hoe vaak de textuur moet worden herhaald langs de horizontale rand van elk oppervlak vherhaling doet hetzelfde voor de verticale rand. Door deze dingen te combineren kun je mooie effecten krijgen. 7. Modellen Voor modellen maken gebruik ik meestal Model Creator. Het is een zeer handig programma gemaakt door matrebatre. link (http://www.game-maker.nl/forums/topic,36584.0) Tutorials over dit programma kun je vinden op de site van model creator, te vinden in de link. Ik ga het nu hebben over het implementeren/invoegen van de models in je game. Maak een 3d model in Model creator, Sla m op met een logische naam, bijv: world_tree, player_arm, world_rock enz. Het model bestand moet in dezelfde map staan als je game bestand. Nu druk je op dit icoon: (http://img515.imageshack.us/img515/4011/generategml.png) Als beschrijving staat er "Generate GML" bij. Als je hierop klikt krijg je dit scherm: (http://img257.imageshack.us/img257/3519/generategml2.png) Neem de opties precies over van deze screenshot ^^^^ Druk op OK en laat het volgende scherm staan. Ga naar je game file en maak een nieuw script met de naam "load_models". In dit script ga je alle models laden. Ga weer terug naar het model creator scherm. Je ziet nu 2 codes. Kopieer het bovenste stukje code en plak het in je "load_models" script. In het create event van "obj_player" zet je nu: GML: load_models() ; Nu ga je het model drawen. Je maakt een object met de naam die jij wilt. bijv:
8. Transformations Als je modellen wil draaien, moet je transformations gebruiken. Bij transformations kun je je modellen draaien, bewegen en schalen. Transformations gaan altijd vanuit het punt 0,0,0. Een transformatie werkt met blokken. Deze blokken zien er ongeveer zo uit: GML: d3d_transform_set_identity() ; Dus als je wil dat je model naar je direction staat gedraaid gebruik je ://De rotatie //De beweging //Draw je model op 0,0,0 d3d_transform_set_identity() ; GML: d3d_transform_set_identity() ; Dus eerst de rotatie, dan de Beweging naar de x en y van de player, en dan Het drawen van het model op 0,0,0.d3d_transform_add_rotation_z(direction) ; d3d_transform_add_translation(x,y,0) ; d3d_model_draw(global.model_player,0,0,0,background_get_texture(tex_player)); d3d_transform_set_identity() ; 9. Lighting Om licht in je game te gebruiken moet je lighting eerst aanzetten. Dit doe je door : GML: d3d_set_lighting(false) ; te vervangen doorGML: d3d_set_lighting(true) ; Als je nu je game draait zie je alleen maar zwart. Dit is omdat je nog geen lichten hebt gedefinieerd. Je hebt in GM 2 soorten 3d lichten:
GML: d3d_light_define_direction(1,7.5,-7.5,-7,c_dkgray) ; In meeste van mijn games gebruik ik deze angles voor het licht. Als je je game nu start zie je veel verschil, vooral met models.d3d_light_enable(1,true) ; 10. Springen Maar we zijn nog niet klaar. Als je dan een extra Z as hebt, waarom zou je er dan niks mee doen. Hier ga ik zorgen dat je kunt springen. Ik ga hier werken met sinus. Zoals meeste van jullie weten geeft sinus een sinus beweging zoals deze : (http://img519.imageshack.us/img519/8678/nywsinusd.th.png) (http://img519.imageshack.us/img519/8678/nywsinusd.png) Dus bij 2 x pi is de sinus 1 keer heen en terug gegaan. We gaan dit heen en terug principe nu maken. Je gaat eerst naar het create event van je "obj_player". Daar zet je : GML: timer = 0 ; "timer" word onze sinus timer. Nu zet je in het keyboard spacebar event :GML: if timer = 0 then timer = pi ; Dus als "timer" 0 is(je staat op de grond) Dan zet je de timer op pi. Je ziet nu nog geen verschil. Je moet eerst de timer laten aflopen en vanuit daar de z positie bepalen. Plaats in het step event :GML: if timer > 0 then timer-=pi/20 ; Dus als timer meer dan 0 is. Dan gaat er pi/20 af. Net zolang tot timer weer 0 is, en je dus weer kunt springen. De 20 aan het eind betekent in hoeveel steps je de sprong wil doen. Als je dit getal groter maakt, springt de player langzamer. Bij kleiner springt hij sneller. Nu zet je achter je laatste code :GML: z = 16+(sin(timer)*10) De 10 aan het eind betekend hoe hoog je springt. Deze moet je zelf veranderen naar wat jij het prettigst vind. Als je je game nu start, zie je dat je kunt springen met de spacebar.11. Deuren en bewegende objecten Bij het maken van een deur die naar boven opengaat, moet je gebruik maken van transformations. Dit is naar mijn mening de makkelijkste manier. Begin met het maken van een "obj_door". Zet in het create event : GML: z = 0 ; De z is dus hoe hoog de deur nu staat. Met 0 staat hij op de grond.In het draw event zet je nu : GML: d3d_transform_set_identity() ; Nu wordt je deur gedrawd op de hoogte van de z. Maar deze is 0, dus moet je m veranderen. ik kies hierbij voor een systeem die de afstand tot de player meet. Als de player dichterbij dan 48 komt, gaat de deur open. Anders is hij dicht. Zet in het step event van je "obj_door" :d3d_transform_add_translation(x,y,z) ; d3d_model_draw(//JOUW MODEL op 0,0,0) ; d3d_transform_set_identity() ; GML: if point_distance(x,y,obj_player.x,obj_player.y) < 48 then{ Als je nu dichtbij komt gaat de deur open. En als je weer wegloopt gaat hij dicht.if z < 32 then z+=2 ; }else{ if z > 0 then z-=2 ; } ; 12. Billboards Billboards zijn objecten in 3d die altijd naar jou gericht zijn. Als je bijv een object hebt die aan elke kant hetzelfde is, kun je zorgen dat het een platte muur wordt, die altijd naar jou richt. Hier een voorbeeld : (http://www.devmag.org.za/img/articles/3D_graphics_with_Game_Maker_Part_3-billboardpitchedupdown.jpg) Je ziet dus dat het geen model is, maar dat hij constant naar de camera gericht is. Dit doe je met transformations. Maak bijv een "obj_tree" en maak een texture van een boom van de zijkant. Je zet in je draw event : GML: d3d_transform_set_identity() ; Nu heb je een boom die met je meedraait. Dit is niet erg mooi, maar bespaard wel veel CPU. voor voorwerpen van veraf kun je dit heel efficiënt gebruiken.d3d_transform_add_rotation_z(point_direction(x,y,obj_player.x,obj_player.y)) ; d3d_transform_add_translation(x,y,0) ; d3d_draw_wall(0,-16,0,0,16,32,background_get_texture(tex_tree),1,1) ; d3d_transform_set_identity() ; 13. Collision Checking in 2d Ik ga hier geen tutorial over doen omdat het een script is van iemand anders. Het script wat ik vaak gebruik is van Matrebatre. Het zorgt ervoor dat als je tegen een muur loopt, je er langs glijd en niet direct stopt. Dit script moet geplaatst worden in het end step event : GML: var a,b; 14. Schieten in 3da = place_free(x+hspeed,y); b = place_free(x,y+vspeed); if not a then x = xprevious; if not b then y = yprevious; if not place_free(x+hspeed,y+vspeed) { x = xprevious; y = yprevious; } Iedereen weet nu al wel hoe je moet schieten in 2d. Maar in 3d is dit veel moeilijker. Zo moeilijk zelfs dat ik het stukje voor deze tutorial helemaal niet zelf heb geschreven. Het is meer een script dan een tutorial. Het is geschreven door Dmitri. Je moet hiervoor de euler notatie gebruiken met de projection. Meer hierover hier (http://www.game-maker.nl/forums/topic,39867.0) !!! Hier is het stukje van Dmitri : eindelijk... Ik dank Dmitri hiervoor. Help hem ook even met zijn spel :LET OP: Ik moet je wel ff mededelen dat je met de projectie op basis van de euler notatie moet werken. Zie hier (http://www.game-maker.nl/forums/topic,39867.0) voor meer informatie. Zdirection speler: GML: display_h=display_get_height(); change_y=(display_mouse_get_y()-display_h/2)/12; zdirection+=change_y if zdirection<-90 then {zdirection=-90;} else if zdirection>90 then {zdirection=90;} In de mouse event zet je create_bullet(). create_bullet(); GML: i=instance_create(x+lengthdir_x(22,direction),y+lengthdir_y(22,direction),argument2); i.superspeed=round(argument0/argument1); //dit moet een rond getal zijn i.normalspeed=argument1; i.zdirection=zdirection; //zidrection i.z=z+player.cam_sin_z+120-22*tan(degtorad(zdirection)); //begin hoogte; +22 om tegen jezelf schieten voorkomen i.dmg=argument3; //schade i.direction=direction; //hmm.. wat zou dit betekenen?? i.alarm[0]=10; //na 10 stappen is de kogel foetsie xD bullet OBJECT: :GM125: GML: instance_destroy(); :GM126: GML: bullet_step(); :GM131: GML: draw_set_color(c_black); d3d_draw_block(x-1,y-1,z-1,x+1,y+1,z+1,-1,0,0);//draw a black block for the bullet, quite simple draw_set_color(c_white); bullet_step(); GML: for(i=0;i<superspeed;i+=1){ //loop x+=lengthdir_x(normalspeed,direction) //skip space y+=lengthdir_y(normalspeed,direction) //skip space z+=-normalspeed*tan(degtorad(zdirection)); //skip space /* Als hij onder het terrein komt, vernietigen if(z>get_zpos()){instance_destroy();exit;} */ //---- //DE REST IS ALLEMAAL COLLISION CHECKING. GEEF VOOR ELK OBJECT EEN ZMAX EN GEEF HET EEN PARENT (PEOPLE PARENT, WALL PARENT) //IN DEZE PARENTS HOEFT NIKS TE STAAN, MAAR GEEFT GEWOON AAN WAT ER MOET GEBEUREN MET DE KOGEL! //ALS JE DIT NIET WILT GEBRUIKEN VERGEET DAN NIET DE LOOP AF TE SLUITEN! //---- obj=instance_position(x,y,all)//find the object at your new position if(obj=noone){continue;}//if there is no object at your position, then continue (skip to the next value of the loop) if(z<obj.z){continue;}//there is an object! but if the bullet is below the object then continue! if(z>obj.zmax){continue;}//there is an object! but if the bullet is above the object then continue! //The object was hit!!!! and it is above ground with(obj){//with the object that was just hit //wall temp if(object_is_ancestor(object_index,par_solid)=1){//check if it was an ancestor of the wall temp (wall temp is its parent) with(other){instance_destroy()}//if it was, destroy the bullet so it will not continue on sound_play(hit); exit;//exit so the bullet will be instanly destroyed } //people temp if(object_is_ancestor(object_index,par_solid)=0){//cehck if the object is an ancestor of the poeple temp (people temp is its parent) hp-=other.dmg+random(other.dmg/2);//if it was, then minus its health by the bullets damage - because we went with(obj){}, we can use other becuase other is considered the bulelt if(hp<=0){//if the objects health is less then 0 instance_destroy();//then destroy the hit target } with(other){instance_destroy();}//and also destroy the bullet } } } Zo, dat was het.... Let er wel op; hij is niet volmaakt. Door de tangens krijgt hij een beetje zeer hoge snelheid als je loodrecht omlaag schiet of als je loodrecht omhoog schiet. M.v.G. Dmitri Warzones 2kX Engine Alpha (http://www.game-maker.nl/forums/topic,46523.0) 15. Slotwoord Als je nog iets mist in mijn tutorial of je vind een fout. Post het dan hier, ik probeer het zo snel mogelijk toe te voegen of op te lossen. Credits: Matrebatre : Model creator 5.0 Thomasderoo : Voor deze tut XD Dmitri : Voor het schieten in z Ik heb deze tutorial in 1 hele dag gemaakt. Credit geven hoeft niet, mag wel, graag zelfs XD. Als je een game gemaakt hebt met behulp van deze tut, post m hier. Dan kan ik hem ook bekijken, leuk 8). Hier is een voorbeeld van een mooie 3d game, gemaakt door mij :angel: : Chuck (http://www.game-maker.nl/forums/topic,44427.0) En door Dmitri : Warzones 2kX Engine Alpha (http://www.game-maker.nl/forums/topic,46523.0) Vragen welkom hieronder. Mvg Thomas Titel: Re: [TUT] Alles over 3d Bericht door: mikey op 31 Oktober 2009, 23:43:27 erg mooie tut :D ik zal er gelijk aan beginnen om het te leren :D
EDIT: Citaat 4. Besturing ### Mouselook ### Mouselook is iets moeilijker. Zet in het step event van je "obj_player" : GML: direction+=round(((room_width/2)-mouse_x)/14) ; Het meet de afstand tussen de muis en het midden van het scherm. dit heeft geen zin als de muis niet constant in het midden van het scherm is. daarom zet je achter de laatste code:GML: display_mouse_set(window_get_x()+(room_width/2), hierdoor wordt de muis teruggezet naar het midden van je gamescherm.window_get_y()+(room_height/2)) ; Nu heb je een mouselook. Je bent hier vergeten te plaatsen hoe je naar voren loopt :P, maar je hebt wel geplaatst hoe dat moet met WASD en de pijltjes, dus waarschijnlijk is dat hetzelfde maar misschien is het wel handig dat erbij te zetten :P. PS: Ik heb al veel geleerd over 3D, de tut is erg goed ;) Titel: Re: [TUT] Alles over 3d Bericht door: thomasderoo op 1 November 2009, 01:43:03 oh ik. Ik verander het nu. Thnx
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: debeste95 op 4 November 2009, 21:22:33 een erg handige tut voor beginners met 3D (zoals mij dus) maar ik heb het gevoel (en volgens mij is het ook zo) dat je met deze besturing 2X zo hard 8er uit loopt als vooruit, en met de 3rd person view en de wasd besturing, draai je 2 keer zo snel naar rechts als naar links, hoe moet je dit verhelpen?
debeste95 ;) edit: als ik het *2 erachter weg haal, gaan ze beiden even snel, maar nog steeds heel langzaam, hoe kan ik DIT oplossen? :p edit edit: rofl, nvm, gewoon ff een *2 er bij proppen en het werkt! vette tut, man! eindelijk snap ik het 3D! ;) Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: mikey op 4 November 2009, 21:26:42 een erg handige tut voor beginners met 3D (zoals mij dus) maar ik heb het gevoel (en volgens mij is het ook zo) dat je met deze besturing 2X zo hard 8er uit loopt als vooruit, en met de 3rd person view en de wasd besturing, draai je 2 keer zo snel naar rechts als naar links, hoe moet je dit verhelpen? debeste95 ;) edit: als ik het *2 erachter weg haal, gaan ze beiden even snel, maar nog steeds heel langzaam, hoe kan ik DIT oplossen? :p heey, in de tut gebruikt thomasderoo deze code voor de movement: GML: direction+=keyboard_check(ord("A"))-keyboard_check(ord("D"))*2 ; Maar er zit een foutje in, de code hoort zo te zijn:speed = keyboard_check(ord("W"))-keyboard_check(ord("S"))*2 GML: direction+=keyboard_check(ord("A"))*2-keyboard_check(ord("D"))*2 ; speed = keyboard_check(ord("W"))*2-keyboard_check(ord("S"))*2 Thomasderoo zorgt ervoor dat als je met D wilt draaien dat dat 2 keer zo snel gaat, en dat je met S twee keer zo snel naar achter gaat, maar dat gebeurd niet met W en A omdat die niet vermenigvuldigt werden (en bij mijn code wel). Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: debeste95 op 4 November 2009, 21:39:28 ja, zo had ik hem nu ook staan...
trouwens, weet iemand ook hoe je blokken kan maken waar je NIET door heen kan? heb nu wel leuke blokjes, maar je kan er doorheen, en solid maken maakt het helemaal niet beter :p Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: mikey op 4 November 2009, 21:42:08 ja, zo had ik hem nu ook staan... trouwens, weet iemand ook hoe je blokken kan maken waar je NIET door heen kan? heb nu wel leuke blokjes, maar je kan er doorheen, en solid maken maakt het helemaal niet beter :p als ik jou was zou ik een parent maken (solid) en dan een collision met die parent in je object speler, ik heb dit als code gedaan: GML: x=xprevious en dan bij je dingen waar je niet doorheen mag als parent degene waarmee je je collision hebt geven.y=yprevious Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: debeste95 op 5 November 2009, 06:53:25 ik kan nog steeds door de blokjes lopen hoor
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: thomasderoo op 5 November 2009, 08:36:30 de collision werkt nog steeds in 2d. je moet het blokje een sprite geven, en de player ook net zoals je in 2d zou doen
@kiprok. om je model kleiner te maken moet je m :
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: debeste95 op 5 November 2009, 17:44:27 bij mij werkt die collision code die in de example staat niet :S
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: thomasderoo op 6 November 2009, 15:34:27 staat hij in de end step van de player, is je wall solid, heeft je player een sprite, heeft je muur een sprite. check dat eerst even, als er problemen zijn hoor ik het wel :P
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: thomasderoo op 12 November 2009, 18:03:46 SCHIETEN OVER DE Z AS IS TOEGEVOEGD XD
met dank aan Dmitri bekijk ook even zijn 3d engine hier : Warzones 2kX Engine Alpha (http://www.game-maker.nl/forums/topic,46523.0) Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: mikey op 7 Januari 2010, 22:05:29 Is het een idee om erin te zetten hoe je bijvoorbeeld een sprite drawt in 3D? Bijvoorbeeld een sprite als speler en niet een 3D draw functie (ik heb niet gekeken naar de berichten hiervoor etc. dus ik weet niet of het al uitgelegd is).
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: jaapi op 11 Februari 2010, 17:49:01 beginner zie ik, kan je wat duidelijker zijn wat geeft de error aan?
bestte thomasderoo zou je ook iets over surfaces kunnen plaatsen in deze tut Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: Takua op 14 Februari 2010, 18:00:12 Van die Example van Matrebatre heb ik niks geleerd aangezien het zoveel code was wou ik het niet leren. Maar kun jij een korte tutorial maken van een 3d platform engine?
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: jaapi op 6 Maart 2010, 18:08:48 zou je mischien ook iets in je tut kunnen zetten over terrains en terrain editors?
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: thomasderoo op 10 Maart 2010, 09:30:14 k ben niet zoveel meer actief op ngmc maar ik zal kijken wat ik kan doen :)
EDIT: ik maak wel een example, ga nu bezig. Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: Matrebatre op 21 Maart 2010, 19:44:41 Zoals je merkt heb ik een grote opschoonactie gehouden :). Alle oude vragen over dingen die niet over de tutorial gaan, en alles wat niet meer relevant is, is verwijderd.
Stel vragen over jouw spel niet in dit topic. Maak een eigen topic bij beginners of gevorderen. Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: BlueMoonProductions op 15 April 2010, 12:37:24 Je hebt een foutje in je movement code.
Je had: GML: direction+=keyboard_check(ord("A"))-keyboard_check(ord("D"))*2 ; Maar er moeten nog haakjes omheen:speed = keyboard_check(ord("W"))-keyboard_check(ord("S"))*2 ; GML: direction+=(keyboard_check(ord("A"))-keyboard_check(ord("D")))*2 ; speed = (keyboard_check(ord("W"))-keyboard_check(ord("S")))*2 ; Anders draai/loop je sneller naar een kant. Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: iSoul op 18 April 2010, 19:52:45 Hele goede tutorial!
Alleen vat ik 1 ding niet... IK ZIE HELEMAAL NIKS! Hij laat geen vloer zien en ook de speler niet :S In de scripts geeft hij ook geen errors aan :S Weet iemand hoe ik het oplos? Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: BlueMoonProductions op 18 April 2010, 20:16:23 Vragen horen eigenlijk in het beginners of gevorderden forum, maar: heb je de projectie wel goed ingesteld?
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: iSoul op 18 April 2010, 21:20:46 Hoe bedoel je projectie?
de view of het start van de 3D? ik ben niet verder gekomen in de tutorial dan het inladen van obj... Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: BlueMoonProductions op 18 April 2010, 21:23:57 Hoofdstuk 3: De projectie instellen
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: iSoul op 18 April 2010, 21:48:19 Dat kan goed kloppen want ik snap dat deel juist niet!
Ik zou niet weten hoe ik dat in moet stellen :S Ik wil namelijk een third-person shooter met beweging van je muis + WASD. (Je muis richt een kant op waar je kijkt, je bedient dus zeg maar met je muis de camera) Maargoed, Bij hoofdstuk 3 heb ik dus geen idee hoe ik het script moet invoeren :S Bedankt voor de hulp ;) iSoul Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: Compor op 19 April 2010, 17:35:19 Teken je je vloer na de projectie?
En staat de depth van het object dat de projectie instelt op het hoogst? Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: sniperher0 op 28 April 2010, 15:17:37 De mouselook werkt maar half bij mij, mijn muis zit heel de tijd de trillen, en ik kan niet naar boven of naar onder kijken. Voor de rest is het een goede tut
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: svenotje1 op 28 April 2010, 16:55:27 dan heb je hem op full screen stan dat moet niet.
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: robin0van0der0vliet op 12 Mei 2010, 09:17:02 Maak alweer een background van 512 x 512, en teken een texture voor de lucht, bijv: Wolken. Zorg dat de texture aansluit. Geef hem de naam "tex_sky". Nu zet je in het draw event van "obj_player": GML: d3d_draw_floor(0,0,128,room_width,room_heigth,128, Nu heb je een lucht boven je level.background_get_texture(tex_sky),64,48) ; Het is room_height niet room_heigth. Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: axel op 15 Mei 2010, 23:30:39 ach dat zijn van die foutjes
als je overtypt merg je dat meer voor de genen die kopieren loopt hun spel vast of wat dan ook Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: redblood op 22 Mei 2010, 21:41:27 hey, kan je ook een stukkie over een hud scrijven?
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: maker-bart op 23 Mei 2010, 01:13:28 Een tutorial over hud staat op deze pagina:
http://www.game-maker.nl/forums/topic,36295.0 Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: jeroentjje op 7 Juni 2010, 19:14:57 GML: d3d_draw_floor(0,0,128,room_width,room_heigth,128, background_get_texture(tex_sky),64,48) ; GML: d3d_draw_floor(0,0,128,room_width,room_height,128, background_get_texture(tex_sky),64,48) ; Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: Aswatie op 8 Juni 2010, 17:35:13 Bij die modelcreator kan je kiezen welke texture je wil maar ik wil geen texture maar wat moet je dan intikken
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: dennisvdz op 8 Juni 2010, 18:12:49 Bij die modelcreator kan je kiezen welke texture je wil maar ik wil geen texture maar wat moet je dan intikken Precies wat je wilt.Geen texture is geen tekst invoeren. Dus gewoon . (Leeg laten XD) Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: Aswatie op 9 Juni 2010, 16:52:36 ja maar als je leeg laat dan geeft ie een fout.Want bij
d3d_model_draw Moet je altijd aan het einde een texture id tovoegen Dit was de fout ___________________________________________ FATAL ERROR in action number 1 of Draw Event for object obj_model4: COMPILATION ERROR in code action Error in code at line 2: d3d_model_draw(global.model_unt,x,y,0); ^ at position 39: Wrong number of arguments to function or script. Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: dennisvdz op 9 Juni 2010, 17:34:47 Maak een transparante texture van 1x1. Wees creatief :P.
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: BlueMoonProductions op 9 Juni 2010, 17:38:34 Bij texture kun je voor geen texture -1 invullen, dan krijg je de draw color.
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: Aswatie op 9 Juni 2010, 18:59:16 maar kijk ik heb met Blender een model gemaakt.Die heeft kleuren maar ik wil ook dat ie kleuren dr gewoon zijn als ik die model in game maker doe
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: thomasderoo op 11 Juni 2010, 09:45:17 export m als .obj file. dan open je m in model creator, je export een texture map en zorgt dat alles aligned is.
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: iSoul op 25 Juni 2010, 14:16:28 Ik blijf bij stap 5 hangen want als ik de floor wil drawen, krijg mijn gehele scherm met mijn floor.
het is niet 3D :S EDIT: Het is al gelukt. Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: Jolie op 8 Juli 2010, 09:05:40 Zeer handige tutorial. Ik heb hem een paar keren nodig gehad. ;) Alles staat erin!
Het zou misschien handig zijn als je een alinea maakte over de depth. (Voor de overlay en de speler) Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: gm1999 op 9 Juli 2010, 10:24:22 Er zit hier een fout:
GML: d3d_draw_floor(0,0,128,room_width,room_heigth,128, het is room_height inplaats van room_heigth.background_get_texture(tex_sky),64,48) ; Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: BlueMoonProductions op 9 Juli 2010, 10:51:54 Dat heeft nog niemand gemeld hoor :eyes:
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: gm1999 op 9 Juli 2010, 11:02:10 Dat heeft nog niemand gemeld hoor :eyes: hmm, zie het. sorry. Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: BlueMoonProductions op 9 Juli 2010, 12:11:55 Nah, maakt niet uit.. Misschien als we alle fouten blijven melden dat ze dan ooit nog eens worden verbeterd.
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: bytterman op 14 Juli 2010, 14:30:04 Ik krijg dit: :'S
ik heb precies gekopieerd en in greate gezet. GML: ___________________________________________ FATAL ERROR in action number 1 of Draw Event for object obj_player: COMPILATION ERROR in code action Error in code at line 1: x+lengthdir_x(len,dir) ; ^ at position 2: Assignment operator expected. Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: thomasderoo op 14 Juli 2010, 17:12:28 Dat stuk moest je niet letterlijk kopieren. daar leg ik uit hoe we de camera in gaan stellen. het stuk daaronder moet je in je draw event zetten :) . MAAR, als je dat nog niet weet is het misschien iets te vroeg om met 3d te beginnen :P
Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: Laloeka op 14 Juli 2010, 20:33:28 12. Billboards Billboards zijn objecten in 3d die altijd naar jou gericht zijn. Als je bijv een object hebt die aan elke kant hetzelfde is, kun je zorgen dat het een platte muur wordt, die altijd naar jou richt. Hier een voorbeeld : (http://www.devmag.org.za/img/articles/3D_graphics_with_Game_Maker_Part_3-billboardpitchedupdown.jpg) Je ziet dus dat het geen model is, maar dat hij constant naar de camera gericht is. Dit doe je met transformations. Maak bijv een "obj_tree" en maak een texture van een boom van de zijkant. Je zet in je draw event : GML: d3d_transform_set_identity() ; Nu heb je een boom die met je meedraait. Dit is niet erg mooi, maar bespaard wel veel CPU. voor voorwerpen van veraf kun je dit heel efficiënt gebruiken.d3d_transform_add_rotation_z(point_direction(x,y,obj_player.x,obj_player.y)) ; d3d_transform_add_translation(x,y,0) ; d3d_draw_wall(0,-16,0,0,16,32,background_get_texture(tex_tree),1,1) ; d3d_transform_set_identity() ; Volgensmij is het: Billboard techniek is: Het vervangen van models (die veel polygons bevatten) door 1 enkele afbeelding die (bijna) hetzelfde resultaat geeft op grote afstand. Denk aan reclame borden langs de snelweg, je kunt van 100 meter afstand echt niet zien of er een knobbeltje op het bord zit. Je bespaart hiermee veel rekentijd, dat je game sneller maakt, en je fps dichter bij je 'room_speed' houd. Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: StefannafetS op 14 Juli 2010, 23:26:20 Billboard is zoals thomasderoo al zegt (als ik het goed hebt)
een vlak die altijd naar je gericht is. (dit is goed te zien als je de camera schuin boven op de billboard zet en rondjes draait) Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: bytterman op 15 Juli 2010, 15:35:36 Dat stuk moest je niet letterlijk kopieren. daar leg ik uit hoe we de camera in gaan stellen. het stuk daaronder moet je in je draw event zetten :) . MAAR, als je dat nog niet weet is het misschien iets te vroeg om met 3d te beginnen :P Ik heb al een half spel gemaakt met een steuntje in de rug van iemand. Hier een site: http://gm3dexamples.awardspace.com/index2.htm (http://gm3dexamples.awardspace.com/index2.htm) Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: keoni29 op 27 Juli 2010, 09:32:19 Als ik jouw code gebruikte voor het draaien van dit blok zag je hem opeens niet meer...
GML: { var h; h=2 draw_set_alpha(1); draw_set_color(c_white); d3d_transform_set_identity(); d3d_transform_add_rotation_z(direction); d3d_transform_add_translation(x,y,0); d3d_draw_block(x,y,0,x+16,y+16,h*16,sprite_get_texture(tex_tower,0),1,h) d3d_transform_set_identity(); } En wat doe ik ik hieraan? (http://img822.imageshack.us/img822/5911/weirdglitch.png) Elke toren is obj_tower met dezelfde depth. Ze gaan elkaar dus overlappen. Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: Compor op 27 Juli 2010, 13:12:27 Als ik jouw code gebruikte voor het draaien van dit blok zag je hem opeens niet meer... Als je d3d_transform_add_translation(x,y,0); gebruikt, dan verplaats je hem naar de juiste plek. Dan moet je niet nog eens:GML: { var h; h=2 draw_set_alpha(1); draw_set_color(c_white); d3d_transform_set_identity(); d3d_transform_add_rotation_z(direction); d3d_transform_add_translation(x,y,0); d3d_draw_block(x,y,0,x+16,y+16,h*16,sprite_get_texture(tex_tower,0),1,h) d3d_transform_set_identity(); } d3d_draw_block(x,y,0,x+16,y+16,h*16,sprite_get_texture(tex_tower,0),1,h) Dat doen, haal het vetgedrukte weg. (Ja, de plusjes zijn vetgedrukt ookal zie je het amper) Titel: Re: [TUT] Alles over 3d (De Beginners Guide) Bericht door: keoni29 op 27 Juli 2010, 15:15:34 Edit:Opgelost! Ik had nog ergens d3d_set_hidden(false) open staan :P www.game-maker.nl © 2003, 2007 Nederlandse Game Maker Community
|