Toon posts:

[Algorithme] Wacky Wheels

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo

(ik wil graag een spelletje maken. Ik heb al eerder met jullie hulp een spel nagemaakt(zoek op pendulumania). Nu wil ik weer wat nieuws)
Ik speel al tijden een kart spelletje Crazy Kart.
Nu vraag ik me af hoe het werkt(en wil het graag namaken).

een vraag voor de wiskundigen:
stel ik heb dit plaatje

Afbeeldingslocatie: http://www.kaiton.nl/kart/track1.jpg(groter http://www.kaiton.nl/kart/trackbig.jpg

Crazy cart kan op de een of andere manier de map transformeren naar een
3D beleving.
Afbeeldingslocatie: http://www.int13.net/ss/crazy02.png

Hoe doen ze dat?

Volgens mij pakken ze een gebiedeuit de grote map. Roteren ze dat en squeezen ze het naar een trapezoid ofzo.

Weet iemand een algorithme hiervoor?
Of heeft iemand een url? een werkende source?
Laat het me weten

[ Voor 10% gewijzigd door Verwijderd op 21-01-2004 21:03 ]


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Wack Wheels :P

Het lijkt me sterk dat ze dat met dát plaatje doen. Je zou zo'n plaatje hooguit als een heightmap kunnen gebruiken, maar hoogteverschillen komen niet in 't spelletje voor.

[edit]Als texture van de bodem kan inderdaad wel. Maar daarmee ben je er nog niet...

[ Voor 22% gewijzigd door Infinitive op 21-01-2004 21:38 ]

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


Verwijderd

Topicstarter
Ik weet dat Crazy Cart het daar mee doet.
Je kan namelijk een map editor downloaden en daarmee hoef je
alleen zo'n 1024x1024 map in photoshop te maken.
Het spel doet de rest

Verwijderd

Topicstarter
in mijn gedachten moet het makkelijk kunnen.

Het is namelijk niets anders dan het mappen van dat mapplaatje op
een groot plat vlak
en dan slechts de camera te verplaatsen.

Ik weet alleen niet het algorithme er voor, mijn wiskunde kennis is helaas
daar te weinig voor

  • Flard
  • Registratie: Februari 2001
  • Laatst online: 26-05 10:11
Ik weet toevallig dat die manier van weergeven 'Mode 7' heet. Dat werd o.a. in Wacky Wheels en Mario Kart gebruikt. Dus misschien dat je daar wat meer mee kunt vinden?!


(Ik heb ook ooit een keer DIV Game Studio gekocht, en daar kon dat ook mee.)

  • Swinnio
  • Registratie: Maart 2001
  • Laatst online: 27-05 13:45
daar zit toch weinig algoritmewerk achter? Is enkel het verplaatsen van de camera (hetgeen natuurlijk op oneindig veel manier geimplementeerd kan worden) en daarna de data gebruiker in de engine die het 3D-beeld genereert.

If the world wouldn't suck, we'd all fall off


Verwijderd

Topicstarter
Vet!

Daar heb ik idd heel veel aan!

Hier iets grappigs wat Mode7 in Flash is:
http://www.pargames.co.uk/mariokart.html

  • Mizitras
  • Registratie: September 2002
  • Niet online
Hijh zal vanaf een x% zwarttinten het als weg zien zeker en daarbuiten gelig als zand of water, en die donkere dotjes automatisch met boompjes bepoten ?

"the fucking alpha cpp compiler seems to fuck up the goddam type "LPITEMIDLIST", so to work around the fucking peice of shit compiler we pass the last param as an void *instead of a LPITEMIDLIST"


  • Count
  • Registratie: Augustus 2000
  • Laatst online: 10-08-2023
Om dit in software te doen is vrij ingewikkeld. Ik zou dus gewoon een 3D API zoals OpenGL of Direct3D gebruiken.

OpenGL is niet zo heel moeilijk. Je zal even moeten kijken op nehe.gamedev.net en de beginselen leren.

Een simpele quad (2 triangles die een rechthoek maken) met dat plaatje als texture en daarover de camera laten glijden zal het beoogde effect al behalen. Met GLUT kun je zoiets vrij rap inelkaar zetten.

Great minds think in parallel gutters.


  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

dat is inderdaad 'mode 7' methode,
hier een tutorial hoe het op de gba moet
http://www.jc-news.com/coding/gbadev/Mode7tutorial.txt

[ Voor 36% gewijzigd door Scorpion op 21-01-2004 21:19 ]


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Daarmee heb je alleen nog niet bepaald intern wat de weg is en waar de rand is...

[edit]mmm. even linkje wat hierboven staat lezen. ... bekende stof. Camera transform en raycasting :*)

Maar eehm. Als ik dat goed lees dan staat er dus alleen hoe je dus het plaatje als een soort van texture op een plane (met Z=0) plakt en hoe je dan met raycasting een 3d-plaatje maakt gegeven een bepaalde camera standpunt en hoek. Dat verteld dus nog niet hoe je de rest doet, zoals bepalen wat onderdeel van de weg is en waar de randen zitten. Dit heb je ook nog nodig voor het spelletje :)

