Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

jestem programista

[OpenGL] Gerar cubos automáticos

Mensagens Recomendadas

jestem programista    0
jestem programista

Viva maltinha,

Eu quero gerar cubos a cair a partir da janela (em cima). Começando a cair de cima para baixo. (tipo tetris vá, só que apenas cubos).

Alguém me sabe dizer como? :/

Urgente...

Grande abraço a todos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo    1151
HappyHippyHippo

a pergunta é muito genérica, e sem saber que tipo de gestão de objectos que andas a usar é muito complicado responder a este tópico.

mas do que :

- de X em X tempo crias o cubo

é complicado dizer

  • Voto 1

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jestem programista    0
jestem programista

Obrigado pela resposta amigo,

Tenho duas dúvida. Eu quero gerar 5 cubos a andarem aleatoriamente pela janela e ter outro cubo conduzido por mim CIMA, BAIXO, ESQ e DIR.

1 -> Como crio mais que um cubo? (Já tenho um a funcionar);

2 -> Como não deixo o cubo passar as margens da janela?

Obrigado desde já.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo    1151
HappyHippyHippo

1 -> Como crio mais que um cubo? (Já tenho um a funcionar);

como estás a "criar" um ?

2 -> Como não deixo o cubo passar as margens da janela?

no momento da actualização da posição, verificar se a nova posição não fica fora dos limites

nota : estás a fazer perguntas muito genéricas/vagas, e como tal, não esperes uma resposta que também não o seja


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jestem programista    0
jestem programista

até agora é o que tenho....a

#include <stdio.h>
#include <stdlib.h>

#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <GLUT/glut.h>
#include <time.h>

void draw() {

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

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


// desenho de uma face do quadrado
glBegin(GL_QUADS);
/*
glColor3f(1.0, 0.0, 0.0);
glVertex2f(-0.1f, 0.1f);  // vertex 1
glVertex2f(-0.1f, -0.1f); // vertex 2
glVertex2f(0.1f, -0.1f);  // vertex 3
glVertex2f(0.1f, 0.1f);   // vertex 4
*/

//CUBO

// parte BAIXO cubo (y = 1.0f)

glColor3f(0.0f, 1.0f, 0.0f);	 // Green
glVertex3f(1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f,  1.0f);
glVertex3f( 1.0f, 1.0f,  1.0f);

// parte CIMA cubo

glColor3f(1.0f, 0.1f, 0.0f);	 // Orange
glVertex3f( 1.0f, -1.0f,  1.0f);
glVertex3f(-1.0f, -1.0f,  1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f( 1.0f, -1.0f, -1.0f);


// parte FRENTE cubo (z = 1.0f)

glColor3f(0.0f, 1.0f, 0.0f);	 // Red
glVertex3f( 1.0f,  1.0f, 1.0f);
glVertex3f(-1.0f,  1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f( 1.0f, -1.0f, 1.0f);

// parte TRÁS cubo (z = -1.0f)
glColor3f(1.0f, 1.0f, 0.0f);	 // Yellow
glVertex3f( 1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f,  1.0f, -1.0f);
glVertex3f( 1.0f,  1.0f, -1.0f);

// parte ESQUERDA cubo (x = -1.0f)


glVertex3f(-1.0f,  1.0f,  1.0f);
glVertex3f(-1.0f,  1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f,  1.0f);

// parte DIREITA cubo (x = 1.0f)
glColor3f(1.0f, 0.0f, 1.0f);	 // Magenta
glVertex3f(1.0f,  1.0f, -1.0f);
glVertex3f(1.0f,  1.0f,  1.0f);
glVertex3f(1.0f, -1.0f,  1.0f);
glVertex3f(1.0f, -1.0f, -1.0f);

glEnd();

glFlush();

// Call the functions to draw objects here
// display it

glutSwapBuffers();
}

void keyboard(unsigned char key, int x, int y) {
if(key==27) exit(0); // Keyboard method to allow ESC key to quit
}

void keys(int key, int x, int y) {

switch (key) {

	case GLUT_KEY_LEFT:
		glTranslatef(0.45, 0, 0.0);
		break;

	case GLUT_KEY_RIGHT:
		glTranslatef(-0.45, 0.0, 0.0);
		break;

	case GLUT_KEY_UP:
		glTranslatef(0.0, -0.45, 0.0);
		break;

	case GLUT_KEY_DOWN:
		glTranslatef(0.0, 0.45, 0.0);
		break;

	default:
		break;
}


glutPostRedisplay();

}

void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60000.0, (GLfloat) w/(GLfloat) h, 0.20, 60000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, 0.0, -5.0); // muda tamanho do cubo
}

void animacao(int x){

int posicao = rand() % 5 + 1;

if (posicao==1) {
	glTranslatef(1.0, 0, 0.0);

}

if (posicao == 2) {
	glTranslatef(-1.0, 0, 0.0);

}

if (posicao == 3) {
	glTranslatef(0, 1.0, 0.0);

}

if (posicao == 4) {
	glTranslatef(0, -1.0, 0.0);

}
glutPostRedisplay();
glutTimerFunc(200, animacao, 1);
}

/*
fprintf(stdout, "cenas");

int positivo = rand() % 5 + 1;

//se for 0, então o valor vai ser negativo
if (positivo == 0) {
	glPushMatrix();
	float posicao = -(rand() % 100) / 100;
	x = posicao;
	glutDisplayFunc(draw_animacao);
	printf("OLA");
	glPopMatrix();

}
//vai ser positivo
else{
	float posicao = -(rand() % 100) / 100;
	x = posicao;
	glutDisplayFunc(draw_animacao);
}

keyboard(GLUT_KEY_LEFT, 1, 1);
glutPostRedisplay();
glutTimerFunc(250, animacao, 1);
}
*/

int main(int argc, char ** argv) {

glutInit(&argc, argv);
// tamanho da janela
glutInitWindowSize(500,500);
glutCreateWindow("Cube");

glEnable(GL_DEPTH_TEST);

// declarar funções de teclado e ecrã
glutDisplayFunc(draw);
glutDisplayFunc(draw);
glutKeyboardFunc(keyboard); // apenas para ESC
glutSpecialFunc(keys);   // teclas CIMA, BAIXO, ESQUERDA, DIREITA
glutReshapeFunc(reshape);

glutTimerFunc(200, animacao,1);

// Start the Main Loop
glutMainLoop();
return 0;
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo    1151
HappyHippyHippo

tens de guardar a informação do objecto que estás a apresentar em algum local, e é essa informação que usas para apresentar o objecto.

ter mais objectos, não é mais do que ter uma lista com mais ou menos elementos a serem apresentados


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.