Ir ao conteúdo
  • Cadastre-se

Duvida OpenGL - C/C++


rodrigorosario

Posts recomendados

Pessoal, preciso desenhar um circulo na tela e fazê-lo mover-se em movimento ascendente (para cima). Peguei um codigo de um quadrado que ficava "se batendo" nas bordas da janela e modifiquei para que o quadrado se movesse para cima. Usando o mesmo raciocinio, modifiquei a função Desenha desse codigo para que, ao invés de desenhar um quadrado, ele desenhasse um circulo. O circulo apareceu. O problema é que ele não quer se mover. O que preciso modificar para isso acontecer? O CODIGO SEGUE ABAIXO:

#include <GL/glut.h>

#include <math.h>

#include <stdlib.h>

#define PI 3.1415926535

// Tamanho e posição inicial do quadrado

GLfloat x1 = 100.0f;

GLfloat y = 150.0f;

GLsizei rsize = 50;

// Tamanho do incremento nas direções x e y

// (número de pixels para se mover a cada

// intervalo de tempo)

GLfloat xstep = 1.0f;

GLfloat ystep = 1.0f;

// Largura e altura da janela

GLfloat windowWidth;

GLfloat windowHeight;

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

void Desenha(void)

{

GLfloat angle=0;

int i=0;

GLfloat circle_points = 100;

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glClear(GL_COLOR_BUFFER_BIT);

// Especifica que a cor corrente é vermelha

// R G B

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

glBegin(GL_LINE_LOOP);

// Desenha o circulo

for (i = 0; i < circle_points; i++)

{

angle = 2*PI*i/circle_points;

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

glVertex2f(30*cos(angle) + 135, 30*sin(angle) + 100-rsize);

}

glEnd();

// Executa os comandos OpenGL

glFlush();

// Executa os comandos OpenGL

glutSwapBuffers();

}

// Função callback chamada pela GLUT a cada intervalo de tempo

// (a window não está sendo redimensionada ou movida)

void Timer(int value)

{

// Move o quadrado

y += ystep;

// Redesenha o quadrado com as novas coordenadas

glutPostRedisplay();

glutTimerFunc(33,Timer, 1);

}

// 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);

}

// 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();

// Estabelece a janela de seleção (left, right, bottom, top)

if (w <= h) {

windowHeight = 250.0f*h/w;

windowWidth = 250.0f;

}

else {

windowWidth = 250.0f*w/h;

windowHeight = 250.0f;

}

gluOrtho2D(0.0f, windowWidth, 0.0f, windowHeight);

}

// Programa Principal

int main(int argc, char **argv)

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);

glutInitWindowSize(1200,800);

glutInitWindowPosition(10,10);

glutCreateWindow("Anima");

glutDisplayFunc(Desenha);

glutReshapeFunc(AlteraTamanhoJanela);

glutTimerFunc(33, Timer, 1);

glutMainLoop();

}

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!