Ir ao conteúdo
  • Cadastre-se
Gugamail

Dúvida OpenGL

Recommended Posts

Fala pessoal...

Seguinte, sou novato em OpenGL. Estou precisando fazer um trablaho para a faculdade, mas estou ocm sérias dúvidas.

Preciso fazer uma esfera. Quando apertar as setas do teclado, ela deve girar para a direção correspondente da seta. Porém, com um detalhe: Quem deve girar é a "câmera" e não a esfera. Ou seja, não posso usar rotate na esfera.

Será que poderiam me ajudar?

Segue o código que estou trabalhando:


#include<math.h>
GLfloat angle,fAspect;
GLdouble ang=0,angx=0,angy=0,angz=200,centrox=0,centroy=0,centroz=0,posx=0,posy=1,posz=0;
void Desenha()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0,0.0,1.0f);
glutWireSphere(50,50,50);
glutSwapBuffers();
}

void Inicializa()
{
glClearColor(0,0,0,1);
angle=45;
}

void EspecificaParametrosVisualizacao()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(angle,fAspect,0.1,500); //angulo de visualização,define relação de em que angulo ele está, 0.1 e 500 definem a posição de corte, o que vai aparecer na camera
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(angx,angy,angz,centrox,centroy,centroz,posx,posy,posz);

}
void teclado(int key, int x, int y)
{
switch(key)
{

case GLUT_KEY_LEFT :

posz = 200*cos(ang);
posx = 200*sin(ang);
ang += 0.1;
break;
case GLUT_KEY_RIGHT:

posz = 200*cos(ang);
posx = 200*sin(ang);
ang -= 0.1;
break;
case GLUT_KEY_UP :

posy = 200*cos(ang);
posz = 200*sin(ang);
ang += 0.1;
break;
case GLUT_KEY_DOWN :

posy = 200*cos(ang);
posz = 200*sin(ang);
ang -= 0.1;
break;
}
EspecificaParametrosVisualizacao();
glutPostRedisplay();
}
void AlteraTamanhoJanela(int w,int h)
{
if (h==0)
h=1;
glViewport(0,0,w,h);
fAspect=(GLfloat)w/(GLfloat)h;
EspecificaParametrosVisualizacao();
}
void GerenciaMouse(int button, int state,int x,int y)
{
if (button==GLUT_LEFT_BUTTON)
if (state==GLUT_DOWN){
if (angle>=10)
angle-=5;
}
if (button==GLUT_RIGHT_BUTTON)
if (state==GLUT_DOWN){
if (angle<=130)
angle+=5;
}
EspecificaParametrosVisualizacao();
glutPostRedisplay();
}
void main()
{
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(350,300);
glutCreateWindow("proj_teste3d");
glutDisplayFunc(Desenha);//resposta a evento de tela
glutReshapeFunc(AlteraTamanhoJanela);
glutMouseFunc(GerenciaMouse);
glutSpecialFunc(teclado);
Inicializa();
glutMainLoop();
}
#include<GL/glut.h> 

Editado por Goliathvv
[spoiler][code][/code][/spoiler] Utilize as tags [code] e [spoiler] para destacar o trecho de código e tornar o texto mais le

Compartilhar este post


Link para o post
Compartilhar em outros sites

pra funcionar o code acima é so no na funçao que recebe do teclado você trocar case GLUT_KEY_LEFT : por, porexemplo, case 'a' :

ou seja trocar as setas por wsad por exemplo...

n sei porque acontece isso, mas se colocar assim funciona ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×