Gamestudio/A8 - Physik

Gamestudio/A8 enthält ein Physiksystem, das auf der PhysX™ Engine von nVIDIA basiert. Es ermöglicht ein realistisches Bewegungsverhalten von Modellen. Die Grundfunktionen unterstützen starre Körper (rigid bodies) und Gelenke (joints). Mit zusätzlichen PlugIns können verformbare Körper, Flüssigkeiten, Kleidung und viele andere Effekte unterstützt werden. Der Source-Code für die PhysX-Implementierung steht als Open Source zur Verfügung, so dasss Sie mit C++ Kenntnissen beliebige Zusatzfunktionen selbst integrieren können.

Da diese Art von Simulation CPU- bzw. GPU-intensiv ist, ist das Physikuntersystem per default abgeschaltet. Wenn Sie es verwenden wollen, inkludieren Sie den Header ackphysx.h und rufen physX_open() auf. Danach können Sie ein Level Laden und dynamische Physikobjekte für die Simulation registrieren. Dadurch wird die exklusive Bewegungskontrolle dieser Objekte auf die Engine übertragen und sie können nicht mehr über Positionsänderungen bewegt werden. Wenn Sie eine Physikentity nicht mehr brauchen, löschen Sie deren Registrierung oder schalten Sie das Physiksystem ab.

Functionen - Übersicht:

Es gibt vier Kategorien von Funktionen, die die Steuerung von physikalischen Objekten handhaben:
physX_ Globale Funktionen, die den Physik-Simulator öffnen oder schließen.
pX_ Globale Funktionen, die das Verhalten des Physiksimulators oder die simulierte Welt verändern.
pXent_

Physikalische Entityfunktionen, die auf nur eine Entity auf einmal einwirken.

pXcon_ Gelenk-Funktionen, die die Bewegung physikalischer Entities einschränken.

Einbinden der Physik in Ihr Game:

Machen Sie sich mit Spielphysik vertraut, indem Sie den PhysX Workshop im Tutorial durchlesen. Die grundlegenden Schritte, eine Physikentity einzurichten, sind:

Beispiel

#include <default.c>
#include <ackphysx.h>
function main() { physX_open(); level_load(""); // load an empty level vec_set(camera.x,vector(-100,0,30)); pXent_settype(NULL,PH_STATIC,PH_PLANE); // create a static plane at groundlevel zero ENTITY* ball = ent_create(SPHERE_MDL,vector(0,0,100),NULL); pXent_settype(ball,PH_RIGID,PH_SPHERE ); // create a ball pXent_setelasticity(ball,50); pXent_addvelcentral(ball,vector(0,-10,0)); // make it jump and roll sidewards while(1){ pX_pick(); // pick and move the ball with the cursor wait(1); } }

Publizieren einer PhysX Anwendung

Wenn Ihr publiziertes Projekt PhysX-Befehle verwendet, muss die aktuelle PhysX System Software von nVidia auf dem Zielsystem installiert sein. Das PhysX-Logo muss in Pressemitteilungen und auf Ihren Start oder Credit-Screens angezeigt werden. Der Standard-Startbildschirm enthält bereits das PhysX-Logo. Sie finden die detaillierten Anforderungen für das Publizieren in der PhysX EULA.

Zum Publizieren eines Physik-Games kopieren Sie folgendes in Ihren Ordner für publizierte Spiele: ackphysX.dll, PhysXLoader.dll, PhysXCooking.dll und NxCharacter.dll. Die erste Datei findet sich in acknex_plugins, die anderen drei im Gamestudio-Ordner. Normalerweise werden sie automatisch vom Publish-Prozess kopiert. Um sicherzustellen, dass der Endverbraucher die PhysX System Software auf dem Ziel-PC installiert hat, können Sie entweder einen Link zur nVidia Download-Seite (http://www.nvidia.com/object/physx_system_software.html) zur Verfügung stellen. Oder - besser - lassen Sie Ihre Anwendung selbst die Software installieren, z.B. durch einen exec_wait Befehl. Sie können die Installation unbemerkt mit der Befehlszeilenoption /quiet ausführen. Beispiele:

// installing PhysX from the application folder
function main()
{
  if (!physX_open()) {
    printf("Install PhysX System Software");
    exec_wait("PhysX_9.10.0224_SystemSoftware.exe","/quiet"); // insert the recent filename here
    printf("PhysX System Software installed!\nPlease restart your PC now!");
    sys_exit(NULL);
  }
  ...

// installing PhysX from the nVidia Website
function main()
{
  if (!physX_open()) {
    printf("Install PhysX System Software from the web");
    exec("http://www.nvidia.com/object/physx_system_software.html",NULL); 
    printf("After installing, please restart your PC!");
    sys_exit(NULL);
  }
  ...

Credits

NVIDIA PhysX, Copyright © 2009 NVIDIA Corporation. All rights reserved. AGEIA PhysX,
Copyright © 2002-2008 AGEIA Technologies, Inc. All rights reserved. NovodeX Physics SDK,
Copyright © 2001-2006 NovodeX. All rights reserved. http://www.NVIDIA.com.
PhysX Plugin implementation und Dokumentation von Chris Kahler (Chris3D).

Siehe auch:

physX_run, physX_open, physX_load, pXent_settype, pXcon_add...