[AS3/Max]Isometrische Game Engine hoek van camera berekenen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 26-05 15:01

XangadiX

trepanatie is zóó kinderachtig

Topicstarter
Okee, waarschijnlijk ben ik ergens ongelooflijk overheen aan het kijken, maar ik zit dus met dit probleem:

Afbeeldingslocatie: http://www.xangadix.net/download/tweakers/rekengame_isometrie_voorbeeld.jpg

Waar je naar kijkt is een fotoshopje van een 3ds max rendering en een isometrisch spelletje in Flash.
Wat ik probeer is om de hoek van de max rendering, precies overeen te laten komen met die van de as3isolibrary van flash. Daar ben ik nu redelijk in geslaagd, maar dit is proefondervindelijk gedaan (ik heb doezend renders gemaakt totdat hij 'pastte').
Ik kom daar niet mee weg als ik hele grote levels ga bouwen dus ik moet weten wat de formule is om het uit te rekenen!

Hier zie je mijn scene in max:
Afbeeldingslocatie: http://www.xangadix.net/download/tweakers/max_screenshot.jpg

links wat doorsnedes en rechts een 'gewone camera' (boven) en een isometrische camera onder. De 'gewone' camera is geselecteerd. Welnu, de isometrische camera staat op een hoek van x=70.4, y=0 en z = 45 graden, en uiteraard op een "ornitografische" projectie.

Het *lijkt* te werken en te passen, maarr...

waarom 70.4 graden? Dat getal heb ik dus gevonden door te klooien, maar ik krijg het niet geproduceerd in de isometrische engine die ik gebruik. Dat is onhandig, want als ik de levels groter ga maken gaat hij zeker van de lijnen "af" lopen, en dan moet ik nog meer testen om de hoek nauwkeuriger te maken.

In Flash gebruik ik http://code.google.com/p/as3isolib/, maar ik wijzig de settings een beetje; ik 'tilt' namelijk de camerahoek middels een class die 'DefaultIsometricTransformation' heet. In plaats van een ratio van 2, gebruik ik een ratio van 3; en voor de correctie van de z gebruik ik 0.6 ipv. 0.5 want het perspectief komt een beetje omhoog.

DefaultIsometricTransformation

code:
1
2
3
4
5
6
7
  private var radians:Number;
  private var ratio:Number = 3; // 3 ipv. 2
                
  private var bAxonometricAxesProjection:Boolean;
  private var bMaintainZAxisRatio:Boolean;
                
  private var axialProjection:Number = Math.cos(Math.atan(0.6)); // 0.6 ipv. 0.5


In flash ziet dat er zo uit:
Afbeeldingslocatie: http://www.xangadix.net/download/tweakers/spelletje.jpg

Een isometrisch grid maar met een verhouding van 1:3 in plaats van het veel gebruikelijkere 1:2.

Wat ik nou moet weten is wat is de hoek van a in dit diagram:
Afbeeldingslocatie: http://www.xangadix.net/download/tweakers/schetsje.jpg

en hoe verhoudt die zich tot de camera hoek in Max?!

De camera in max staat op 60 graden, (90-30) en zou dus bij een kleinere ratio op een andere hoek moeten staan. Die hoek ligt in de buurt van 70.6 graden, maar waarom?! [ ref. ]

in een projectie van 1:2 verhoudt de camera van Max zich exact op x:60, y:0, z:45 en dan past alles exact in elkaar; maar als ik de verhouding verander naar 1:3 in de isolibrary moet de x ongeveer 70.6 worden. Maar waarom?!
Ik zit nu al twee uur sommetjes met een Pythagoras en een tangens te maken, maar ik kom op allemaal bizarre getallen uit en niet op iets wat lijkt op 70.4 ~70.6 maar ik kom er niet op.

Wie heeft er wiskunde B in zijn pakket gehad en kan me de formule geven 8)7

[ Voor 7% gewijzigd door XangadiX op 27-01-2012 22:20 ]

Stoer; Marduq


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Ik heb zelf al eerder met as3iso gewerkt en kan je mededelen; geef het maar op. Wanneer je de hoek v/h perspectief anders instelt dan de standaard 45 graden gaan er andere zaken stuk die hard-coded afhankelijk zijn van die 45 graden hoek.

Je hebt meer kans iets werkbaarrs te leveren met een echte 3D engine zoals Away3D en Flash Player 11 als compilatie target. In dat soort engines kun je doorgaans de perspectief projectie vervangen door een isometrische projectie door aan de projectie matrix te sleutelen en met de hardware acceleratie (en native code software renderer als fallback) is het tegenwoordig lang niet meer zo langzaam als het vroeger was.

Acties:
  • 0 Henk 'm!

  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 26-05 15:01

XangadiX

trepanatie is zóó kinderachtig

Topicstarter
Nou, ik heb hier ook Unity liggen en dat is ook een optie om het in te bouwen, maar ik moet rekening houden met best wel oude apperatuur. Maar ik best wel eens dat moohill wil uittesten ;)

