Lave et 3D Spil i Delphi

Tags:    delphi
Skrevet af Bruger #1474 @ 16.11.2003



Hvis du kompiler vil du se at vores gulv har fået en texture. Det ser meget bedere ud end bare nogle forskellige farver. Da jeg synes at texturen ser lidt udstrækt ud ved at kun at blive gentaget 1 gang, vil vi prøve at lade texturen gentage sig selv flere gange. I følgende kode vil den blive gentaget 16 gange (4x4):

Fold kodeboks ind/udKode 




Det ser efter min mening lidt bedere ud. Til sidst, vil jeg lige vise, hvordan man kan anvende flere textures med OpenGL. I næste eksempel laver jeg en væg og et loft, med hver sin texture. Intil nu har vi kun renderet én primitiv ad gangen, derfor har vi slet ikke været inde på gl_Depth_Testen endnu. Som jeg nævnte i starten af artiklen, har OpenGL forskellige buffers. En af dem er Depth bufferen. For at anvende Depth bufferen tilføjer vi den blot sammen med gl_Color_Buffer_Bit i funktionen glClear(). Den vil derfor komme til at se således ud:

Fold kodeboks ind/udKode 


Ud over det skal vi lige huske at gøre den tilgængelig:

Fold kodeboks ind/udKode 


Da vi skal indlæse flere textures, har jeg valgt at flytte vores kode, der indlæste vores texture, til en funktion "LoadTexture()" som vil returnere en ID, som vi skal bruge til at aktivere (Binde) vores textures til de forskellige primitiver i vores FormPaint procedure. Funktionen vil derfor se således ud:

Fold kodeboks ind/udKode 



Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (58)

User
Bruger #4503 @ 16.11.03 21:37
WooooW... Her kan jeg ikke sig andet en flot arbejde... Det er fandme en Nice artikel... Du har ændret 2 ting i mit liv:
1. Du har lært mig om mulighederne med OpenGL
2. Du har givet mig MEGET lyst til at prøve Delphi
User
Bruger #4288 @ 16.11.03 21:48
Fandme en flot artikel
Den har sQ nok taget langtid om at lave men jeg har fandme fået løst til at sætte mig til OpenGL istedet at programmere programmere browsere .mm
User
Bruger #1474 @ 17.11.03 01:39
Mange tak skal I havde... :)
User
Bruger #1425 @ 17.11.03 10:31
En rigtig, rigtig god artikel. Tak for det! :)
User
Bruger #4288 @ 17.11.03 14:20
Håber virklig der kommer flere artikler fra dig af med OpenGL :)
User
Bruger #2397 @ 17.11.03 19:36
God, enkel og detaljeret artikel :o)
User
Bruger #1 @ 18.11.03 19:28
Virkelig god artikel! Håber meget på at vi snart får nogle flere af den slags - spilprogrammering må vist være noget af det mest populære man kan skrive om :). Keep up the good work!
User
Bruger #1474 @ 19.11.03 18:52
Endnu engang mange tak for rosen! Jeg vil lige nævne at hele kildekoden jeg brugte til denne artikel, kan downloades fra min site. Det kan måske være lettere at overskue de mange procedure i en Delphi unit.
User
Bruger #4575 @ 19.11.03 19:33
Fed artikel!!
Men jeg har et problem... Hvis jeg sætter min forms WindowState til WsMaximized bliver gulvet, loftet og vægen usynelige.. hvorfor??
User
Bruger #1474 @ 20.11.03 00:49
Jeg har undladt at nævne det i denne artikel, Da jeg syntes den allerede fyldte ret meget. Men jeg burde nok havde inkluderet den, siden flere har spurgt mig. Det er beskrevet som det første i den NYE artikel, (som jeg er halvvejs med). Så hvis du kan leve med det indtil da :)
User
Bruger #4575 @ 20.11.03 13:34
Det er helt i orden :D
Så øver jeg mig bare lidt mere i OpenGL i mellem tiden...
User
Bruger #2959 @ 20.11.03 15:16
Jeg synes virkelig denne artikel er meget god! Og den fortjener virkelig at få top karakter. Jeg glæder mig til at komme videre med mit spil :) Håber der snart kommer en efterfølger af dig! Bliv ved med det! :)
User
Bruger #1748 @ 22.11.03 21:41
Imponerende artikel!
User
Bruger #4754 @ 24.11.03 18:45
Præcist, hvad skal man bruge til denne her tutorial??? jeg har Delphi, men hvad ellers???

