In deze tutorialserie zullen we een vluchtsimulatortoepassing maken met ShiVa3D Suite. Een vluchtsimulator is een interessant voorbeeld van 3D-programmering. Om deze applicatie te bouwen, behandelen we alle onderwerpen die nodig zijn voor het maken van 3D-games, educatieve toepassingen en nieuwe 3D-apps. De simulator ingebouwd in deze serie zal worden ingezet en getest op een Motorola Droid met Android 2.2, een iPod Touch met iOS 4.3 en een iPad 2 met iOS 4.3.
Met Shiva3D Suite hoeft een programmeur geen Android- of iOS-specifieke code te schrijven. Er zijn twee hoofdstappen voor het maken van een platformonafhankelijke 3D-toepassing met Shiva3D Suite: (1) Ontwikkel de visuele aspecten van de toepassing en de bijbehorende code met ShiVa Editor. (2) Converteer het resulterende binaire bestand naar een platform-specifiek uitvoerbaar bestand (bijvoorbeeld een apk-bestand voor Android) of een projectbestand (bijvoorbeeld een Xcode-project voor iPad) met ShiVa Authoring Tool.
ShiVa Editor is een krachtige tool om 3D-applicaties te ontwikkelen. Een van de beschikbare functies in de tool, deze serie richt zich op enkele basisfuncties, zoals het creëren van een game, een scène, terrein, een head-up display (componenten van de gebruikersinterface), AIModel (gedragsmodel voor een object), evenals codering in de Lua-scripttaal. Nadat we de Simulator in de ShiVa-editor hebben ontwikkeld als een 3D-toepassing, zullen we deze voor zowel het Android-besturingssysteem als iOS-platforms exporteren. Voor het Android-platform wordt het uit de ShiVa-editor geëxporteerde bestand geïmporteerd in de ShiVa Authoring Tool. Vervolgens wordt het geconverteerd naar een apk-bestand voor implementatie in een Motorola Droid met Android 2.2. Voor iPad- en iPhone-platforms wordt het uit de ShiVa-editor geëxporteerde bestand geïmporteerd in de ShiVa Authoring Tool voor conversie naar Xcode-projecten. Vervolgens kan men de projecten in Xcode bouwen en de resulterende uitvoerbare bestanden in verbonden apparaten implementeren.
In deel 1 van deze serie introduceren we de simulator-applicatie genaamd Simulator en leggen we het ontwikkelproces uit dat we volgden tijdens het maken van de Simulator. We hebben ook de inhoud van het downloadarchief bij deze serie beschreven. Ten slotte hebben we de basisvluchtmanoeuvres geïntroduceerd die in de toepassing zijn gesimuleerd.
In deel 2 beginnen we met het beschrijven van het ontwikkelen van het spel met behulp van de ShiVa-editor. Onze belangrijkste focus in deel 2 is het creëren van de visuele componenten van de applicatie.
In deel 3 blijven we het spel ontwikkelen met behulp van de ShiVa-editor. In de eerste plaats is deel 3 betrokken bij het coderen en testen van eenheden van de toepassing.
In deel 4, het laatste deel van de serie, laten we zien hoe de applicatie vanuit de ShiVa-editor wordt geëxporteerd en in de ShiVa Authoring Tool wordt geïmporteerd. Vervolgens leggen we uit hoe je de applicatie converteert naar een platformspecifiek uitvoerbaar bestand via de ShiVa Authoring Tool. De platforms die we zullen overwegen zijn Android, iPad en iPhone. We geven schermafbeeldingen van de Simulator van echte apparaten die worden gebruikt voor testen, een Motorola Droid-telefoon met Android OS 2.2, een iPad 2 met iOS 4.3, en een iPod Touch met iOS 4.3. Ten slotte geven we in 'Slotopmerkingen' een conclusie aan de reeks.
De simulator biedt vanuit de cockpit zicht op de omgeving zoals een piloot ze zou zien. Het vliegtuig zelf, waarvan de dynamiek wordt gesimuleerd, is nooit zichtbaar. De gebruiker ziet een terrein beneden en de lucht boven het terrein. Er zijn vier eenvoudige manoeuvres om te simuleren: de toonhoogte manoeuvre om omhoog of omlaag te gaan en de gebaande bocht manoeuvre om naar links of rechts te gaan. Technische beschrijvingen van deze manoeuvres worden gegeven in de volgende sectie. Hier zullen we de schermen bekijken tijdens de manoeuvres en bespreken hoe de manoeuvres door de gebruiker worden uitgevoerd.
Om de Simulator te spelen, moet het mobiele apparaat op zijn kant worden gehouden en 90 graden tegen de klok in worden gedraaid. In die positie bevinden zich vijf knoppen bovenop het scherm (zie hieronder):
Elk van deze vier manoeuvres, eenmaal gestart, neemt een bepaalde hoeveelheid tijd in beslag om te voltooien. Als een manoeuvre eenmaal is begonnen, kan geen andere manoeuvre worden gestart totdat de huidige is voltooid. Het vliegtuig blijft te allen tijde met constante snelheid bewegen. De hoogte verandert alleen tijdens een pitchmanoeuvre en verandert alleen van richting tijdens een bochtmanoeuvre.
Voordat een manoeuvre begint, is het vlak evenwijdig aan het oppervlak (terrein).
Tijdens een overgebogen linkerbocht gaat de punt van de linker vleugel van het vliegtuig naar beneden en de punt van zijn rechtervleugel gaat omhoog. Om dit gedrag te simuleren, begint de horizon met de klok mee te draaien. Het terrein verschuift naar rechts, omdat het vlak naar links draait en er verschijnt een bericht 'Banking left' als volgt:
Zodra het vlak een maximale rolhoek (bank) bereikt, begint de horizon tegen de klok in te roteren en stopt deze met draaien wanneer het vlak weer evenwijdig aan het oppervlak wordt. Gedurende de hele cyclus van de bocht naar links, zal het terrein naar rechts blijven verschuiven om een linkerbocht van het vlak te simuleren.
Een gebasseerde rechterbocht is symmetrisch met een gerangschikte linkerbocht boven: de horizon begint tegen de klok in te draaien om de rol van het vlak te simuleren, het terrein verschuift naar links en er verschijnt een bericht 'Banking right', zoals volgt:
Zodra het vlak een minimale rolhoek bereikt, begint de horizon met de klok mee te roteren en stopt deze met draaien wanneer het vlak weer evenwijdig aan het oppervlak wordt. Gedurende de hele cyclus van de bocht naar rechts, zal het terrein naar links blijven verschuiven om een rechter bocht van het vlak te simuleren.
Tijdens een pitchmanoeuvre om omhoog te gaan, zal de horizon eerst naar beneden gaan om te simuleren dat de neus van het vliegtuig omhoog gaat. Daarnaast wordt een bericht weergegeven, 'Pitchen', als volgt:
Zodra het vliegtuig een maximale hellingshoek bereikt, begint de neus van het vliegtuig naar beneden te gaan. Om dit gedrag te simuleren, gaat de horizon omhoog totdat het vlak weer evenwijdig aan het oppervlak wordt. Naarmate de horizon toeneemt, wordt de hoogte weergegeven naast het bericht 'Opschuiven' zoals hieronder weergegeven:
Het toonhoogtemanoeuvre om naar beneden te gaan is symmetrisch naar boven. De horizon begint omhoog te gaan om te simuleren dat de neus van het vliegtuig naar beneden gaat en een bericht wordt weergegeven, 'Pitching down', als volgt:
Zodra het vlak een minimale hellingshoek heeft bereikt, begint de horizon te dalen totdat het vlak weer evenwijdig aan het oppervlak wordt. Naarmate de horizon afneemt, wordt de hoogte weergegeven naast het bericht 'Pitching down' zoals hieronder wordt weergegeven.
Tijdens de hele cyclus van een toonhoogte manoeuvre, wint het vliegtuig hoogte, als het omhoog springt, of verliest hij hoogte, als hij naar beneden valt.
Wanneer de gebruiker de simulator opnieuw opstart, verschijnt een bericht 'Simulatie opnieuw opstarten' enkele seconden op het scherm voordat het programma opnieuw wordt opgestart. Dit wordt hieronder getoond.
Behalve knoppen kan de gebruiker ook draai- en stampmanoeuvres initiëren door een enkele aanraking op het scherm.
De bochtmanoeuvres via duimacties worden getoond in de onderstaande figuur.
De toonhoogtemanoeuvres via duimacties worden getoond in de onderstaande figuur.
De gebruiker kan de simulator ook opnieuw starten door twee vingers gelijktijdig in dezelfde richting op het scherm te bewegen, hetzij omhoog of omlaag, zoals hieronder aangegeven.
Het terrein heeft eindige dimensies. Als het vlak buiten de grenzen raakt, wordt een bericht 'Buiten bereik' weergegeven, zoals hieronder weergegeven, en start de simulatie opnieuw.
In deze sectie bespreken we basisconcepten van 3D-game-ontwikkeling met ShiVa3D. Het grootste deel van de discussie hier is ontleend aan de originele ShiVa3D-documentatie. Voor meer informatie, zie http://www.stonetrip.com/developer/doc/ en de gebruikershandleiding die bij de ShiVa-editor wordt geleverd.
Spel staat voor een spel, de belangrijkste entiteit van de applicatie. Het omvat al het andere in de toepassing, zoals camera's, scènes, enz. Spel is een zelfstandige implementatie-eenheid.
Tafereel staat voor een plaats of een weergave die bij het spel hoort. Er is een reeks objecten of modellen gekoppeld aan een scène. Een game kan meerdere scènes hebben. Het spel in de Simulator-applicatie heeft één scène.
Camera vertegenwoordigt een gezichtspunt in het spel. De gebruiker ziet het spel via de camera. Een camera kan van de ene positie naar de andere gaan of de richting ervan kan worden gewijzigd. In deze serie legt de camera de vlucht vast vanuit het zicht van een piloot. We gaan ervan uit dat de camera recht voor het vliegtuig staat. Het vliegtuig zelf zal niet zichtbaar zijn.
Model kan een object of een reeks objecten zijn met verschillende kenmerken, zoals vorm, licht of sensor. Het enige model dat we in de Simulator zullen hebben, is een standaardlicht dat is ingesteld om het terrein te verlichten.
Terrein is de grond op een scène. In de Simulator zullen we een terrein creëren om te simuleren wat een piloot tijdens een vlucht zou zien.
AIModel impliceert 'kunstmatige intelligentie' en vertegenwoordigt gedrag. Een AIModel kan functies, handlers, toestanden en variabelen bevatten. In de Simulator zullen we een AIModel gebruiken om de vereenvoudigde dynamiek van een vliegtuig te beschrijven.
Script bevat de code in een AIModel, bijvoorbeeld de code voor een functie of handler. De scripttaal in ShiVa3D is Lua (http://www.lua.org).
HUD staat voor Head Up Display en is een term om verschillende widgets voor gebruikersinterfaces weer te geven, zoals de knop, het label, de lijst, de schuifregelaar, enz. zodat de gebruiker met het spel kan communiceren. De HUD-componenten die we in de Simulator gaan gebruiken, zijn de tekstlabels en knoppen.
Om de Simulator te ontwikkelen, gebruiken we de gratis versie van ShiVa3D Suite (http://www.stonetrip.com/download.html), die ShiVa Editor PLE (persoonlijke leereditie) en ShiVa Authoring Tool bevat. Het onderstaande schema geeft een overzicht van het ontwikkelingsproces dat we met deze hulpmiddelen hebben gebruikt.
Laten we de afzonderlijke stappen van dat proces bespreken.
De ShiVa-editor heeft verschillende modules om een 3D-applicatie, meestal een game, vanaf de grond af te ontwikkelen en te testen. Een belangrijk kenmerk van de ShiVa-editor is dat een met die tool ontwikkelde toepassing kan worden geïmplementeerd (na authoring in ShiVa Authoring Tool) in verschillende apparaten met verschillende besturingssystemen, b.v. een pc met Windows OS, een mobiele telefoon met Android OS of iPhone enz. Enkele van de basisacties die u met de ShiVa-editor kunt uitvoeren, zijn als volgt.
Ontwikkelen:
Test: u kunt een eerste test van de 3D-toepassing in de ontwikkelomgeving uitvoeren voordat u deze in een doelapparaat implementeert. Testen wordt uitgevoerd via de Animate- of Preview-functie van ShiVa Editor. Tijdens het testen kunt u instellingen voor de schermgrootte wijzigen om te zien hoe de toepassing wordt weergegeven in het werkelijke doelapparaat. Om knopgebeurtenissen te testen, gebruikten we muisklikken. Om aanraakgebeurtenissen te testen, hebben we de toepassing geëxporteerd en geïmplementeerd in een echt apparaat.
Exporteren: exporteer de applicatie nadat het testen is voltooid. Dit genereert een bestand met de extensie stk. De geëxporteerde applicatie wordt gebruikt door de ShiVa Authoring tool, die hierna wordt besproken.
Het belangrijkste doel van de ShiVa Authoring-tool is om een applicatie, gecreëerd via de ShiVa-editor, te converteren naar een platformspecifieke applicatie die kan worden ingezet op een bepaald apparaat (bijvoorbeeld iPhone, iPad of Android-telefoon). Bepaalde beperkingen zijn van toepassing op het besturingssysteem van de machine waarop de ShiVa Authoring-tool draait en het doelapparaat voor conversie. De ShiVa Authoring-tool die op een Windows-computer draait, kan bijvoorbeeld geen iPad- of iPhone-applicatie genereren. Tijdens de ontwikkeling van de Simulator hebben we een Windows-machine voor The ShiVa Editor gebruikt. Om de Android Simulator-applicatie te maken, hebben we ook een Windows-machine gebruikt om de ShiVa Authoring Tool uit te voeren. Aan de andere kant hebben we voor het maken van de iOS Simulator-applicaties, voor iPhone en iPad, een Mac OS-machine gebruikt om de ShiVa Authoring Tool te gebruiken.
Enkele van de basisacties die u met de ShiVa Authoring-tool kunt uitvoeren, zijn de volgende.
Selecteer Authoring Platform: voor de doeleinden van deze reeks zijn de drie platformopties waarin wij geïnteresseerd zijn iPhone, iPad en Android. Let op: voor iPhone en iPad moet de ShiVa Authoring Tool op een Mac OS-computer worden uitgevoerd.
Importeren: importeer de applicatie (een bestand met stk extensie) die geëxporteerd werd via de ShiVa Editor.
Build: bij het ontwerpen voor Android, zullen we de ShiVa Authoring Tool configureren om een Android APK-bestand te genereren dat direct kan worden geïmplementeerd op een compatibel Android-apparaat. Bij het ontwerpen voor de iPhone, zullen we de ShiVa Authoring Tool configureren om een Xcode-project voor iPhone-ontwikkeling te genereren. Vervolgens kan iemand het project in Xcode bouwen en op een aangesloten apparaat implementeren (we hebben eigenlijk een iPod touch-apparaat gebruikt om te testen in plaats van een iPhone). Op dezelfde manier zullen we bij het ontwerpen voor de iPad de ShiVa Authoring Tool configureren om een Xcode-project voor iPad-ontwikkeling te genereren. Vervolgens kan iemand het project in Xcode bouwen en op een aangesloten iPad implementeren.
Voor elk platform biedt de ShiVa Authoring Tool enigszins verschillende opties om zijn eindproduct te genereren. Wanneer u bijvoorbeeld voor Android ontwerpt, kunt u een Eclipse-project genereren in plaats van een Android-uitvoerbaar bestand (zoals hierboven vermeld, hebben we ervoor gekozen om een Android-uitvoerbaar bestand in deze serie te genereren).
Op dezelfde manier kan voor iPhone of iPad een uitvoerbaar bestand voor distributie worden gegenereerd in plaats van een Xcode-project te genereren (zoals eerder vermeld, kozen we ervoor om Xcode-projecten in deze serie te genereren). Raadpleeg de gebruikershandleiding van de ShiVa Authoring Tool voor meer informatie.
Hieronder volgt een lijst met configuraties die we hebben gebruikt bij het ontwikkelen van de Simulator-app voor deze serie. Raadpleeg de Shiva3D-documentatie die wordt beschreven in http://www.stonetrip.com/developer/doc/editor/information/hardware en http://www.stonetrip.com/developer/doc/authoringtool/installation voor aanvullende vereisten en vereisten..
Besturingssysteem van Windows: Windows XP
Merk op dat ons belangrijkste doel in deze reeks Android 2.2 is waarvoor de applicatie is getest. Shiva 3D Authoring Tool versie 1.1 ondersteunt echter ook Android 2.3, API-niveau: 9 en Android 2.3.3, API-niveau: 10.
In dit gedeelte geven we een beschrijving van de bestanden in het archiefbestand bij dit artikel.
Dit gedeelte geeft een overzicht van de vluchtdynamiek die in de toepassing zal worden gesimuleerd.
De algemene instelling voor de vlucht is een vierkant terrein van 4.096 x 4.096 eenheden lang aan elke kant (voor een bespreking van de term 'eenheid' zie de paragraaf met de naam 'Eenheden en variabelen' in deel 4 van deze reeks). De driedimensionale coördinaten bevinden zich in het midden van het terrein. Een bovenaanzicht van het terrein wordt hieronder getoond. Merk op dat de pijl het positieve gedeelte van een as aangeeft. Ook duidt de stip binnen de cirkel die de Y-as representeert aan dat het positieve gedeelte van de Y-as tegenovergesteld is aan, d.w.z. weg van, het terrein. Bekijk uit de figuur dat de Y-as de verticale as is, terwijl de X- en Z-assen de horizontale assen zijn die het tweedimensionale vlak weergeven waarop het terrein ligt.
Aanvankelijk is het vliegtuig dat we simuleren op (x, y, z) = (0,50,2050) en de reisrichting is rechtdoor.
Merk op dat de simulatie het vlak niet zal weergeven. In plaats daarvan 'zit' de gebruiker in de cockpit en ziet hij de omgeving (het terrein en de lucht) vanuit de cockpit zoals een piloot zou zien. De onderstaande figuur geeft de omgeving weer vanuit het perspectief van de piloot aan het begin van de simulatie (in de simulatie wordt het coördinatensysteem niet aan de gebruiker getoond). De verhogingen op het terrein veranderen tussen, ongeveer, een maximum van 34 eenheden en een minimum van -34 eenheden.
De Simulator voert vier eenvoudige manoeuvres uit: een pitchmanoeuvre om omhoog of omlaag te gaan en een gebaande bochtmanoeuvre om links of rechts te gaan.
Laten we eerst de toonhoogte manoeuvre uitleggen. Zoals hieronder getoond, is de hellingshoek de rotatiehoek rond de laterale as die door het vlak loopt van vleugeltip naar vleugeltip (http://en.wikipedia.org/wiki/Aircraft_principal_axes).
In de onderstaande figuur ziet u de volgorde van de toonhoogtemanoeuvre wanneer het vliegtuig omhoog gaat.
Aanvankelijk rijdt het vliegtuig rechtdoor parallel aan de grond, wat een stabiele toestand is. Als de toonhoogte start, begint de neus van het vliegtuig omhoog te gaan. Tegelijkertijd begint het vliegtuig hoogte te winnen. Op een bepaald moment bereikt de hellingshoek een maximum. Vanaf dat punt begint de neus van het vliegtuig naar beneden te gaan, maar het vliegtuig blijft hoogte krijgen. De neus van het vlak blijft dalen tot de spoedhoek 0 bereikt, d.w.z. het vlak bereikt opnieuw de stabiele toestand. Vanaf dat moment behoudt het vliegtuig zijn hoogte. Als gevolg van deze manoeuvre heeft het vliegtuig hoogte bereikt tussen de twee steady-state condities zoals hieronder getoond.
De toonhoogte-manoeuvre wanneer het vlak naar beneden gaat is symmetrisch ten opzichte van het bovenstaande. Aanvankelijk reist het vliegtuig rechtdoor. Wanneer de toonhoogte start, begint de neus van het vliegtuig naar beneden te gaan en begint het vliegtuig hoogte te verliezen. Op een bepaald moment bereikt de hellingshoek een minimum. Vanaf dat punt begint de neus van het vliegtuig omhoog te gaan, maar het vliegtuig blijft hoogte verliezen. De neus van het vlak blijft stijgen totdat de spoedhoek 0 bereikt, d.w.z. het vlak bereikt opnieuw de stationaire toestand. Vanaf dat moment behoudt het vliegtuig zijn hoogte. Als gevolg van deze manoeuvre heeft het vliegtuig hoogte verloren tussen de twee stationaire condities.
Laten we nu de geboekte afslag beschrijven. Zoals hieronder wordt weergegeven, is de rol (gelijk aan de bank) de rotatiehoek rond de lengteas die door het vlak loopt van neus naar staart. (Http://en.wikipedia.org/wiki/Aircraft_principal_axes)
In de onderstaande afbeelding ziet u de volgorde van een uitgezette linkerbochtmanoeuvre.
Aanvankelijk reist het vliegtuig rechtdoor, wat een stabiele toestand is. Wanneer de manoeuvre start, neemt de hoek van de bank toe en begint het vliegtuig naar links te draaien. Op een bepaald punt bereikt de hoek van de bank een maximum. Vanaf dat punt neemt de hoek van de bank af, maar het vliegtuig blijft naar links draaien. De hoek van de bank blijft dalen totdat hij 0 bereikt, d.w.z. deze bereikt opnieuw de evenwichtstoestand. Vanaf dat moment blijft het vliegtuig rechtdoor gaan. Als resultaat van deze manoeuvre is het vlak van richting veranderd naar links tussen de twee stabiele condities zoals hieronder weergegeven.
De ingeslagen bocht naar rechts is symmetrisch ten opzichte van het bovenstaande. Aanvankelijk reist het vliegtuig rechtdoor, wat een stabiele toestand is. Wanneer de manoeuvre start, neemt de hoek van de bank af en begint het vlak naar rechts te draaien. Op een bepaald punt bereikt de hoek van de bank een minimum. Vanaf dat punt neemt de hoek van de bank toe, maar het vliegtuig blijft naar rechts draaien. De hoek van de bank blijft toenemen tot 0 bereikt is, d.w.z. weer de stabiele toestand bereikt. Vanaf dat moment blijft het vliegtuig rechtdoor gaan. Als gevolg van deze manoeuvre is het vlak tussen de twee stationaire condities van richting veranderd.
In werkelijkheid konden vliegtuigen tegelijkertijd verfijndere manoeuvres uitvoeren, zoals bankieren en werpen. Voor de eenvoud, ons vliegtuig zal slechts een van die op een bepaald moment uitvoeren. Het toevoegen van geavanceerde manoeuvres aan de simulator is geen moeilijke taak en wordt overgelaten aan de geïnteresseerde lezer als een oefening.
Om de beweging van het vlak in driedimensionale coördinaten te simuleren, gebruiken we een vereenvoudigd model zoals hieronder beschreven.
Tijdens de pitchmanoeuvre, als het vlak omhoog gaat (respectievelijk omlaag gaat), zal de applicatiecode de waarde van Y-coördinaat met een vaste waarde verhogen (verlagen) respectievelijk op elk frame van de simulatie onafhankelijk van de pitch-hoek. De Y-coördinaat van het vliegtuig is te allen tijde vastgesteld, behalve tijdens een pitchmanoeuvre.
Tijdens de opgerichte bochtmanoeuvre, als een vlak naar links draait (rechts, respectievelijk), zal de applicatiecode de rotatie van het vlak rond de Y-as met een vaste hoeveelheid verhogen (verlagen, respectievelijk) in elk frame van de simulatie.
Vervolgens worden de X- en Z-coördinaten van het vlak berekend op elk frame met behulp van twee variabelen, V, snelheid van het vlak en Yg, rotatie van het vlak rond de Y-as, hieronder weergegeven:
Uit de bovenstaande figuur is eenvoudig te zien dat de snelheid van het vlak langs de X- en Z-as respectievelijk -V * sin (Yg) en -V * cos (Yg) is. In elk frame van de simulatie verkrijgt de toepassingscode Yg via een API-aanroep en berekent die snelheden. Vervolgens verkrijgt het de huidige X- en Z-coördinaten van het vlak en stelt het de nieuwe X- en Z-coördinaten in op basis van de berekende snelheden. De grootte van de snelheid is constant gedurende de simulatie.
In deel 1 van deze serie introduceerden we de simulator-applicatie genaamd Simulator en legden we het ontwikkelingsproces uit dat we volgden tijdens het maken van de Simulator. We hebben ook de inhoud van het downloadarchief bij dit artikel beschreven. Ten slotte hebben we de basisvluchtmanoeuvres geïntroduceerd die in de toepassing zijn gesimuleerd. In deel 2 zullen we beginnen met het beschrijven van hoe het spel te ontwikkelen met behulp van de ShiVa-editor.