Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
annytosi

OpenGL... Usando teclado

Recommended Posts

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Por favorrrr...

    Me ajudem... Quero muito resolver esse problema...

    Obrigada...

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Já tentou postar o código na área de de programação?

    A estrutura do Switch está correta? Não estária faltando a ação?

    switch()

    {

    caso 1: ação; break;

    caso 2: ação; break;

    }

    Bom, sei só um pouco de php e javascript.

    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






    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

    ×