jeg er lidt af en n00b :D
User
Bruger #1474 @ 24.11.03 20:17
Det er det eneste! En Delphi kompiler er såmænd nok :) Det er blandt andet derfor jeg foretrækker OpenGL!
User
Bruger #4090 @ 25.11.03 12:04
Så mangler vi bare at der er en der omskriver artiklen til os der programere c++ i borland :)
Kanon artikel ellers
User
Bruger #1518 @ 25.11.03 18:55
"Jeg vil lige nævne at hele kildekoden jeg brugte til denne artikel, kan downloades fra min site. " - Hvorhenne på din side? Jeg kan ikke lige finde den...

Men, fandme en nice artikel! Hvis alle skrev sådanne artikler, havde der overhovedet ikke været behov for rating system, da alle ville ligge til et 13-tal (5-tal, men altså :P) :D!

Så til Søren Klit Lambæk: Godt arbejde, og bliv endelig ved med det :D
User
Bruger #1474 @ 26.11.03 02:16
Sidst i artiklen er en link til den! ellers er det: http://www.opengl-delphi.dk

Det glæder mig meget at I kan bruge min artikel! Det er ikke tit man ser artikler om 3D udvikling på dansk, men nu ved jeg, at det i hvert fald IKKE er fordi, at folk ikke værdsætter det :)
User
Bruger #1518 @ 26.11.03 21:55
Gerne direkte link, kan ikke lige finde kildekoden :)
User
Bruger #2959 @ 28.11.03 14:27
her er det: http://www.opengl-delphi.dk/source1.zip
Prøv kig ordenligt! =)
User
Bruger #5097 @ 16.02.04 15:09
Kunne ikke forstå et eneste ord.
Det her er det jeg ikke forstår:'

1) for ikke at hvide hvor komomenterne ligger...

2) Den første kode er et elle andet sted hvor der står type. Hvor er det...

3) Nr. 2's sted skriver du navnet på de 2 kompomenter. Kan ikke skrive det før at kompomenterne er fundet.


Resten læste jeg ikke da det ikke ville hjælpe mig.

Kan i ikke lige hjælpe mig...

Tak
User
Bruger #1474 @ 16.02.04 15:35
Theis>> Helt ærligt så ved jeg ikke hvad du mener! Hvis du er usikker med at programmere Delphi, så vil denne artikel være en stor mundfuld for dig, så det kan være at du skal vente til du ved lidt mere om Delphi.

Jeg har i ligevel prøvet at besvare så godt jeg kunne forstå:

1-2) En Type skal selvfølig altid defineres før selve typen blive anvendt i en kodesammensætning. Præcis hvor en type skal defineres er meget afhænig af dit formål med typen. I dette eksempel ville en global definering være meget indelysende!

3) Jeg ved ikke hvad det er for nogen 2 komponenter du mener!

NB: Prøv ar være mere præcis næste gang :))
User
Bruger #5097 @ 16.02.04 20:59
Tja...
Søren Klit Lambæk

Vis du syns at jeg skal vænte efter jeg har læst en bog på 500 sider, en anden på 200 og en 3'ge på 140 sider, vil jeg sige nej.
Jeg ved udmærket meget om delphi.
Men jeg fårstår ikke rigtigt hvor de første 2 koder skal insættes...

