Procurar
Últimos assuntos
Quem está conectado?
Há 1 usuário online :: 0 registrados, 0 invisíveis e 1 visitante Nenhum
[ Ver toda a lista ]
O recorde de usuários online foi de 192 em Ter Out 26, 2021 6:07 am
Um projeto em openGL - Logo do curso em 3D
Página 1 de 1
Um projeto em openGL - Logo do curso em 3D
Certo dia o Juk teve uma ideia. Então eu e o Marcelo embarcamos nela também.
A ideia era criar uma aplicação 3D que exibisse o logo do curso flutuando. Então resolvemos usar openGL para começar com algo bem simples.
Eis os resultados até agora:
**Vídeo ver0.1: https://www.youtube.com/watch?v=RR4zpzJ95Nw
Detalhes:
Versão 0.0:
https://docs.google.com/file/d/0B4m9FQ8snMU3STNqbkY4dV91c2M/edit
------------------------------------------------------------------------------------
Versão 0.1:
https://docs.google.com/file/d/0B4m9FQ8snMU3SHhYdGZJWjFEbFE/edit
----------------------------------------------------------------------------------
A ideia era criar uma aplicação 3D que exibisse o logo do curso flutuando. Então resolvemos usar openGL para começar com algo bem simples.
Eis os resultados até agora:
**Vídeo ver0.1: https://www.youtube.com/watch?v=RR4zpzJ95Nw
Detalhes:
Versão 0.0:
- Código:
//gcc tads_logo_0.c -o tads_logo_0 -lm -lGL -lGLU -lglut
#include <GL/freeglut.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
float angulo = 0;
int fps_cont = 0;
int cont = 0;
int cont2 = 0;
//display-list para desenho do logo
GLint lista_tads;
//variáveis para posicionamento da câmera
float pos_x = -5.0, pos_y = 5.0, pos_z = 12.0;
float ang_x = 0.0, ang_y = 0.0, ang_z = 0.0;
void OnDisplay (void);
void Idle (void);
void OnResize (int w, int h);
void Teclado(unsigned char key, int x, int y);
void TecladoEspecial(int key, int x, int y);
void timer_0 (int _valor);
void timer_1 (int _valor);
void timer_2 (int _valor);
void desenha_cubo(float tamanho);
void constroi_tads(GLfloat _tamanho);
int main (int argc, char * argv [])
{
/* variáveis usadas para iluminação */
GLfloat luzAmbiente[4]={0.2,0.2,0.2,1.0};
GLfloat luzDifusa[4]={0.7,0.7,0.7,1.0};// "cor"
GLfloat luzEspecular[4]={1.0, 1.0, 1.0, 1.0};// "brilho"
GLfloat posicaoLuz[4]={10.0, 10.0, 10.0, 1.0};
GLfloat especularidade[4]={1.0,1.0,1.0,1.0};// Capacidade de brilho do material
GLint especMaterial = 60; //concentração do brilho
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(600,480);
glutInitWindowPosition(600,600);
glutCreateWindow("Tecnologia em Analise e Desenvolvimento de Sistemas");
//registros de callbacks
glutDisplayFunc(OnDisplay);
glutReshapeFunc(OnResize);
glutKeyboardFunc(Teclado);
glutSpecialFunc(TecladoEspecial);
glutIdleFunc(Idle);
glutTimerFunc(20, timer_0, 0);
glutTimerFunc(1000, timer_1, 0);
// Habilita e define a função do depth-buffer
glEnable (GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
//glEnable (GL_POLYGON_SMOOTH); //mostra a malha. Porquê?!?!
//glEnable (GL_LINE_SMOOTH);
glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
// Habilita o modelo de colorização de Gouraud
glShadeModel(GL_SMOOTH);
// Define a refletância do material
glMaterialfv(GL_FRONT,GL_SPECULAR, especularidade);
// Define a concentração do brilho
glMateriali(GL_FRONT,GL_SHININESS,especMaterial);
// Ativa o uso da luz ambiente
//glLightModelfv(GL_LIGHT_MODEL_AMBIENT, luzAmbiente);
// Define os parâmetros da luz de número 0
glLightfv(GL_LIGHT0, GL_AMBIENT, luzAmbiente);
glLightfv(GL_LIGHT0, GL_DIFFUSE, luzDifusa );
glLightfv(GL_LIGHT0, GL_SPECULAR, luzEspecular );
glLightfv(GL_LIGHT0, GL_POSITION, posicaoLuz );
// Habilita a definição da cor do material a partir da cor corrente
glEnable(GL_COLOR_MATERIAL);
//Habilita o uso de iluminação
glEnable(GL_LIGHTING);
// Habilita a luz de número 0
glEnable(GL_LIGHT0);
// Habilita a exibição de objetos transparentes
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//glCullFace (GL_BACK);
//glEnable (GL_CULL_FACE);
constroi_tads(12);
glutMainLoop();
return 0;
}
void Teclado(unsigned char key, int x, int y)
{
switch(key)
{
case 27:
{
glutLeaveMainLoop();
break;
}
case 65:
case 97:
{
pos_x+=1;
break;
}
case 68:
case 100:
{
pos_x-=1;
break;
}
case 87:
case 119:
{
pos_z+=1;
break;
}
case 83:
case 115:
{
pos_z-=1;
break;
}
case 81:
case 113:
{
pos_y+=1;
break;
}
case 69:
case 101:
{
pos_y-=1;
break;
}
}
}
void TecladoEspecial(int key, int x, int y)
{
switch(key)
{
case GLUT_KEY_LEFT:
{
ang_y-=5;
break;
}
case GLUT_KEY_RIGHT:
{
ang_y+=5;
break;
}
case GLUT_KEY_UP:
{
ang_x+=5;
break;
}
case GLUT_KEY_DOWN:
{
ang_x-=5;
break;
}
}
}
void timer_0 (int _valor)
{
glutTimerFunc(20, timer_0, 0);
angulo += 0.5;
}
void timer_1 (int _valor)
{
glutTimerFunc(1000, timer_1, 0);
printf("fps: %d\n", fps_cont);
fps_cont = 0;
}
void Idle (void)
{
glutPostRedisplay();
}
void OnResize(int w, int h)
{
float porprocao;
printf("%d %d\n", w, h);//debug
// Evita a divisao por zero
if(h == 0)
{
h = 1;
}
porprocao = (float)w/(float)h;
// Especifica as dimensões da Área de Visualização
glViewport(0, 0, w, h);
// Inicializa o sistema de coordenadas
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(50, porprocao, 0.1, 100);
//corrige perpectiva - realmente melhora?
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
}
void desenha_cubo(float tamanho)
{
tamanho /= 2.0;
glBegin(GL_QUADS);
// Face posterior
glNormal3f(0.0, 0.0, -1.0);// Normal da face
glVertex3f(tamanho, tamanho, -tamanho);
glVertex3f(tamanho, -tamanho, -tamanho);
glVertex3f(-tamanho, -tamanho, -tamanho);
glVertex3f(-tamanho, tamanho, -tamanho);
glEnd();
glBegin(GL_QUADS);
// Face frontal
glNormal3f(0.0, 0.0, 1.0);// Normal da face
glVertex3f(-tamanho, tamanho, tamanho);
glVertex3f(-tamanho, -tamanho, tamanho);
glVertex3f(tamanho, -tamanho, tamanho);
glVertex3f(tamanho, tamanho, tamanho);
glEnd();
glBegin(GL_QUADS);
// Face lateral esquerda
glNormal3f(-1.0, 0.0, 0.0);// Normal da face
glVertex3f(-tamanho, tamanho, tamanho);
glVertex3f(-tamanho, tamanho, -tamanho);
glVertex3f(-tamanho, -tamanho, -tamanho);
glVertex3f(-tamanho, -tamanho, tamanho);
glEnd();
glBegin(GL_QUADS);
// Face lateral direita
glNormal3f(1.0, 0.0, 0.0);// Normal da face
glVertex3f(tamanho, tamanho, tamanho);
glVertex3f(tamanho, -tamanho, tamanho);
glVertex3f(tamanho, -tamanho, -tamanho);
glVertex3f(tamanho, tamanho, -tamanho);
glEnd();
glBegin(GL_QUADS);
// Face superior
glNormal3f(0.0, 1.0, 0.0);// Normal da face
glVertex3f(-tamanho, tamanho, -tamanho);
glVertex3f(-tamanho, tamanho, tamanho);
glVertex3f(tamanho, tamanho, tamanho);
glVertex3f(tamanho, tamanho, -tamanho);
glEnd();
glBegin(GL_QUADS);
// Face inferior
glNormal3f(0.0, -1.0, 0.0);// Normal da face
glVertex3f(-tamanho, -tamanho, tamanho);
glVertex3f(-tamanho, -tamanho, -tamanho);
glVertex3f(tamanho, -tamanho, -tamanho);
glVertex3f(tamanho, -tamanho, tamanho);
glEnd();
}
void constroi_tads (GLfloat _tamanho)
{
GLfloat tamanho_bloco = ((float)_tamanho/(float)12) * 0.85;
GLfloat tamanho_metade = ((float)_tamanho/(float)12) * 0.5;
GLfloat tamanho_total = ((float)_tamanho/(float)12);
lista_tads = glGenLists(1);
glNewList(lista_tads, GL_COMPILE);
//desenha a letra T
glPushMatrix();
glTranslatef(-tamanho_total*0.6, 0.0, 0.0);
glPushMatrix();
glTranslatef(-(tamanho_metade + 5*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 4*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 3*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 4*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 4*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 4*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPopMatrix();
//desenha a letra A
glPushMatrix();
glTranslatef(-tamanho_total*0.2, 0.0, 0.0);
glPushMatrix();
glTranslatef(-(tamanho_metade + 2*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 1*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 0*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 2*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 0*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 2*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 1*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 0*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 2*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 0*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPopMatrix();
//desenha a letra D
glPushMatrix();
glTranslatef(tamanho_total*0.2, 0.0, 0.0);
glPushMatrix();
glTranslatef((tamanho_metade + 0*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 1*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 0*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 2*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 0*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 2*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 0*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 1*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPopMatrix();
//desenha a letra S
glPushMatrix();
glTranslatef(tamanho_total*0.6, 0.0, 0.0);
glPushMatrix();
glTranslatef((tamanho_metade + 5*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 4*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 3*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 3*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 5*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 5*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 4*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 3*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPopMatrix();
glEndList();
}
void OnDisplay ()
{
//limpa a tela para redesenho
glClearColor (0.98f, 0.98f, 0.98f, 1.0f);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//inicializa o sistema de cordenadas
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();
//define a posição e alvo da câmera
gluLookAt(pos_x, pos_y, pos_z,0,0,0,0,1,0);
glTranslatef(0.0, sin(angulo/5)*0.5, 0.0); // a logo sobe e desce seguindo uam senóide
glRotatef(angulo, 0, 1, 0); // a logo é constantemente rotacionada
glColor4f(0.1f, 0.9f, 0.1f, 1.0f);
glCallList(lista_tads); // desehna a logo
glFlush (); //executa comandos pendentes
glutSwapBuffers(); //coloca o desenho na tela
fps_cont ++; //variável para contagem d
}
https://docs.google.com/file/d/0B4m9FQ8snMU3STNqbkY4dV91c2M/edit
------------------------------------------------------------------------------------
Versão 0.1:
- Código:
//gcc tads_logo_1.c -o tads_logo_1 -lm -lGL -lGLU -lglut image.o
#include <GL/freeglut.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "image.h"
float angulo = 0;
int fps_cont = 0;
int cont = 0;
int cont2 = 0;
//display-list para desenho do logo
GLint lista_tads;
//variáveis para posicionamento da câmera
float pos_x = -5.0, pos_y = 5.0, pos_z = 12.0;
float ang_x = 0.0, ang_y = 0.0, ang_z = 0.0;
void OnDisplay (void);
void Idle (void);
void OnResize (int w, int h);
void Teclado(unsigned char key, int x, int y);
void TecladoEspecial(int key, int x, int y);
void timer_0 (int _valor);
void timer_1 (int _valor);
void timer_2 (int _valor);
void desenha_cubo(float tamanho);
void constroi_tads(GLfloat _tamanho);
void carregar_texturas(void);
GLint textura_plano;
int main (int argc, char * argv [])
{
GLfloat luzAmbiente[4]={0.2,0.2,0.2,1.0};
GLfloat luzDifusa[4]={0.7,0.7,0.7,1.0};// "cor"
GLfloat luzEspecular[4]={1.0, 1.0, 1.0, 1.0};// "brilho"
GLfloat posicaoLuz[4]={10.0, 10.0, 10.0, 1.0};
GLfloat especularidade[4]={1.0,1.0,1.0,1.0};// Capacidade de brilho do material
GLint especMaterial = 60;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(600,480);
glutInitWindowPosition(600,600);
glutCreateWindow("Tecnologia em Analise e Desenvolvimento de Sistemas");
glutDisplayFunc(OnDisplay);
glutReshapeFunc(OnResize);
glutKeyboardFunc(Teclado);
glutSpecialFunc(TecladoEspecial);
glutIdleFunc(Idle);
glutTimerFunc(20, timer_0, 0);
glutTimerFunc(1000, timer_1, 0);
// Habilita e define a função do depth-buffer
glEnable (GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
//glEnable (GL_POLYGON_SMOOTH); //mostra a malha. Porquê?!?!
//glEnable (GL_LINE_SMOOTH);
//glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
// Habilita o modelo de colorização de Gouraud
glShadeModel(GL_SMOOTH);
// Define a refletância do material
glMaterialfv(GL_FRONT, GL_SPECULAR, especularidade);
// Define a concentração do brilho
glMateriali(GL_FRONT, GL_SHININESS,especMaterial);
// Ativa o uso da luz ambiente
//glLightModelfv(GL_LIGHT_MODEL_AMBIENT, luzAmbiente);
// Define os parâmetros da luz de número 0
glLightfv(GL_LIGHT0, GL_AMBIENT, luzAmbiente);
glLightfv(GL_LIGHT0, GL_DIFFUSE, luzDifusa );
glLightfv(GL_LIGHT0, GL_SPECULAR, luzEspecular );
glLightfv(GL_LIGHT0, GL_POSITION, posicaoLuz );
// Habilita a definição da cor do material a partir da cor corrente
glEnable(GL_COLOR_MATERIAL);
//Habilita o uso de iluminação
glEnable(GL_LIGHTING);
// Habilita a luz de número 0
glEnable(GL_LIGHT0);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glFrontFace(GL_CCW);
glCullFace (GL_BACK);
//glEnable (GL_CULL_FACE);
carregar_texturas();
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);
constroi_tads(12);
glutMainLoop(); // inicia o motor de eventos da GLUT
return 0;
}
void Teclado(unsigned char key, int x, int y)
{
switch(key)
{
case 27:
{
glutLeaveMainLoop();
break;
}
case 65:
case 97:
{
pos_x-=1;
break;
}
case 68:
case 100:
{
pos_x+=1;
break;
}
case 87:
case 119:
{
pos_z-=1;
break;
}
case 83:
case 115:
{
pos_z+=1;
break;
}
case 81:
case 113:
{
pos_y-=1;
break;
}
case 69:
case 101:
{
pos_y+=1;
break;
}
}
}
void TecladoEspecial(int key, int x, int y)
{
switch(key)
{
case GLUT_KEY_LEFT:
{
ang_y-=5;
break;
}
case GLUT_KEY_RIGHT:
{
ang_y+=5;
break;
}
case GLUT_KEY_UP:
{
ang_x+=5;
break;
}
case GLUT_KEY_DOWN:
{
ang_x-=5;
break;
}
}
}
void timer_0 (int _valor)
{
glutTimerFunc(20, timer_0, 0);
angulo += 0.5;
}
void timer_1 (int _valor)
{
glutTimerFunc(1000, timer_1, 0);
printf("fps: %d\n", fps_cont);
fps_cont = 0;
}
void Idle (void)
{
glutPostRedisplay();
}
void OnResize(int w, int h)
{
float porprocao;
printf("%d %d\n", w, h);//apenas debug
// Evita a divisao por zero
if(h == 0)
{
h = 1;
}
porprocao = (float)w/(float)h;
// Especifica as dimensões da Área de Visualização
glViewport(0, 0, w, h);
// Inicializa o sistema de coordenadas
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(50, porprocao, 0.1, 1000);
//corrige perpectiva - realmente melhora? ???*
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
}
void desenha_cubo(float tamanho)
{
tamanho /= 2.0;
glBegin(GL_QUADS);
// Face posterior
glNormal3f(0.0, 0.0, -1.0);// Normal da face
glVertex3f(tamanho, tamanho, -tamanho);
glVertex3f(tamanho, -tamanho, -tamanho);
glVertex3f(-tamanho, -tamanho, -tamanho);
glVertex3f(-tamanho, tamanho, -tamanho);
glEnd();
glBegin(GL_QUADS);
// Face frontal
glNormal3f(0.0, 0.0, 1.0);// Normal da face
glVertex3f(-tamanho, tamanho, tamanho);
glVertex3f(-tamanho, -tamanho, tamanho);
glVertex3f(tamanho, -tamanho, tamanho);
glVertex3f(tamanho, tamanho, tamanho);
glEnd();
glBegin(GL_QUADS);
// Face lateral esquerda
glNormal3f(-1.0, 0.0, 0.0);// Normal da face
glVertex3f(-tamanho, tamanho, tamanho);
glVertex3f(-tamanho, tamanho, -tamanho);
glVertex3f(-tamanho, -tamanho, -tamanho);
glVertex3f(-tamanho, -tamanho, tamanho);
glEnd();
glBegin(GL_QUADS);
// Face lateral direita
glNormal3f(1.0, 0.0, 0.0);// Normal da face
glVertex3f(tamanho, tamanho, tamanho);
glVertex3f(tamanho, -tamanho, tamanho);
glVertex3f(tamanho, -tamanho, -tamanho);
glVertex3f(tamanho, tamanho, -tamanho);
glEnd();
glBegin(GL_QUADS);
// Face superior
glNormal3f(0.0, 1.0, 0.0);// Normal da face
glVertex3f(-tamanho, tamanho, -tamanho);
glVertex3f(-tamanho, tamanho, tamanho);
glVertex3f(tamanho, tamanho, tamanho);
glVertex3f(tamanho, tamanho, -tamanho);
glEnd();
glBegin(GL_QUADS);
// Face inferior
glNormal3f(0.0, -1.0, 0.0);// Normal da face
glVertex3f(-tamanho, -tamanho, tamanho);
glVertex3f(-tamanho, -tamanho, -tamanho);
glVertex3f(tamanho, -tamanho, -tamanho);
glVertex3f(tamanho, -tamanho, tamanho);
glEnd();
}
void constroi_tads (GLfloat _tamanho)
{
GLfloat tamanho_bloco = ((float)_tamanho/(float)12) * 0.85;
GLfloat tamanho_metade = ((float)_tamanho/(float)12) * 0.5;
GLfloat tamanho_total = ((float)_tamanho/(float)12);
lista_tads = glGenLists(1);
glNewList(lista_tads, GL_COMPILE);
//desenha a letra T
glPushMatrix();
glTranslatef(-tamanho_total*0.6, 0.0, 0.0);
glPushMatrix();
glTranslatef(-(tamanho_metade + 5*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 4*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 3*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 4*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 4*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 4*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPopMatrix();
//desenha a letra A
glPushMatrix();
glTranslatef(-tamanho_total*0.2, 0.0, 0.0);
glPushMatrix();
glTranslatef(-(tamanho_metade + 2*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 1*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 0*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 2*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 0*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 2*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 1*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 0*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 2*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 0*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPopMatrix();
//desenha a letra D
glPushMatrix();
glTranslatef(tamanho_total*0.2, 0.0, 0.0);
glPushMatrix();
glTranslatef((tamanho_metade + 0*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 1*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 0*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 2*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 0*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 2*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 0*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 1*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPopMatrix();
//desenha a letra S
glPushMatrix();
glTranslatef(tamanho_total*0.6, 0.0, 0.0);
glPushMatrix();
glTranslatef((tamanho_metade + 5*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 4*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 3*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 3*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 5*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 5*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 4*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 3*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPopMatrix();
glEndList();
}
void OnDisplay ()
{
glClearColor (0.98f, 0.98f, 0.98f, 1.0f);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//inicializa o sistema de cordenadas
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();
//define a posição e alvo da câmera
gluLookAt(pos_x, pos_y, pos_z,0,0,0,0,1,0);
/*glRotatef(ang_x,1,0,0);
glRotatef(ang_y,0,1,0);
glRotatef(ang_z,0,0,1);
glTranslatef(pos_x,pos_y,pos_z);*/
/*
glBegin(GL_QUADS);
glVertex3f(-6.0f, -4.0f, -6.0f);
glVertex3f(6.0f, -4.0f, -6.0f);
glVertex3f(6.0f, -4.0f, 6.0f);
glVertex3f(-6.0f, -4.0f, 6.0f);
glEnd();
glColor4f(0.6f, 0.6f, 0.6f, 1.0f);
glglPushMatrix();
glTranslatef(-2.0f, 0.0f, 0.0f);
glRotatef(angulo, 1, 0.8, 0.4);
glutSolidTeapot(1);
glglPopMatrix();
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
glglPushMatrix();
glTranslatef(2.0f, 0.0f, 0.0f);
glRotatef(angulo, 0.2, 1, -0.5);
desenha_cubo(1);
glglPopMatrix();
glRasterPos2i (-2, -2);
printString("hahaha!");
*/
glBindTexture(GL_TEXTURE_2D,textura_plano); //define a textura a ser utilizada
glColor4f(0.9f, 0.9f, 0.9f, 1.0f);
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS); // cria o quadrado texturizado de fundo
glTexCoord2f(0,0); glVertex3f(-10.0f, -3.0f, 10.0/1.415);
glTexCoord2f(1,0); glVertex3f(10.0f, -3.0f, 10.0/1.415);
glTexCoord2f(1,1); glVertex3f(10.0f, -3.0f, -10.0/1.415);
glTexCoord2f(0,1); glVertex3f(-10.0f, -3.0f, -10.0/1.415);
glEnd();
glDisable(GL_TEXTURE_2D);
glTranslatef(0.0, sin(angulo/5.0)*0.5, 0.0);
glRotatef(angulo, 0, 1, 0);
glColor4f(0.1f, 0.9f, 0.1f, 1.0f);
glCallList(lista_tads);
glFlush();
glutSwapBuffers();
fps_cont ++;
}
void carregar_texturas(void)
{
IMAGE *img;
GLenum gluerr;
// constrói uma textura
glGenTextures(1, &textura_plano);
glBindTexture(GL_TEXTURE_2D, textura_plano);
// chama a função de carga de memória do arquivo image.c
if(!(img=ImageLoad("fundo.rgb")))
{
fprintf(stderr,"Error reading a texture.\n");
exit(-1);
}
// constrói mipmaps
gluerr=gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, img->sizeX, img->sizeY, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)(img->data));
if(gluerr)
{
fprintf(stderr,"GLULib%s\n",gluErrorString(gluerr));
exit(-1);
}
// define parâmetros de texturização
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);
}
https://docs.google.com/file/d/0B4m9FQ8snMU3SHhYdGZJWjFEbFE/edit
----------------------------------------------------------------------------------
Última edição por Diego Henrix em Qua Jan 30, 2013 12:02 pm, editado 2 vez(es)
Diego Henrix- Mensagens : 7
Data de inscrição : 04/04/2012
Re: Um projeto em openGL - Logo do curso em 3D
continuação...
Versão 0.2:
https://docs.google.com/file/d/0B4m9FQ8snMU3ZXhjbFprb0NyUVk/edit
-------------------------------------------------------------------------------
*Você deve instalar a biblioteca freeglut. Comando de compilação na primeira linha do código.
**Caso queira usar a biblioteca GLUT (compatível com esse código tbm) use #include <GL/glut.h>
***Estou enviando os arquivos necessários no pacote .zip, as duas ultimas versões precisam de arquivos adicionais como as imagens e o carregador delas.
A intensão agora é continuar evoluindo o código rumo a algo mais moderno em relação a arte gráfica 3D.
Sintam-se livres para usar e modificar o código.
Contribuições, criticas e sugestões são bem vindas.
Valeu...
Versão 0.2:
- Código:
//gcc tads_logo_0.c -o tads_logo_0 -lm -lGL -lGLU -lglut image.o
#include <GL/freeglut.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "image.h"
float angulo = 0;
int fps_cont = 0;
int cont = 0;
int cont2 = 0;
//display-list para desenho do logo
GLint lista_tads;
//variáveis para posicionamento da câmera
float pos_x = -5.0, pos_y = 5.0, pos_z = 12.0;
float ang_x = 0.0, ang_y = 0.0, ang_z = 0.0;
//funções callback da GLUT
void OnDisplay (void);
void Idle (void);
void OnResize (int w, int h);
void Teclado(unsigned char key, int x, int y);
void TecladoEspecial(int key, int x, int y);
void timer_0 (int _valor);
void timer_1 (int _valor);
void timer_2 (int _valor);
//funções de desenho
void desenha_cubo(float tamanho);
void constroi_tads(GLfloat _tamanho);
void carregar_texturas(void);
//identificadores de texturas
GLint textura_plano;
GLint textura_cubo;
int main (int argc, char * argv [])
{
GLfloat luzAmbiente[4]={0.2,0.2,0.2,1.0};
GLfloat luzDifusa[4]={0.7,0.7,0.7,1.0};// "cor"
GLfloat luzEspecular[4]={1.0, 1.0, 1.0, 1.0};// "brilho"
GLfloat posicaoLuz[4]={10.0, 10.0, 10.0, 1.0};
GLfloat especularidade[4]={1.0,1.0,1.0,1.0};// Capacidade de brilho do material
GLint especMaterial = 60;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(600,480);
glutInitWindowPosition(600,600);
glutCreateWindow("Tecnologia em Analise e Desenvolvimento de Sistemas - IF Goiano");
glutDisplayFunc(OnDisplay);
glutReshapeFunc(OnResize);
glutKeyboardFunc(Teclado);
glutSpecialFunc(TecladoEspecial);
glutIdleFunc(Idle);
glutTimerFunc(20, timer_0, 0);
glutTimerFunc(1000, timer_1, 0);
// Habilita e define a função do depth-buffer
glEnable (GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
//glEnable (GL_POLYGON_SMOOTH); //mostra a malha. Porquê?!?!
//glEnable (GL_LINE_SMOOTH);
//glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
// Habilita o modelo de colorização de Gouraud
glShadeModel(GL_SMOOTH);
// Define a refletância do material
glMaterialfv(GL_FRONT, GL_SPECULAR, especularidade);
// Define a concentração do brilho
glMateriali(GL_FRONT, GL_SHININESS,especMaterial);
// Ativa o uso da luz ambiente
//glLightModelfv(GL_LIGHT_MODEL_AMBIENT, luzAmbiente);
// Define os parâmetros da luz de número 0
glLightfv(GL_LIGHT0, GL_AMBIENT, luzAmbiente);
glLightfv(GL_LIGHT0, GL_DIFFUSE, luzDifusa );
glLightfv(GL_LIGHT0, GL_SPECULAR, luzEspecular );
glLightfv(GL_LIGHT0, GL_POSITION, posicaoLuz );
// Habilita a definição da cor do material a partir da cor corrente
glEnable(GL_COLOR_MATERIAL);
//Habilita o uso de iluminação
glEnable(GL_LIGHTING);
// Habilita a luz de número 0
glEnable(GL_LIGHT0);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glFrontFace(GL_CCW);
glCullFace (GL_BACK);
//glEnable (GL_CULL_FACE);
carregar_texturas();
constroi_tads(12);
glutMainLoop(); // inicia o motor de eventos da GLUT
return 0;
}
void Teclado(unsigned char key, int x, int y)
{
switch(key)
{
case 27:
{
glutLeaveMainLoop();
break;
}
case 65:
case 97:
{
pos_x-=1;
break;
}
case 68:
case 100:
{
pos_x+=1;
break;
}
case 87:
case 119:
{
pos_z-=1;
break;
}
case 83:
case 115:
{
pos_z+=1;
break;
}
case 81:
case 113:
{
pos_y-=1;
break;
}
case 69:
case 101:
{
pos_y+=1;
break;
}
}
}
void TecladoEspecial(int key, int x, int y)
{
switch(key)
{
case GLUT_KEY_LEFT:
{
ang_y-=5;
break;
}
case GLUT_KEY_RIGHT:
{
ang_y+=5;
break;
}
case GLUT_KEY_UP:
{
ang_x+=5;
break;
}
case GLUT_KEY_DOWN:
{
ang_x-=5;
break;
}
}
}
void timer_0 (int _valor)
{
glutTimerFunc(20, timer_0, 0);
angulo += 0.5;
}
void timer_1 (int _valor)
{
glutTimerFunc(1000, timer_1, 0);
printf("fps: %d\n", fps_cont);
fps_cont = 0;
}
void Idle (void)
{
glutPostRedisplay();
}
void OnResize(int w, int h)
{
float porprocao;
printf("%d %d\n", w, h);//apenas debug
// Evita a divisao por zero
if(h == 0)
{
h = 1;
}
porprocao = (float)w/(float)h;
// Especifica as dimensões da Área de Visualização
glViewport(0, 0, w, h);
// Inicializa o sistema de coordenadas
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(50, porprocao, 0.1, 1000);
//corrige perpectiva - realmente melhora? ???*
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
}
/*
glTexCoord2f(0,0); glVertex3f(-10.0f, -3.0f, 10.0/1.415);
glTexCoord2f(1,0); glVertex3f(10.0f, -3.0f, 10.0/1.415);
glTexCoord2f(1,1); glVertex3f(10.0f, -3.0f, -10.0/1.415);
glTexCoord2f(0,1); glVertex3f(-10.0f, -3.0f, -10.0/1.415);
*/
void desenha_cubo(float tamanho)
{
tamanho /= 2.0;
glBegin(GL_QUADS);
// Face posterior
glNormal3f(0.0, 0.0, -1.0);// Normal da face
glTexCoord2f(0,0);
glVertex3f(tamanho, -tamanho, -tamanho);
glTexCoord2f(1,0);
glVertex3f(-tamanho, -tamanho, -tamanho);
glTexCoord2f(1,1);
glVertex3f(-tamanho, tamanho, -tamanho);
glTexCoord2f(0,1);
glVertex3f(tamanho, tamanho, -tamanho);
glEnd();
glBegin(GL_QUADS);
// Face frontal
glNormal3f(0.0, 0.0, 1.0);// Normal da face
glTexCoord2f(0,0);
glVertex3f(-tamanho, -tamanho, tamanho);
glTexCoord2f(1,0);
glVertex3f(tamanho, -tamanho, tamanho);
glTexCoord2f(1,1);
glVertex3f(tamanho, tamanho, tamanho);
glTexCoord2f(0,1);
glVertex3f(-tamanho, tamanho, tamanho);
glEnd();
glBegin(GL_QUADS);
// Face lateral esquerda
glNormal3f(-1.0, 0.0, 0.0);// Normal da face
glTexCoord2f(0,0);
glVertex3f(-tamanho, -tamanho, -tamanho);
glTexCoord2f(1,0);
glVertex3f(-tamanho, -tamanho, tamanho);
glTexCoord2f(1,1);
glVertex3f(-tamanho, tamanho, tamanho);
glTexCoord2f(0,1);
glVertex3f(-tamanho, tamanho, -tamanho);
glEnd();
glBegin(GL_QUADS);
// Face lateral direita
glNormal3f(1.0, 0.0, 0.0);// Normal da face
glTexCoord2f(0,0);
glVertex3f(tamanho, -tamanho, tamanho);
glTexCoord2f(1,0);
glVertex3f(tamanho, -tamanho, -tamanho);
glTexCoord2f(1,1);
glVertex3f(tamanho, tamanho, -tamanho);
glTexCoord2f(0,1);
glVertex3f(tamanho, tamanho, tamanho);
glEnd();
glBegin(GL_QUADS);
// Face superior
glNormal3f(0.0, 1.0, 0.0);// Normal da face
glTexCoord2f(0,0);
glVertex3f(-tamanho, tamanho, tamanho);
glTexCoord2f(1,0);
glVertex3f(tamanho, tamanho, tamanho);
glTexCoord2f(1,1);
glVertex3f(tamanho, tamanho, -tamanho);
glTexCoord2f(0,1);
glVertex3f(-tamanho, tamanho, -tamanho);
glEnd();
glBegin(GL_QUADS);
// Face inferior
glNormal3f(0.0, -1.0, 0.0);// Normal da face
glTexCoord2f(0,0);
glVertex3f(-tamanho, -tamanho, -tamanho);
glTexCoord2f(1,0);
glVertex3f(tamanho, -tamanho, -tamanho);
glTexCoord2f(1,1);
glVertex3f(tamanho, -tamanho, tamanho);
glTexCoord2f(0,1);
glVertex3f(-tamanho, -tamanho, tamanho);
glEnd();
}
void constroi_tads (GLfloat _tamanho)
{
GLfloat tamanho_bloco = ((float)_tamanho/(float)12) * 0.85;
GLfloat tamanho_metade = ((float)_tamanho/(float)12) * 0.5;
GLfloat tamanho_total = ((float)_tamanho/(float)12);
lista_tads = glGenLists(1);
glNewList(lista_tads, GL_COMPILE);
//desenha a letra T
glPushMatrix();
glTranslatef(-tamanho_total*0.6, 0.0, 0.0);
glPushMatrix();
glTranslatef(-(tamanho_metade + 5*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 4*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 3*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 4*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 4*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 4*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPopMatrix();
//desenha a letra A
glPushMatrix();
glTranslatef(-tamanho_total*0.2, 0.0, 0.0);
glPushMatrix();
glTranslatef(-(tamanho_metade + 2*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 1*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 0*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 2*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 0*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 2*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 1*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 0*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 2*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef(-(tamanho_metade + 0*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPopMatrix();
//desenha a letra D
glPushMatrix();
glTranslatef(tamanho_total*0.2, 0.0, 0.0);
glPushMatrix();
glTranslatef((tamanho_metade + 0*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 1*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 0*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 2*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 0*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 2*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 0*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 1*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPopMatrix();
//desenha a letra S
glPushMatrix();
glTranslatef(tamanho_total*0.6, 0.0, 0.0);
glPushMatrix();
glTranslatef((tamanho_metade + 5*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 4*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 3*tamanho_total), (tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 3*tamanho_total), (tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 4*tamanho_total), 0, 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 5*tamanho_total), -(tamanho_metade + 0*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 5*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 4*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPushMatrix();
glTranslatef((tamanho_metade + 3*tamanho_total), -(tamanho_metade + 1*tamanho_total), 0);
desenha_cubo(tamanho_bloco);
glPopMatrix();
glPopMatrix();
glEndList();
}
void OnDisplay ()
{
glClearColor (0.98f, 0.98f, 0.98f, 1.0f);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//inicializa o sistema de cordenadas
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();
//define a posição e alvo da câmera
gluLookAt(pos_x, pos_y, pos_z,0,0,0,0,1,0);
/*glRotatef(ang_x,1,0,0);
glRotatef(ang_y,0,1,0);
glRotatef(ang_z,0,0,1);
glTranslatef(pos_x,pos_y,pos_z);*/
/*
glBegin(GL_QUADS);
glVertex3f(-6.0f, -4.0f, -6.0f);
glVertex3f(6.0f, -4.0f, -6.0f);
glVertex3f(6.0f, -4.0f, 6.0f);
glVertex3f(-6.0f, -4.0f, 6.0f);
glEnd();
glColor4f(0.6f, 0.6f, 0.6f, 1.0f);
glglPushMatrix();
glTranslatef(-2.0f, 0.0f, 0.0f);
glRotatef(angulo, 1, 0.8, 0.4);
glutSolidTeapot(1);
glglPopMatrix();
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
glglPushMatrix();
glTranslatef(2.0f, 0.0f, 0.0f);
glRotatef(angulo, 0.2, 1, -0.5);
desenha_cubo(1);
glglPopMatrix();
glRasterPos2i (-2, -2);
printString("hahaha!");
*/
glBindTexture(GL_TEXTURE_2D,textura_plano);
glEnable(GL_TEXTURE_2D);
glColor4f(0.9f, 0.9f, 0.9f, 1.0f);
glBegin(GL_QUADS);
glTexCoord2f(0,0); glVertex3f(-10.0f, -3.0f, 10.0f);///1.415);
glTexCoord2f(1,0); glVertex3f(10.0f, -3.0f, 10.0f);///1.415);
glTexCoord2f(1,1); glVertex3f(10.0f, -3.0f, -10.0f);///1.415);
glTexCoord2f(0,1); glVertex3f(-10.0f, -3.0f, -10.0f);///1.415);
glEnd();
glTranslatef(0.0, sin(angulo/5.0)*0.5, 0.0);
glRotatef(angulo, 0, 1, 0);
glColor4f(0.1f, 0.9f, 0.1f, 1.0f);
glBindTexture(GL_TEXTURE_2D,textura_cubo);
glCallList(lista_tads);
glFlush();
glutSwapBuffers();
fps_cont ++;
}
void carregar_texturas(void)
{
IMAGE *img = NULL;
GLenum gluerr;
// textura do plano
glGenTextures(1, &textura_plano);
glBindTexture(GL_TEXTURE_2D, textura_plano);
if(!(img=ImageLoad("fundo_if.rgb")))
{
fprintf(stderr,"Error ao ler textura 0.\n");
exit(-1);
}
gluerr=gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, img->sizeX, img->sizeY, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)(img->data));
if(gluerr)
{
fprintf(stderr,"GLULib%s\n",gluErrorString(gluerr));
exit(-1);
}
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
if(img)
{
free(img);
img = NULL;
}
// textura do cubo
glGenTextures(1, &textura_cubo);
glBindTexture(GL_TEXTURE_2D, textura_cubo);
if(!(img=ImageLoad("fundo_tads.rgb")))
{
fprintf(stderr,"Error ao ler textura 1.\n");
exit(-1);
}
gluerr=gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, img->sizeX, img->sizeY, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)(img->data));
if(gluerr)
{
fprintf(stderr,"GLULib%s\n",gluErrorString(gluerr));
exit(-1);
}
if(img)
{
free(img);
img = NULL;
}
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);
}
https://docs.google.com/file/d/0B4m9FQ8snMU3ZXhjbFprb0NyUVk/edit
-------------------------------------------------------------------------------
*Você deve instalar a biblioteca freeglut. Comando de compilação na primeira linha do código.
**Caso queira usar a biblioteca GLUT (compatível com esse código tbm) use #include <GL/glut.h>
***Estou enviando os arquivos necessários no pacote .zip, as duas ultimas versões precisam de arquivos adicionais como as imagens e o carregador delas.
A intensão agora é continuar evoluindo o código rumo a algo mais moderno em relação a arte gráfica 3D.
Sintam-se livres para usar e modificar o código.
Contribuições, criticas e sugestões são bem vindas.
Valeu...
Diego Henrix- Mensagens : 7
Data de inscrição : 04/04/2012
Tópicos semelhantes
» OpenGl + GLUT p/ linux**
» Instalação da biblioteca OpenGL/Glut no Linux
» Tópico sobre fonte de dados sobre biblioteca OpenGl
» Estudos em OpenGL
» Estudos em OpenGL II
» Instalação da biblioteca OpenGL/Glut no Linux
» Tópico sobre fonte de dados sobre biblioteca OpenGl
» Estudos em OpenGL
» Estudos em OpenGL II
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
Ontem à(s) 9:27 pm por juk
» LINKS PARA BAIXAR O OFFICE
Ter Abr 23, 2024 5:57 pm por juk
» Backup FULL FIREFOX
Dom Abr 07, 2024 3:16 pm por juk
» Backup FULL CHROME
Dom Abr 07, 2024 2:59 pm por juk
» Dowloand de Videos youtube Sem Permissão adminstrador
Seg Jan 02, 2023 2:13 pm por juk
» Cypecad 2019
Seg Jan 02, 2023 1:41 pm por juk
» Atualizando é instalando o IExplorer 11 no windows 7
Ter Ago 30, 2022 10:54 pm por juk
» COMO HABILITAR INTERNET EXPLORER NO WINDOWS 10
Sex Abr 29, 2022 6:43 pm por juk
» Usando o Monitor de Recursos do sistema para identificar processos Associados.
Qua Abr 06, 2022 10:19 am por juk