Sou programador iniciante e estou criando um projeto que me permite andar pelas salas por meio de uma câmera em primeira pessoa. Até agora, tenho os prédios desenhados, mas agora estou preso e não sei como fazer uma câmera em primeira pessoa para me permitir andar por aí.
Alguém poderia me indicar uma classe de câmera que eu poderia usar ou algum código útil?
Respostas:
Aqui estão algumas dicas sobre a rotação da câmera (mouselook). Depois de implementar de forma ingênua uma classe de câmera do zero, descobri que precisava fazer alguns ajustes adicionais para obter um bom comportamento rotacional:
Redefina as coordenadas do mouse para o centro da tela em cada quadro, para que o mouse nunca fique preso nas bordas da tela
Mantenha o vetor "para cima" da câmera (desaprovar rolo) e recompute o vetor "para o lado"
Não permitir olhar para cima além do eixo vertical + y ou para baixo além do eixo -y (muito acima / abaixo)
Corrija a ordem das rotações (para cima / para baixo primeiro e depois para a esquerda / direita)
Renormalize os vetores "para cima", "mira" e "lateralmente" em cada quadro
Espero que você possa usar parte desse código para sua vantagem:
Observe que:
mouseAxisX e mouseAxisY são definidos como +/- 1, dependendo se você deseja que o eixo x ou y seja invertido. Normalmente, os jogos oferecem essa opção pelo menos para o eixo vertical.
MIN_UPWARDS_TILT_DEG é definido como 1,0 graus (para que o espectador possa olhar de -89 graus para baixo a +89 graus para cima, o que parece bastante convincente como uma faixa vertical completa de 180 graus - os 2 graus ausentes nos extremos são desprezíveis) .
camera.aim_, camera.right_ e camera.up_ são, obviamente, vetores 3D, e o método rotateAboutAxis () você pode juntar na wikipedia e em qualquer número de fontes online. Y_AXIS é um vetor constante fixo (0,1,0).
ASSERT_ORTHONORMAL () é uma verificação de integridade apenas no modo de depuração, que nunca é compilada no modo otimizado / liberação.
Pedimos desculpas antecipadamente pelo código do estilo C ... então, novamente, aqui você está recebendo conselhos de um cara chamado Mediocritus! ; ^)
fonte
Existem várias maneiras de fazer isso (consulte os tutoriais aqui , aqui e aqui, por exemplo, com muito mais disponível na Internet via Google). A tecnologia usada nos recursos que você pode encontrar online pode variar um pouco (em termos de D3D, XNA, OpenGL etc.), mas os princípios subjacentes serão os mesmos:
Você pode optar por armazenar os vetores diretamente ou recalcular a matriz de vista subjacente sempre que precisar e preferir. Há muita flexibilidade na técnica; portanto, se você precisar de ajuda além das etapas gerais, poderá postar uma nova pergunta com uma consulta mais específica.
fonte
Para uma referência específica a uma implementação do sistema de câmera usando o Direct3D, recomendo este artigo: http://www.toymaker.info/Games/html/camera.html . O autor também descreve outros métodos e recursos que podem ser usados para expandir a implementação.
fonte