Het spel moet uiteindelijk draaien op MBO scholen, en die hebben vaak wat oudere apperatuur, dat betekend de komende drie jaar maar een beperkte 3D ondersteuning. ZONDER extra plugins that is (mag vaak niet van beheer op die scholen). Dus unity of away3d, en zelfs een HTML open GL variantje durf ik eigenlijk niet aan. Flash 10 wel. (ik laat me overigens graag overtuigen, maar ik ben erg somber over de kwaliteit van de computers op een gemiddelde MBO school)

Isolib lijkt toch wel een van de betere engines ( ik heb van een stuk of 5 de documentatie zitten door bladeren)
We hebben wat 'omzet problemen gehad van isometrisch naar sherm-ruimte, maar die heb ik denk ik nu opgelost), welke dingen zijn er verder hard-coded? Zover als ik het nu kan zien worden alle translaties van 2d naar isometrisch door de math class afgehandeld :? -- maar ik mis dus iets ;)

[ Voor 4% gewijzigd door XangadiX op 27-01-2012 23:14 ]

Stoer; Marduq


Acties:
  • 0 Henk 'm!

  • OnTracK
  • Registratie: Oktober 2002
  • Nu online
Snel even wat lijntjes getrokken:

Afbeeldingslocatie: http://img267.imageshack.us/img267/3333/calcs.png

Je verhouding tussen de daadwerkelijke grootte en de zichtbare grootte is 1:3

Hoek d is dan arcsinus van 1/3
d = sin-1(1/3)
d =~ 19.47

Hoek e is waarschijnlijk de hoek die de camera uitbeeldt (getuige ook van lager getal als de camera hoger staat.
e = 90 - d
e = 90 - ~19.47
e =~ 70.53

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


Acties:
  • 0 Henk 'm!

  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 26-05 15:01

XangadiX

trepanatie is zóó kinderachtig

Topicstarter
* XangadiX ramt wat getallen in 3dsmax

Stoer; Marduq


Acties:
  • 0 Henk 'm!

  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 26-05 15:01

XangadiX

trepanatie is zóó kinderachtig

Topicstarter
Why, thank you good sir, you've seemed to have nailed it B-) _/-\o_

Afbeeldingslocatie: http://www.xangadix.net/tweakers/nailed_it.jpg

Maar waarom gebruik je arcsinus?, ik dacht dat ik tanges moet gebruiken (of heb ik wat te enthousiast wijntjes gedronken tijdens de vrijmibo O-) )

maar waarom zegt google dat het 0.336303575 is ? ggle

en wat is het dan met 20 cijfers achter de komma ?
(ik heb geen grafische calculator of zo hier :-/ )

[ Voor 44% gewijzigd door XangadiX op 27-01-2012 23:27 ]

Stoer; Marduq


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
XangadiX schreef op vrijdag 27 januari 2012 @ 23:13:
Nou, ik heb hier ook Unity liggen en dat is ook een optie om het in te bouwen, maar ik moet rekening houden met best wel oude apperatuur. Maar ik best wel eens dat moohill wil uittesten ;)
Flash Player wordt doorgaans wel goed bijgewerkt. Je moet ook wel, want er is geen aparte branch voor security fixes. Daar zou ik me niet te druk om maken. Verder bevat FP 11 een ingebouwde software 3D renderer voor systemen die de hardware acceleratie niet ondersteunen, dus in het geval van een slechte onboard video chipset of brakke drivers heb je alleen een performance impact om rekening mee te houden. (Het zal sowieso sneller zijn dan IsoLib, die alle 3D berekeningen in ActionScript code moet doen.)
XangadiX schreef op vrijdag 27 januari 2012 @ 23:13:
Isolib lijkt toch wel een van de betere engines ( ik heb van een stuk of 5 de documentatie zitten door bladeren)
We hebben wat 'omzet problemen gehad van isometrisch naar sherm-ruimte, maar die heb ik denk ik nu opgelost), welke dingen zijn er verder hard-coded? Zover als ik het nu kan zien worden alle translaties van 2d naar isometrisch door de math class afgehandeld :? -- maar ik mis dus iets ;)
Ik zou liever zeggen; het is één van de minst slechte. Echt goed zijn de isometrische projectie engines geen van allen. De oorzaak daarvoor is voornamelijk te vinden in het feit dat er een heleboel hoekjes afgesneden worden om de rendering performance werkbaar te houden.

In as3iso gaat o.a. de texture projectie stuk wanneer je de projectiehoek wijzigt. Daar moet je zeker even op letten. Er was ook nog iets anders, maar dat ben ik even kwijt. (Is ook al weer zeker een half jaar geleden dat ik er mee gewerkt heb.)

Iets wat me wel helder is bij gebleven zijn de bakken aan problemen met z-ordering. Depth sorting wordt niet correct geimplementeerd, maar o.a. op group nodes wèl geforceerd aangezet. Ik weet nog dat ik diep door de interne code van de library heb moeten gaan hacken om het helemaal er uit te krijgen. Daarna nog extra gezeik met alles met de hand back-to-front renderen om de diepte wel goed te krijgen.

