PC World
czwartek 4 grudnia 2008
Wydanie: Maj 2008

Archiwum

PhysX & Direct3D

A A A rozmiar czcionki
Dzisiejsze gry komputerowe, oprócz ładnie prezentującego się świata 3D, mają do zaoferowania graczom także rzeczywistą interakcję niemal z każdym napotkanym obiektem. Jest to możliwe dzięki nowoczesnym silnikom fizycznym, takim jak Havok i PhysX. Przekonajmy się, ile pracy wymaga dodanie do aplikacji 3D odrobiny realistycznego ruchu i funkcjonowania przedmiotów.


Jaki jest nasz cel?

Kliknij, aby powiększyćZrzut ekranu uruchomionej aplikacji 3D, symulującej upadek dziesięciu drewnianych skrzyń.
Naszym zadaniem jest utworzenie aplikacji, która będzie symulować upadek dziesięciu drewnianych skrzyń (rys. 1). Upuścimy je z pewnej wysokości na płaską powierzchnie i będziemy obserwować, co się stanie. Do utworzenia trójwymiarowej sceny wykorzystamy interfejs Direct3D, natomiast za symulację realistycznego ruchu będzie odpowiadać biblioteka PhysX, którą zintegrujemy z Direct3D. W artykule skupimy się wyłącznie na utworzeniu symulacji fizycznej, całą resztę związaną z renderowaniem grafiki 3D pominiemy.

Utworzenie sceny fizyki

Tworzenie środowiska, w którym będzie przeprowadzana fizyczna symulacja trójwymiarowego świata, rozpoczynamy od przygotowania głównego obiektu PhysX SDK.


NxPhysicsSDK* gPhysXSDK = 0;
gPhysXSDK = NxCreatePhysicsSDK(NX_PHYSICS_SDK_VERSION);


Teraz możemy ustawić podstawowy parametr symulacji. Jest nim grubość skóry obiektów. Skóra określa, w jakim stopniu obiekty mogą się nawzajem przenikać (rys. 2 i 3). Ustawiając globalną wartość grubości skóry, sprawimy, że będzie ona automatycznie przypisywana do każdego obiektu, który dodamy do sceny. Biblioteka umożliwia dodatkowo indywidualną zmianę grubości skóry każdego obiektu. Nie zaleca się ustawiania zerowej grubości, bo może to powodować niewłaściwe funkcjonowanie obiektów. Zbyt gruba skóra również ma swoje wady, przede wszystkim generuje rzadko pożądany efekt zanurzania się jednego obiektu w drugi. W naszej aplikacji ustawimy 0.01, czyli 1cm. Domyślnie parametr NX_SKIN_WIDTH jest ustawiony na 0.025 (2,5 cm):

gPhysXSDK->setParameter(NX_SKIN_WIDTH, 0.01f);


Kliknij, aby powiększyćPo lewej stronie widoczne jest niewłaściwe dopasowanie rozmiaru obiektu w scenie Direct3D i PhysX. Obiekt w scenie Direct3D z jakichś powodów jest dwukrotnie mniejszy. Jedna skrzynia powinna leżeć swobodnie na drugiej, tymczasem lewituje w powietrzu.
Przechodzimy do tworzenia sceny. Jest to obiekt, który będzie przechowywał informacje o wszystkich obiektach biorących udział w symulacji. Każdy pojedynczy obiekt dodany do sceny nazywamy aktorem. Scenę tworzymy z poziomu głównego obiektu PhysX. Najpierw należy utworzyć odpowiednią zmienną do zapamiętania adresu sceny.

NxScene* gScena = 0;

Kolejny krok to przygotowanie struktury opisującej właściwości sceny - grawitację i typ symulacji. Grawitację opisujemy za pomocą wektora, który wskazuje kierunek jej oddziaływania. Wybieramy dobrze znaną ze szkoły wartość przyśpieszenia 9,8 m/s, działającego prosto w dół na wszystko, co się znajduje w powietrzu. Typ symulacji określa, czy scena będzie obliczana sprzętowo (NX_SIMULATION_HW), czy metodą programową (NX_SIMULATION_SW). Do symulacji programowej jest zaprzęgany procesor, natomiast do sprzętowej niezbędny będzie specjalny akcelerator fizyki wyposażony w PPU.


NxSceneDesc opisSceny;

NxVec3 grawitacja(0, -9.8f, 0);

opisSceny.gravity = grawitacja;
opisSceny.simType = NX_SIMULATION_SW;


Teraz możemy utworzyć scenę. Służy do tego funkcja createScene. Jeżeli miałeś kontakt z DirectX API, z pewnością zdążyłeś już zauważyć pewną analogię - tworzenie i niszczenie obiektów w bibliotece PhysX odbywa się na podobnych zasadach.

gScena = gPhysXSDK->createScene(opisSceny);


Wymagania i narzędzia
Aby skorzystać z porad zawartych w artykule, musisz opanować przynajmniej podstawy programowania w języku C++. Ogólna wiedza na temat grafiki 3D oraz doświadczenie w kodowaniu z wykorzystaniem biblioteki DirectX Graphics. Poza tym powinieneś zaopatrzyć się w takie narzędzia jak DirectX SDK 9, PhysX SDK 2.7 oraz Visual Studio 2005. Znajdziesz je na oficjalnej stronie www.microsoft.com i www.ageia.com oraz na płycie DVD dołączonej do naszego pisma. Aby uruchomić aplikacje korzystające z biblioteki PhysX, musisz ponadto zainstalować w systemie odpowiednie biblioteki uruchomieniowe Ageia.

Wystaw ocenę: 
 Średnia ocena: 
(Głosów: )
Wersja do wydruku Powiadom znajomego Podyskutuj na forum Odsłuchaj materiał RSS Wykop to! Delicje

Komentarze

Redakcja PC World nie ponosi odpowiedzialności za wypowiedzi Internautów opublikowane na stronach serwisu oraz zastrzega sobie prawo do redagowania, skracania bądź usuwania komentarzy zawierających treści zabronione przez prawo, uznawane za obraźliwie lub naruszające zasady współżycia społecznego. Osoby zamieszczające wypowiedzi naruszające prawo lub prawem chronione dobra osób trzecich mogą ponieść z tego tytułu odpowiedzialność karną lub cywilną.

Liseeee

  • ocena: brak oceny
  • IP: 89.76.71.248
  • 07-05-2008, 17:28

Spoko wypróbuje sobie dzisiaj. Mam nadzieje ze na VS 2008 nie będzie żadnych problemów. Btw. szkoda , że nie ma binarki do tego...

invision

  • ocena: 3
  • IP: 193.33.125.240
  • 04-10-2008, 16:26

Nawet OK, szkoda tylko, że nie ma gotowych projektów, to by znacznie ułatwiło rozumienie treści!




wyżej niżej

POPULARNE TAGI

wyżej niżej

MULTIMEDIA



IDG
© copyright 1999-2008 IDG Poland SA
04-204 Warszawa ul. Jordanowska 12
tel. (+48 22) 321 78 00  fax (+48 22) 321 78 88