[DUVIDA] Programação OPENGL

4 respostas
J

Boa noite, estou com um problema ao desenvolver uma aplicação utilizando openGL…

Bom, deixa eu explicar…Tenho um lago, onde peixes nadam, quando este peixe chegar na borda ele deve girar e começar a nadar para o outro lado…Descobri que o X limite do lago, é 1500…Portanto, quando chegar lá deve girar…

Então seria algo do tipo…

if(posX >= 1500) gl.glScaled(1,-1,1);

Não deveria ser assim? Assim, ele giraria e continuaria a nadar…Já tentei todos os scales, este, ele vai para o alto da interface, outro ele fica a mesma coisa, e outro ele gira, mas vai para o outro lado da tela…Alguém sabe o que posso fazer??

Muito obrigado :slight_smile:

4 Respostas

ViniGodoy

Você pode dar um glRotate() de 90º.

Mas o ideal mesmo é que seu OpenGL só desenhe o estado de um objeto peixe. Não que vc use o opengl para a lógica da sua aplicação.

J

Hm…Sim, só que se eu der o rotate de 90º ele vai virar para baixo…E se for de 180º o translate que estou dando para o movimento, vai ficar errado tipo…o movimento é assim…posX += 5, translate(posX)…Faz com que ele tenha movimento constante, se eu der um movimento de 180º o x vai continuar o antigo e ele vai voltar pro lugar…Não sei deu para entender…

J

Bom dia,

Se o movimento é posX += 5, você coloca:

posX += var;

quando quiser mudar o movimento vc faz:

var *= -1;

Idem para Y e os demais;

Valeu.

ViniGodoy

A solução do James é mais próxima do que eu falei.

Você não deve usar o OpenGL para controlar lógica. Rotacionar o objeto é um atributo do objeto sendo rotacionado, não uma característica gráfica. Você rotaciona objetos no OpenGL apenas para representar a rotação que seu objeto assumiu.

O que quero dizer com isso? Seus peixes devem ter um atributo, que é um vetor indicando a direção para qual os peixes estão seguindo. E é esse vetor que deve ser rotacionado.

Criado 1 de maio de 2010
Ultima resposta 2 de mai. de 2010
Respostas 4
Participantes 3