Der er måske ikke 2 komomenter men jeg kunne bare ikke få det til at virke...

Kan i hjælpe???????
User
Bruger #1474 @ 17.02.04 00:31
He he det var bestemt ikke for at fornærme dig, men siden du ikke er sikker på hvor det første kode skal skrives fik jeg den opfattelse at du ikke var helt inde i Delphi - hvilket jo ville havde været en ærlig sag ;)
Du kan downloade kildekoden fra min site:
http://www.opengl-delphi.dk/source1.zip
Der vil du hurtig kunne overskue hvordan jeg har sat det sammen.

Men det gør faktisk ligemeget hvor du implementere de 2 første kode eksempler, så længe de kan identificeres af din forms OnCreate property!

NB: Desuden vil jeg sige at en bog på 500 sider, en bog på 200 og en på 140 ikke er særligt meget! Jeg har 7 x 500 siders bøger liggende omkring Delphi, og føler stadig jeg mangler at vide meget endnu!
User
Bruger #5097 @ 21.02.04 23:08
Søren Klit.
Im sorry. Det var ikke negativt ment. Det er sådan, at jeg bare godt tror at jeg ville kunne klare det. Jeg får også somme tider hjælp af en ekspert jeg kender...
Og jo 500 side, 200, 150 er ikke helt utrolig meget. Men jeg syns dog at det er nok til dette.
Jeg syns heller ikke selv at jeg ved nok om delphi. Men dog en masse...

Jeg kigger lidt på hjemmesiden...
User
Bruger #5167 @ 23.02.04 19:49
Kanon artikel! Det må jeg sige... Klart et 5 tal herfra! Synes der er 1 ting som er dårligt! Det er at du kun har fået 2000 UP for den! Come on Admin's, den er da mindst 10.000 værd!
Kepp Up The Good Work!!!!!
User
Bruger #5097 @ 14.03.04 14:05
Hej Søren Klit Lambæk.
Nu prøver jeg igen efter at have kigget på noget andet.
Dog har jeg et spr. efter dine første 30 linier.
Det lyder jo let. Og jeg kan fortå at jeg bare skal skrive det der (mener det er:) OpegGL i user listen.
Men da jeg læste den ble jeg usikker om der er noget kompoment der skal fides frem fra kompomentpalleten? Er der det. Der står ingen adresse så det skal i såfald ikke hentes...


Nå Men Tak
User
Bruger #5097 @ 14.03.04 14:17
type
TContext = record
RenderContext, DeviceContext : THandle;
end;
--------

Skal denne ikke ned i vores kode der oppe vor der allerede står
type
TForm1 = class(TForm)?


Vis ja, skal jeg slætte TForm1 = class(TForm). For så vil jo den ikke starte. Det er klart?
User
Bruger #5097 @ 14.03.04 14:19
Bleger det ikke altid at være en liste over vilke kompoments der er brugt der står der oppe?


Hvis ja, hvor ligger så de kompomenter?
User
Bruger #1474 @ 14.03.04 14:57
Engang for ALLE! Nej, der er ikke brug for komponenter eller at installere nogen komponenter, eller hentes findes nogen frem fra komponentpanelleten, for at bruge OpenGL i mine artikler! Så er det vist sat på plads! Alt du skal gøre for at kunne benytte OpenGL kald er at tilføje "OpenGL" under uses, som jeg har nævnt op til flere gange!

Når man skriver noget under uses, linker man en unit (.pas eller .dcu) til sit projekt! Dette er ikke nogen komponent, det er bare en anden unit med noget kode!

Du må selv om hvor du definere dine typer og varianter, så længe de kan identifiseres af de forskellige procedure og funktioner der har brug for dem!

Du skal ikke på nogen måder slette din forms klasse! Hvis du gør det vil du jo ikke havde nogen form, og dermed ikke kunne se grafikken! Du skal forøvrigt slet ikke slette noget af det kode som din Delphi kompiler for-skriver for dig!

