Autor Wątek: Robienie gry na demku z Bullet'a  (Przeczytany 2612 razy)

Offline xardas97260

  • Użytkownik

# Wrzesień 25, 2010, 12:00:35
Witam. Postanowiłem że jednak wykorzystam bullet'a. Wersja testowa mojej gry będzie bazować na VehicleDemo z bullet'a. I teraz mam takie pytania:
1. Zauważyłem pewien problem, jak macie to demko, to odpalcie je, i zobaczcie jak skręcają się koła przednie - Jak    widać po pierwsze, jak puścimy klawisz, nie wracają na pierwotną pozycję, a jeśli już skręcimy koło, i chcemy jeszcze raz je skręcić, to jakby rusza się może z milimetr, zacina się na jakąś sekundę, i przekręca dopiero. Jak to wyeliminować?
2. A teraz takie lamerskie pytanie, wynikające z tego, że nigdy nie kodziłem na jakimś silniku (tak naprawdę to ja tą grę miałem praktycznie zrobiną, tyle że na c# i XNA, ale uznałem że ją wywale, i napiszę od początku, ale w czymś z prawdziwego zdarzenia - tak padł wybór na c++ i bullet'a). A co do pytania, to jakie formaty modeli obsługuje bullet? (w xna było prościej, poprostu dawało się plik .fbx i po problemie). I teraz właściwie nie wiem, czy pytanie powinien zadać jakie formaty modeli obsługuje bullet, czy -||- obsługuje OpenGL - bo to jest silnik renderujący.
Dzięki za odp, i wybaczcie że pisze wątek za wątkiem ; )

Offline Mr. Spam

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

Offline Avaj

  • Użytkownik

# Wrzesień 25, 2010, 12:03:01
Bullet jest silnikiem fizyki, go nie obchodzą twoje modele, masz mu dać najwyżej jakąś paczkę trójkątów, bounding boxy i macierze, ale rysujesz sobie sam.

Offline xardas97260

  • Użytkownik

# Wrzesień 25, 2010, 12:05:47
No, czyli ze moję wątpliwości się sprawdziły. Jakie formaty obsługuje opengl, to już sam wyczytam. Więc, pozostało tylko 1 pytanie

Offline djsmtih

  • Użytkownik

# Wrzesień 25, 2010, 12:06:36
Nie chce Cie martwić ale po twoich tematach obawiam sie ,że porywasz się z motyką na słońce :)

Offline xardas97260

  • Użytkownik

# Wrzesień 25, 2010, 12:08:46
Wiem że to tak wygląda, ale uwierzcie nie. C++ cały czas się uczę, a co do ogólnie programowania, to mam doświadczenie. Nie że programuję od 12 lat, ale od tych 2. Poprostu to tak dlatego wygląda, bo nigdy nie robiłem nic na żadnym silniku tego typu. A co z pierwszym pytaniem :P ?
« Ostatnia zmiana: Wrzesień 25, 2010, 12:12:27 wysłana przez xardas97260 »

Offline Dab

  • Redaktor
    • blog

# Wrzesień 25, 2010, 12:26:21
Jakie formaty obsługuje opengl, to już sam wyczytam.

Daj znać, jak coś znajdziesz. :D (podpowiem: obsługuje format ZTT -- zupa z trójkątów :) )

Offline xardas97260

  • Użytkownik

# Wrzesień 25, 2010, 12:29:19
Ja będę używał obj loader'a. (Wiem ze to nie wchodzi w skład opengl'a)
Edit: Naprawde nikt nie zna odpowiedzi na moje 1 pytanie?

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Wrzesień 25, 2010, 12:35:00
Oj no pewnie dlatego ze na szytwno jest zmiana kata skrecania z jakims clampingiem :) i pewnie jako ze jest sztywny kat skrecania to nie idzie to po DT a jak nie idzie po DeltaTime to sie moga takie cuda dziac :)

Wklej tu kawalek kodu odpowiedzialny za ustalanie kata skrecania kola i ew jego apply w to kolo :) zobacze kod powiem ci co jest nie halo :p

Offline xardas97260

  • Użytkownik

# Wrzesień 25, 2010, 12:39:24
Kod ma 627 lini, więc daj mi z 10 minut. Jak znajde to przedytuje ten post
switch (key)
    {
    case GLUT_KEY_LEFT :
{
gVehicleSteering += steeringIncrement;
if ( gVehicleSteering > steeringClamp)
gVehicleSteering = steeringClamp;

break;
}
    case GLUT_KEY_RIGHT :
{
gVehicleSteering -= steeringIncrement;
if ( gVehicleSteering < -steeringClamp)
gVehicleSteering = -steeringClamp;

break;
Natomiast tutaj ponizej parametry kół i kilku innych rzeczy:
float gVehicleSteering = 0.f;
float steeringIncrement = 0.04f;
float steeringClamp = 0.3f;
float wheelRadius = 0.7f;
float wheelWidth = 0.4f;
float wheelFriction = 1000;//BT_LARGE_FLOAT;
float suspensionStiffness = 20.f;
float suspensionDamping = 2.3f;
float suspensionCompression = 4.4f;
float rollInfluence = 0.1f;//1.0f;
I kolejny kawałek kodu:
#ifdef FORCE_ZAXIS_UP
int rightIndex = 0;
int upIndex = 2;
int forwardIndex = 1;
btVector3 wheelDirectionCS0(0,0,-1);
btVector3 wheelAxleCS(1,0,0);
#else
int rightIndex = 0;
int upIndex = 1;
int forwardIndex = 2;
btVector3 wheelDirectionCS0(0,-1,0);
btVector3 wheelAxleCS(-1,0,0);
« Ostatnia zmiana: Wrzesień 25, 2010, 12:55:36 wysłana przez xardas97260 »

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Wrzesień 25, 2010, 13:07:41
no ok rzuca sie delta :) a raczje jej brak jeszcze jak bys dal kod kotry ten angle zamienia na cos przysfajalnego dla samego kola ;)

Offline xardas97260

  • Użytkownik

# Wrzesień 25, 2010, 15:20:10
Więc jak zmodyfikować kod, aby nie występował problem z pytania 1?

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Wrzesień 25, 2010, 16:01:06
no ale pokaz mi jeszcze ten kawalek kodu gdzie ten kat jest zameniany nie wiem na radiany dla skretu macierz obrotu? xD moze tam jest juz delta etc ;)

Offline xardas97260

  • Użytkownik

# Wrzesień 25, 2010, 16:04:35
Wiesz, tak będzie prościej - cały kod:
http://wklej.org/id/393253/

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Wrzesień 25, 2010, 16:07:36
Ok mam. Ciało tych funkcji poprosze:

wheelIndex = 0;
m_vehicle->setSteeringValue(gVehicleSteering,wheelIndex);
wheelIndex = 1;
m_vehicle->setSteeringValue(gVehicleSteering,wheelIndex);

Offline xardas97260

  • Użytkownik

# Wrzesień 25, 2010, 16:10:32
Dobra, wkelej na wklej wszystkie pliki jakie są w tym projekcie:
VehicleDemo.h: http://wklej.org/id/393264/
Main.cpp: http://wklej.org/id/393265/
I to wszystko. Pozostałe pliki to albo nagłówki bullet'a, albo pliki .cpp bullet'a
« Ostatnia zmiana: Wrzesień 25, 2010, 16:14:10 wysłana przez xardas97260 »