Ir ao conteúdo
  • Cadastre-se

OpenGL... Usando teclado


Posts recomendados

Boa tarde,

Estou iniciando no uso do opengl e não estou conseguindo utilizar as teclas para realizar movimentações no desenho... é um programa simples de uma casa e estou tentando movimentá-la.

O código está abaixo:

#include <windows.h>

#include <glut.h>

#include <stdlib.h>

#include <stdio.h>

GLint tx[12], ty[12], angulo[12];

GLfloat ex[12], ey[12];

GLint totalDeInstancias;

GLint instanciaSelecionada;

const int ESCAPE = 27;

GLint id_window;

void DesenhaCasa(void)

{

// Desenha um quadrado preenchido com a cor corrente

glLineWidth(3);

glBegin(GL_TRIANGLES);

glColor3f(0.0f, 0.0f, 1.0f);

glVertex2i(50,100);

glColor3f(1.0f, 0.0f, 0.0f);

glVertex2i(100,150);

glColor3f(0.0f, 0.0f, 1.0f);

glVertex2i(150,100);

glEnd();

glBegin(GL_LINE_LOOP);

glVertex2i(50,1);

glVertex2i(50,99);

glVertex2i(150,99);

glVertex2i(150,1);

glEnd();

}

// Função callback chamada para fazer o desenho

void Desenha(void)

{

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

// Limpa a janela de visualização com a cor de fundo especificada

glClear(GL_COLOR_BUFFER_BIT);

// Especifica que a cor corrente é vermelha

// R G B

glColor3f(1.0f, 0.0f, 0.0f);

glRotatef(0,0,0,1);

DesenhaCasa();

// Desenha as instâncias da casa

for (int i=0; i<totalDeInstancias; i++)

{

glPushMatrix();

glTranslatef(tx,ty,0.0f);

glScalef(ex,ey,1.0f);

glRotatef(angulo,0.0f,0.0f,1.0f);

DesenhaCasa();

glPopMatrix();

}

//Desenha os eixos cartesianos, para as cooredenadas da janela atual

glLineWidth(1.0);

glColor3f(1.0f, 1.0f, 1.0f);

glBegin(GL_LINES);

glVertex2i(-250, 0);

glVertex2i(250, 0);

glEnd();

glBegin(GL_LINES);

glVertex2i(0, -250);

glVertex2i(0, 250);

glEnd();

// Executa os comandos OpenGL

glFlush();

}

// Inicializa parâmetros de rendering

void Inicializa (void)

{

// Define a cor de fundo da janela de visualização como preta

glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

for (int i=0; i<12; i++)

{

tx = 0;

ty = 0;

angulo = 0;

ex = 1;

ey = 1;

}

totalDeInstancias = 0;

instanciaSelecionada = 0;

}

// Função callback chamada quando o tamanho da janela é alterado

void AlteraTamanhoJanela(GLsizei w, GLsizei h)

{

// Evita a divisao por zero

if(h == 0) h = 1;

// Especifica as dimensões da Viewport

glViewport(0, 0, w, h);

// Inicializa o sistema de coordenadas

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D (-250.0f, 250.0f, -250.0f, 250.0f);

}

void TeclasEspeciais(int key, int x, int y)

{

switch (key)

{

case GLUT_KEY_PAGE_UP:

break;

case GLUT_KEY_PAGE_DOWN:

break;

case GLUT_KEY_HOME:

break;

case GLUT_KEY_END:

break;

case GLUT_KEY_UP:

break;

case GLUT_KEY_DOWN:

break;

case GLUT_KEY_LEFT: if (totalDeInstancias>0)

tx[instanciaSelecionada] -= 1;

break;

case GLUT_KEY_RIGHT: if (totalDeInstancias>0)

tx[instanciaSelecionada] += 1;

break;

case GLUT_KEY_INSERT:

totalDeInstancias++;

// o comando abaixo indica que a instância

// selecionada é a última que foi inserida

instanciaSelecionada = totalDeInstancias - 1;

break;

}

glutPostRedisplay();

}

void FIM (GLubyte tecla, GLint x_mouse, GLint y_mouse)

{

if (tecla == ESCAPE )

{

glutDestroyWindow(id_window);

exit(0);

}

else

{

printf("Teclaram: %c\n", tecla);

}

}

// Programa Principal

int main(void)

{

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

glutInitWindowSize(400,400);

glutInitWindowPosition(10,10);

id_window = glutCreateWindow("Quadrado");

glutDisplayFunc(Desenha);

glutReshapeFunc(AlteraTamanhoJanela);

glutKeyboardFunc(FIM);

Inicializa();

glutMainLoop();

}

Dentro do void teclasespeciais (que está em negrito) gostaria de fazer o seguinte: pageup (vai para a esquerda) / pagedown (vai para direita) / home (aumentar a instancia selecionada) / end (diminuir a instancia selecionada) / mover para cima e para baixo usando as setas.

Se alguém souber como solucionar isso poderia escrever no programa e me mandar?

Serei muito agradecida...

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...