Hvilken Delphi kompiler bruger du? Jeg har hørt at der skulle være problemer med de helt nye kompiler fra Borland, da de bruger et helt nyt filsystem! Men hvis du har en kompiler fra version 7 og ned efter, skulle der ikke være nogen problemer overhovedet!

Med venlig hilsen
Søren Klit Lambæk
User
Bruger #5097 @ 14.03.04 21:00
Tillykke.
Jeg bruger Delphi 7 Enterprice (eller hvad det hedder).

Du behøver ikke at hisse dig op. Husk på at jeg spør da jeg er en noob. Og jeg må indrømme at jeg burde kunne havde lidt mere viden om hvad du taler om, får at jeg kan arbejde med det.
Men en 13 årigs drøm er da 100% at kunne lave fede 3d spil. Så jeg kan ikke vændte.
Men vis du syns det er irrigterende at jeg spør. Så må du lade vær at svare. Som dog ikke er pænt og jeg vil heller ikke blive glad.
Men så har jeg da heller ikke spurt så meget.

Men er det så umuligt at få lavet OpenGL med mit delphi version igennem din artikel.
Så må du da lave en for de folk som ejer den nyeste version.
Ellers må jeg da købe en af de gamle.
MEN SÅ ER JEG SUR VIS DET IKKE VIRKER!!!


Den er i såfald ikke glad for den første kode...





Tag det roligt.
Hilsen Theis F. Hinz (Shafh)
User
Bruger #1474 @ 14.03.04 21:43
Jeg har bestemt ikke hidset mig op (Så skulle du høre når jeg hidser mig rigtigt op he he...)

Jeg er ikke træt af at folk spørger og slet ikke noob, men det kan måske være lidt trættende at få samme spørgsmål igen og igen... når jeg ikke kan gøre det mere klart end - INGEN KOMPONENTER!

Nå, men nok om det!

Selvom man er 13 år skal man selvfølgelig også havde en chance for at lave sine egne 3D Spil. Denne artikel henvender sig derfor til alle uanset alder, køn og race!

Du bruger Delphi 7, og den skulle altså hvad jeg har fået fortalt virke til mine artikler. Men du kan selv tjekke det ved at se hvad efternavne dine projekt filer hedder. Hvis de enten hedder DCR, PAS eller DCU skulle der være rimlig garanti for at det virker. Men hvis du siger at mit kode ikke virker så gør den det jo selvfølgelig ikke! Jeg har aldrig haft version 7 selv (bruger den gamle version 4 standard), så jeg kan med gode grunde ikke vide det med sikkerhed!

Prøv at oprette et nyt projekt og skriv "OpenGL" under uses, uden at skrive andet. Hvis det viser sig at din kompiler allerede brokker sig der er der noget galt!

Hvis den skriver: "OpenGL.Pas unidentified" eller lign. er det fordi filen OpenGL.pas ikke ligger, hvor den skal eller slet ikke findes!

OpenGL.Pas filen er en interface til OpenGL32.DLL filen som Windows bruger til at få kontakt til dit grafikkort med. OpenGL.pas filen skulle følge med din kompiler som standard! Ellers prøv at lade Windows foretage en fil-søgning efter denne fil!

Hvis det viser sig at du ikke kan finde denne fil kan du helt sikkert downloade den fra nettet. Der findes en anden fil kaldet OpenGL12.Pas det er ikke den! Det er en nyere version, og bliver ikke brugt i mine artikler, men den kan dog fint bruges, hvis man har lidt forstand på OpenGL!

Hvis intet af dette virker, så spørg igen. Og vi vil finde ud af en anden løsning! For 3D udvikling er noget af det sjoveste der findes, og det må du ikke gå glip af, hvis du hat lyst til det!

Held og Lykke