Acties:
  • 0 Henk 'm!

  • OnTracK
  • Registratie: Oktober 2002
  • Nu online
SOS CAS TOA

in mijn geval wou ik d uitrekenen, dan weet ik Schuin en Overstaand: SO => gebruik S => sinus. Maar je wil de inverse ervan gebruiken. Waarschijnlijk rekent google in radialen.

antwoord op mijn TI-30 is: 70.52877937

edit:
Ja in radialen, kun je omrekenen

[ Voor 104% gewijzigd door OnTracK op 27-01-2012 23:36 ]

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


Acties:
  • 0 Henk 'm!

  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 26-05 15:01

XangadiX

trepanatie is zóó kinderachtig

Topicstarter
OnTrack, ik heb hem helemaal door; wat ik mistte is dat ik, buiten de doos moest denken, ik ben bezig geweest om de hoek 'rechtsonder' (a) uit te rekenen, ik zie nu hoe hij 'draait', Thx, die had ik even nodig !

@R4gnax dus jij zou gewoon voor Flash 11's interne 3d engine gaan? Ik zou het graag doen, maar het kan best lang duren voordat dat soort instanties updaten. (denk aan ie6 wat NOG STEEDS gebruikt wordt)

Upate: ik wilde de textures eigenlijk zelf door een matrix gaan halen omdat ik er ook belichting op wil 'renderen'

[ Voor 18% gewijzigd door XangadiX op 27-01-2012 23:44 ]

Stoer; Marduq


Acties:
  • 0 Henk 'm!

  • Tsjilp
  • Registratie: November 2002
  • Niet online

Tsjilp

RS[I]ds

Het spel moet uiteindelijk draaien op MBO scholen, en die hebben vaak wat oudere apperatuur, dat betekend de komende drie jaar maar een beperkte 3D ondersteuning. ZONDER extra plugins that is (mag vaak niet van beheer op die scholen). Dus unity of away3d, en zelfs een HTML open GL variantje durf ik eigenlijk niet aan. Flash 10 wel. (ik laat me overigens graag overtuigen, maar ik ben erg somber over de kwaliteit van de computers op een gemiddelde MBO school)
vziw heb je voor Away3d geen extra plugins nodig (behalve de flash plugin zelf)?

Raar... Is zo gek nog niet


Acties:
  • 0 Henk 'm!

Verwijderd

XangadiX schreef op vrijdag 27 januari 2012 @ 23:23:
(ik heb geen grafische calculator of zo hier :-/ )
Voor de 3e keer deze week.. Als je veel decimalen nodig hebt, gebruik dan http://www.wolframalpha.com/input/?i=90+-+sin-1%281%2F3%29. Dat werkt erg goed.

Acties:
  • 0 Henk 'm!

  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 26-05 15:01

XangadiX

trepanatie is zóó kinderachtig

Topicstarter
Verwijderd schreef op dinsdag 31 januari 2012 @ 01:03:
[...]

Voor de 3e keer deze week.. Als je veel decimalen nodig hebt, gebruik dan http://www.wolframalpha.com/input/?i=90+-+sin-1%281%2F3%29. Dat werkt erg goed.
Inmiddels weer helemaal nuchter O-) ben ik erachter dat het sommetje ook prima in AS3 kan maken 8)7

Stoer; Marduq


Acties:
  • 0 Henk 'm!

  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 26-05 15:01

XangadiX

trepanatie is zóó kinderachtig

Topicstarter
OnTracK schreef op vrijdag 27 januari 2012 @ 23:14:
Snel even wat lijntjes getrokken:

[afbeelding]

Je verhouding tussen de daadwerkelijke grootte en de zichtbare grootte is 1:3

Hoek d is dan arcsinus van 1/3
d = sin-1(1/3)
d =~ 19.47

Hoek e is waarschijnlijk de hoek die de camera uitbeeldt (getuige ook van lager getal als de camera hoger staat.
e = 90 - d
e = 90 - ~19.47
e =~ 70.53
Toch nog een vraagje, waarom gebruik je eigenlijk de ArcSinus en niet de Sinus?!
ik bedoel, ik zie dat het klopt, maar ik had het echt nooit zelf gevonden.

[ Voor 5% gewijzigd door XangadiX op 07-02-2012 13:31 ]

Stoer; Marduq


Acties:
  • 0 Henk 'm!

  • OnTracK
  • Registratie: Oktober 2002
  • Nu online
Het is voor mij nogal lang geleden, dus ik kan het niet zo goed uitleggen.

Met de sinus van een hoek, krijg je de verhouding tussen de overstaande kant vs. de schuine kant.

Afbeeldingslocatie: http://upload.wikimedia.org/wikipedia/en/math/5/5/4/5540ad0d2c04184df137970b856d0474.png

Maar je hebt de hoek niet, die wil je juist weten. Dus doe je het omgekeerde: Je deelt de schuine door de overstaande, en neemt de inverse sinus daarvan.

Maargoed, ik deed het relatief proefondervindelijk omdat ik zie dat uit de sinus van schuin gedeeld door overstaand geen redelijk getal komt.

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.

Pagina: 1