Como câmera OpenGL configuração para um jogo de corrida

votos
1

Preciso do fim de mostrar o polígono estrada (um retângulo 3.f * 100.f) com um ponto de fuga para uma estrada estar em 3/4 altura da janela ea borda estrada mais próxima como o lado de fundo de uma janela. Ver jogo Crazy Taxi para um exemplo do que eu gostaria de fazer.

Eu estou usando o iPhone SDK 3.1.2 padrão modelo de projeto OpenGL ES.

I a configuração da matriz de projecção como se segue:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustumf(-2.25f, 2.25f, -1.5f, 1.5f, 0.1f, 1000.0f);

Então eu uso glRotatef para ajustar para o modo paisagem e configuração da câmara.

glMatrixMode(GL_MODELVIEW);

glLoadIdentity (); glRotatef (-90, 0.0f, 0.0f, 1.0f);

const flutuador cameraAngle = 45.0f * M_PI / 180.0f; gluLookAt (0.0f, 2.0F, 0.0f, 0.0f, 0.0f, 100.0f, 0.0f, cos (cameraAngle), sin (cameraAngle));

Meu tira triângulo polígono estrada é assim:

static const GLfloat roadVertices[] = {

-1.5f, 0.0f, 0.0f, 1.5f, 0.0f, 0.0f, -1.5f, 0.0f, 100.0f, 1.5f, 0.0f, 100.0f,};

E eu não consigo encontrar os parâmetros certos para gluLookAt. Meu ponto de fuga está sempre no centro da tela.

Publicado 08/12/2009 em 16:51
fonte usuário
Em outras línguas...                            


1 respostas

votos
2

Você quer fazer isso em 3D genuíno? basicamente, o seu olhar no ponto é o centro da tela. O que você quer que seja é um quarto da tela abaixo do horizonte.

É possível trabalhar com isso, invertendo uma posição final por projecção e pela vista (essencialmente unprojecting).

Assumindo que os trechos de tela de -1.0f para 1.0f em x e -1.0f para 1.0f em y, então você quer o horizonte para ir para (0.0f, 0.5f). Isto significa que você precisa olhar para baixo pelo quarto da tela (ou seja -0.5f). Para um dado z (vamos aleatoriamente escolheu 0.5f). Então, se tomarmos a sua visão como você já definidos e uma matriz de "identidade", bem como a sua matriz de "projeção" você pode então passar isso através gluUnproject da seguinte forma:

GLdouble eyeX, eyeY, eyeZ;
gluUnproject( 0.0f, -0.5f, 0.5f, identity, view, projection, &eyeX, &eyeY, &eyeZ );

Você pode então ligar os seus valores olho para trás em gluLookAt e agora você vai estar a olhar para um ponto abaixo da superfície da estrada.

Tenho certeza de que existem inúmeras outras maneiras de fazê-lo, mas que se deve trabalhar ...

Respondeu 08/12/2009 em 17:18
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more