Med venlig hilsen
Søren Klit Lambæk
User
Bruger #5097 @ 20.03.04 12:23
Tak.
det var et dejligt svar.
Men det virker med OpenGL i user listen.
Men koderne du skriver på artiklen virker ikke...
Men mine filer er også: .dmf, .dpr og .Pas.

Jeg prøver mig at andskaffe en gratis udgave af delphi 4, 5 eller 6.

Du behøver ikke at svare.
Du har været til fantastisk hjælp, og jeg kan ikke vendte til at prøve!!!

Svare måske om en et godt stykke tid, og siger om det virker.
User
Bruger #1474 @ 20.03.04 19:56
Du behøver ikke at skifte kompiler! Det skulle virke, jeg har fundet ud af at jeg kender en som bruger Delphi 7, og han kan sagtens kompile min artikel!

Prøv at downloade kildekoden fra artiklen!
kopiere indholdet fra .pas filen men KUN det jeg skriver i artiklen, og ikke noget af det der er pre-skrevet af Delphi! og tilføj derefter OpenGL under uses!

Så skulle det virke! Kom tilbage, hvis det ikke virker, og fortæl mig præcis det din Delphi kompiler skriver af fejlbesked!

Jeg tror grunden er at Delphi 7 bruger nogle units filer som Delphi 4 ikke behøver! Så hvis du kopiere hele min .pas fil og vil kompile det i Delphi 7, mangler den nogle af de units!
User
Bruger #3308 @ 23.03.04 18:48
Theis tror du ikke du skulle passe lidt på med at sige at dine artiklens koder ikke virker!...
Somregl er det jo en selv som har tastet forkert...
Jeg ved godt du har læst 999999999 sider om delphi... det er også godt... men kan du bruge alt det du har lært? eller har du bare læst det?...
Jeg har arbejdet med delphi i ca. 1, 2 uger nu... sådan for sjovt.... og jeg kan sagtens få denne artikel til at virke...
jeg bruger også Delphi 7 EnterPrise...
Så der skulle ikke være noget der!

Men tænk lige en ekstre gang når du siger at en kode ikke virker! ;) måske er det dig som har lavet fejlen! ;)
User
Bruger #3308 @ 23.03.04 18:49
Til Søren.....

Damn en god artikel! kan det gøres bedre? :)
User
Bruger #5097 @ 24.03.04 14:48
Jo, tak.
Men nu har jeg også fået delphi 6. Men det virker ikke.
Jeg vil meget gerne sende dig et screenshot af det. Men alt det du skriver har jeg gjordt...
User
Bruger #1474 @ 24.03.04 17:59
Kasper Svendsen>> Mange tak :D

Theis>> Send mig lige din kildekode! Der må absolut være noget du helt har misforstået med denne artikel eller Delphi generalt!
User
Bruger #5097 @ 25.03.04 16:21
Kan jeg skrive det i en mail, ellers vil det fylde total meget. Og det vil både fylde på din artikel, og gør det måske lidt ufedt. Og også da det ikke interresere andre. Kan du ikke give en mail?
User
Bruger #5097 @ 25.05.04 16:39
Heyyyy.
Jeg har fundet ud af det sådan set.
Fedt.
Og Søren jeg må undskylde alt den tid jeg har brugt....

Har kommet langt i denne artikel (helt hen og fået lavet en firkant.¨
Men mystisk nok at efter jeg har fået lavet det første med en firkant (den der er lidt lang), og jeg bliver ved med at bruge artiklen, vil den i de næste koder i artikelen kun komme den sorte baggrund på formen nå jeg afprøver det.

Why?

Men tak...
User
Bruger #5097 @ 26.05.04 12:30
Nu er jeg kommet længere igen.
Jeg undskylder...
Men er der en der kan forklare hvordan idle kan laves i delphi 6 og 7?
User
Bruger #5097 @ 26.05.04 13:58
har fundet ud af det igen...
User
Bruger #6869 @ 28.11.04 00:26
Hej Drenge og Piger,
Sidder lige en sen Lørdag nat, og prøver denne fantastiske tutorial... men der kommer et problem jeg aldrig har set før.... Jeg er nogenlunde kendt i delphi, men har lige set det her før, er nået til første compile, og så kommer fejlen: EResNotFound???
Hvad er det og hvor kommer det fra, er det en fejl i installationen af Delphi? Eller er det mig :)
God weekend!
User
Bruger #6869 @ 28.11.04 00:37
HA HA typist.... havde kommet til at slette linien: {$R *.dfm}