[ Voor 98% gewijzigd door Infinitive op 21-01-2004 21:28 ]

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


Verwijderd

Topicstarter
Genoeg te lezen ;)

Het moet helemaal in software gebeuren, omdat het ook moet
draaien op een PocketPC

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 26-05 00:01

Janoz

Moderator Devschuur®

!litemod

Infinitive schreef op 21 januari 2004 @ 21:21:
Daarmee heb je alleen nog niet bepaald intern wat de weg is en waar de rand is...

[edit]mmm. even linkje wat hierboven staat lezen. ... bekende stof. Camera transform en raycasting :*)

Maar eehm. Als ik dat goed lees dan staat er dus alleen hoe je dus het plaatje als een soort van texture op een plane (met Z=0) plakt en hoe je dan met raycasting een 3d-plaatje maakt gegeven een bepaalde camera standpunt en hoek. Dat verteld dus nog niet hoe je de rest doet, zoals bepalen wat onderdeel van de weg is en waar de randen zitten. Dit heb je ook nog nodig voor het spelletje :)
Dat doe je niet in 3d, maar gewoon in 2d. Dit is de techniek die bijvoorbeeld ook bij doom 1&2 en wolfenstein werd gebruikt. Je zet het alleen voor het tekenen om in 3d. Al je andere berekeningen kun je gewoon op het 2d plaatje loslaten. Hoe de autotjes rijden en of ze op de weg of in het zand zitten kun je dus heel makkelijk bepalen door te kijken wat voor materiaal er op die positie ligt (eventueel extra map, of gewoon adhv de kleur van de gewone map).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Dit controle wat weg is enzo kan ik zelf wel programmeren.
Ik moet alleen uitvinden wat het algorimthe is van Mode7.
(dus het rotaten en scalen van de grote bitmap).

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:51

.oisyn

Moderator Devschuur®

Demotivational Speaker

Stel even dat de x- en y-as resp. horizontaal en in de diepte lopen, en de z-as verticaal is.

Als je aanneemt dat de camera altijd aligned is met het xy vlak, en dat de enige rotatie dus altijd in het xy vlak plaats vindt (oftewel om de z-as, maar ik prefereer de eerste benadering omdat die voor alle dimensies geldt ;)) (dit is ook meestal het geval in de spellen die genoemd zijn), dan is het vrij simpel. Eerst even wat feiten:

[list=1]• De horizon ligt altijd in het midden van je beeld.
• Als je een horizontale beeldlijn zou projecteren op je 2D plaatje, dan is dat ook altijd een rechte lijn, die bovendien lineair verdeeld is.
• Alle horizontale beeldlijnen geprojecteerd op je map zijn bovendien evenwijdig aan elkaar
• Een verticale beeldlijn (vanaf het midden van je scherm omlaag) geprojecteerd op je map is ook altijd een rechte lijn, maar echter niet lineair verdeeld

Zoals je wellicht weet is de grafische buffer op je videokaart een blok geheugen dat de pixels van links naar rechts, van boven naar beneden ordend. De snelste manier om te tekenen is dan ook van links naar rechts, van boven naar beneden.
Dat is handig, omdat we bij (2) geleerd hebben dat alle horizontale beeldlijnen een lijn zijn in je 2D map, en dat wordt dus een kwestie van interpoleren. Als je zou uitrekenen waar het meest linker punt van de bovenste beeldlijn (onder de horizon, het gedeelte erboven laat ik even buiten beschouwing) in je 2D map terecht komt, en je rekent uit wat het punt is dat daarnaast ligt, en het verschil tussen deze 2 punten neemt, dan kun je dus elk volgend punt in je map bepalen door bij de x en y coördinaten steeds dat verschil op te tellen. Dit proces kun je voor elke beeldlijn herhalen, en zo je 2D map als een 3D visualisatie op je scherm tekenen.

Natuurlijk kun je dit proces optimaliseren. Het blijkt namelijk dat, bij gelijke hoogte, de afstand tussen 2 naast elkaar liggende punten op je beeld altijd op gelijke afstand van elkaar in je map liggen. De richting van punt 1 naar punt 2 is bovendien puur afhankelijk van de oriëntatie van je camera, en dus uiteindelijk is de vector tussen 2 punten altijd in de vorm van (r * cos (a), r * sin (a)), waarbij r de afstand tussen de 2 punten is, en a de rotatie om de z-as van de camera.

Eveneens zijn de punten in je map altijd op gelijke afstand en met gelijke richting tov de positie van de camera in de map. Je kunt dus, zonder ingewikkelde berekeningen te doen, je scherm gigantisch snel tekenen

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.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
En als je de vrijheid van de camera beperkt zo dat 'ie niet kan 'tilten', dan krijg je inderdaad het effect dat er een trapeziumvormig gebied van de grondtexture wordt geselecteerd, zoals kaiton al veronderstelde. Dat gebied wordt getransformeerd naar een rechthoekige vorm.

Als je de horizon in je beeld hebt, zoals bij .oisyn's constructie, dan wordt het trapezium wel oneindig hoog, maar dat maakt in de praktijk niet uit.

[ Voor 27% gewijzigd door Soultaker op 22-01-2004 16:25 ]

Pagina: 1