Opengl Freeglut gra 3D - zapytania


(Tevez31) #1

Witam,

Piszę od 2 tygodni grę na zaliczenie przedmiotu. Mianowicie jest ona w podobieństwie do gry z Androida Speedx3D. 

Proszę o pomoc, udzielenie wsparcie w dwóch kwestiach:

  1. Mam kłopot z ustawieniem poruszania się kamery w pionie tzn. chodzi mi ze gdy wcisnę klawisz W to kamera porusza sie po osi Y a gdy S to w dół. Chodzi mi konkretnie aby omijać przeszkody w tunelu.

  2. Mam także kłopot z generowaniem losowym przeszkód. Otóż generują się one ale zaraz znikają - nie są w jednym miejscu. Ściślej mówiąc cały czas się przemieszczają a nie o to chodzi. Chciałbym uzyskać taki efekt żeby jak gracz ominie jakąś przeszkodę to następna generowała się w oddali itd.

Załączam skrawki mojego kodu:

void OnTimer(int id) {

 

glutTimerFunc(17, OnTimer, 0);

 

pragma region Ruch kamery

if (keystate['r']) {

player.velM = player.speed;

}

if (keystate['w']) {

//player.velZ = player.speed;

}

if (keystate['s']) {

//player.velZ = -player.speed;

}

if (keystate['a']) {

player.velS = -player.speed;

}

if (keystate['d']) {

player.velS = player.speed;

}

// Wektor prostopadły:

vec3 per;

per.x = -player.dir.z;

per.y = 0;

per.z = player.dir.x;

 

// Ruch przod/tyl:

player.pos.x += player.dir.x * player.velM * .1f;

if (free3DMovement) {

player.pos.y += player.dir.y * player.velM * .1f;

}

else {

player.pos.y = 1.0f;

}

player.pos.z += player.dir.z * player.velM * .1f;

 

// Ruch na boki:

player.pos.x += per.x * player.velS * .1f;

if (free3DMovement) {

player.pos.y += player.dir.y * player.velM * .1f;

}

else {

player.pos.y = 1.0f;

}

player.pos.z += per.z * player.velS * .1f;

 

//Ruch gora/dol

pragma endregion

 

void Kwadraty()

{

int ix,iz,iy;

glPushMatrix();

srand(time(NULL));

 

for(ix = -5.5; ix < 5.5;ix += rand()%6){

for(iz = 10; iz < 1000 ;iz += 10){

for(iy = -0.5; iy < 5.5 ;iy += rand()%10){

 

glPushMatrix();

//glTranslatef(ix, 0.5f, iz);

glTranslatef(ix, iy, iz);

 

glEnable(GL_TEXTURE_2D);

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

glBindTexture(GL_TEXTURE_2D, texCheckboard_linear_mm3);

 

glCallList(box);

glDisable(GL_TEXTURE_2D);

 

glPopMatrix();

}

}

}

 

glPopMatrix();

 

 

I funkcje Kwadraty() wywołuję w OnRender.

Pozdrawiam,