Undskyld drenge og piger..!!!

Hav en god aften...
User
Bruger #1474 @ 28.11.04 18:41
I lige maade... Det var da godt at du fandt ud af problemet selv!
User
Bruger #6869 @ 05.01.05 16:44
Hejsa igen drenge og piger, hvis I bare ønsker at BitMappet skal være i det samme bibliotek som dit program (EXE fil) så skal I skrive følgende ved LoadTexture delen:

Bitmap.LoadTexture('./Gulv.Bmp');
User
Bruger #7992 @ 16.08.05 20:34
rigtig god artikel. men jeg har et lille problem,
min væg og mit loft er helt hvidt.
Kan du hjælpe?

User
Bruger #1474 @ 17.08.05 23:48
Hejsa Tobias... Det kan vi jo ikke ha' ;-) Send lige dit kode til min mail, og jeg vil straks se på sagen! :)

Søren
User
Bruger #7992 @ 21.08.05 18:39
jeg tror jeg har løst det selv.
User
Bruger #8230 @ 04.10.05 09:12
Hej Søren,
Virkelig god artikel, men når man nu først kigger på artiklen nu her, og egentlig gerne ville se HELE koden, som du tidligere har haft liggende på dit website, er dette jo ikke muligt. Har du mulighed for at lægge koden op på nettet igen?

Med venlig hilsen
Daniel Juhl Mogensen
User
Bruger #1474 @ 05.10.05 14:37
Jeg har skiftet hjemmeside da jeg ikke laengere bruger Delphi som mit hovedsprog! Jeg vil proeve at finde koden frem igen og evt. uploade den til mit nye site! Jeg skriver igen naar dette er sket! :)
User
Bruger #8985 @ 16.11.06 21:46
Ikke for at skynde på dig, Søren, men det burde ikke tage over et år at finde en kode frem :D
User
Bruger #1474 @ 16.12.06 19:06
Thomas>> ehhh, ikke helt sikker paa hvad du mener??? Har jeg lovet noget jeg ikke har holdt?
User
Bruger #1474 @ 16.12.06 19:12
Naa, oki nu tror jeg at jeg er med igen! He he... du mener hele kilde koden for denne artikel? Ja, det har jeg altsaa fuldstaendigt glemt drenge! Er faktisk ikke sikker paa at jeg har den laengere! :(
User
Bruger #8985 @ 16.12.06 20:54
Pyt med det :)
User
Bruger #8985 @ 23.05.08 11:49
Hvad er dit nye hovedsprog?
User
Bruger #1474 @ 15.07.08 13:59
Mit hovedsprog er C/C++. Jeg bruger stadig Delphi men dog i begrænset omfang. Egenligt kan jeg godt lide begge sprog på hver deres måde. Når det kommer til stykket er de stort set meget ens! Jeg er derfor ved at udvikle en spil motor der understøtter begge sprog. Det kan være jeg en dag skriver et par artikler/tutorials om hvordan man bruger den med de forskellige programmerings sprog. Hvis du er interesseret så kig en smut forbi http://www.pixie3d.com
User
Bruger #13205 @ 24.01.09 18:38
Rigtig godt skrevet!!
Kunne ikke gøres bedre :D
Dit Pixie3D projekt ser rigtigt interessant ud, og jeg tror at jeg vil tjekke det ud :P
Du skal være logget ind for at skrive en kommentar.
t