Autor Wątek: Ageia PhysX - takie małe pytanie [rozwiązane]  (Przeczytany 1703 razy)

Offline Drakon

  • Użytkownik
    • Drakon place

# Luty 06, 2007, 22:22:03
Robie mały projekcik z wykorzystaniem Ageia PhysX - poczytałem tutoriale i zacząłem pisać... niby ładnie pięknie wszystko ok ale zaczęły się schody przy renderowaniu moich obiektów... Stworzyłem sobie klasę Box, tworze sobie boxy na scenie,dodaje do obiektu vector, jade po wszystkich i wywołuje funkcję Render. Niby ładnie i pięknie ale co jakiś czas aplikacja mi się zawiesza pokazując błąd... w funkcji DrawBox

void Box::DrawBox()
{

NxShape*const* shapes = actor->getShapes();
NxU32 nShapes = actor->getNbShapes();


while (nShapes--)
{

shape = shapes[nShapes];
NxMat34 pose = shape->getGlobalPose();  // <---- tutaj wskazuje na błąd.....
glPushMatrix();
SetupGLMatrix(pose.t, pose.M);
NxVec3 boxDim = shape->isBox()->getDimensions();
glScalef(boxDim.x, boxDim.y, boxDim.z);
Box::RenderBox();
glPopMatrix();
}
}

 debugując błąd dostałem taki wynik

+ actor 0x00000000 {userData=??? } NxActor *
+ shapes 0xcccccccc NxShape * const *
+ this 0x022716e8 {actor=0x00000000 {userData=??? } shape=0xcdcdcdcd {userData=??? appData=??? } actorDesc={shapes={first=0x02271898 last=0x0227189c memEnd=0x022718a0 ...} } ...} Box * const

chwilowo skończyły mi się pomysły co może być przyczyną.... Może jest tutaj ktoś kto miał podobny problem albo wie jak temu zaradzić...

Konstruktor wygląda tak :

Box::Box(NxScene* Scene,NxVec3 pos,NxVec3 d,NxReal density)
{
//rozmiar obiektu
dim = d;

boxDesc.dimensions.set(dim.x,dim.y,dim.z);
boxDesc.localPose.t = NxVec3(0,dim.y,0);
actorDesc.shapes.pushBack(&boxDesc);

//
if(density)
{
         actorDesc.body = &bodyDesc;
//masa
actorDesc.density = density;
}else
{
actorDesc.body = NULL;
}

//pozycja
actorDesc.globalPose.t = pos;

    //tworze aktora

actor = Scene->createActor(actorDesc);

//some texture
Box::LoadGLTextures();

}

a zmienne z pliku .h to

NxActor* actor;
NxShape* shape;
NxActorDesc actorDesc;
NxBodyDesc bodyDesc;

NxVec3 dim;

NxBoxShapeDesc boxDesc;

Przy pisaniu kodu wzorowałem się mocno na tutorialach więc dziwie się ze nie działa... albo przeoczyłem jakąś ważną rzecz...
« Ostatnia zmiana: Luty 08, 2007, 01:00:25 wysłana przez Drakon »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

st3tc

  • Gość
# Luty 06, 2007, 22:37:19
W ogóle nie sprawdzasz czy aktor się utworzył. W tym co podałeś jest napisane że jego adres to 0x00000000 (czyli NULL).
Sprawdz sobie przed tworzeniem aktora deskryptorek (metoda isValid() ).
« Ostatnia zmiana: Luty 06, 2007, 22:47:27 wysłana przez st3tc »

Offline Drakon

  • Użytkownik
    • Drakon place

# Luty 06, 2007, 23:06:07
aaaaaa głupi ja....  ::) hehe

dziękuje bardzo za podpowiedź :) już sprawdzam czy aktor został utworzony i ładnie wszystko śmiga :)