Ir ao conteúdo

Posts recomendados

Postado

Boa noite, atualmente estou em um projeto pessoal desenvolvendo e estudando uma aplicação que envolve física em OpenGL, porém estou encontrando dificuldades na compreensão de algumas coisas, então gostaria de saber se alguém que entenda de programação OpenGL estaria disposto a me auxiliar em algumas pequenas dúvidas da aplicação que estou estudando.

Postado

Faz bastante tempo desde a ultima vez que usei openGL e webGL, tinha guardado este trecho de código, pode te ajudar a iniciar algo. A glut.h é legal para aprender a programar com openGL, mas se for fazer um projeto mais complexo, vai precisar usar outras coisas.

 

OBS: para rodar este código será necessário a DLL glut32.dll e as libs glut.h e GL/gl.h. Este código gera uma animação de um cilindro 3D, esta animação termina quando a tecla "esc" for apertada. 

 

#include <stdlib.h>
#include <glut.h>
#include <GL/gl.h>
#include <stdio.h>
#include <math.h>

#define ESCAPE_KEY 27

float janela;
float t = 0.0f;

void renderCylinder(float x1, float y1, float z1, float x2,float y2, float z2, float radius,int sub_divisao,GLUquadricObj *quadric) {
   float vx = x2-x1;
   float vy = y2-y1;
   float vz = z2-z1;

   if(vz == 0)
       vz = .00000001;

   float v = sqrt( vx*vx + vy*vy + vz*vz );
   float ax = 57.2957795*acos( vz/v );

   if ( vz < 0.0 )
       ax = -ax;

   float rx = -vy*vz;
   float ry = vx*vz;
   glPushMatrix();

   //CORPO CILINDRO
   glTranslatef( x1,y1,z1 );
   glRotatef(ax, rx, ry, 0.0);
   gluQuadricOrientation(quadric,GLU_OUTSIDE);
   gluCylinder(quadric, radius, radius, v, sub_divisao, 1);

   //Primeiro Cap
   gluQuadricOrientation(quadric,GLU_INSIDE);
   gluDisk( quadric, 0.0, radius, sub_divisao, 1);
   glTranslatef( 0,0,v );

   //Segundo Cap
   gluQuadricOrientation(quadric,GLU_OUTSIDE);
   gluDisk(quadric, 0.0, radius, sub_divisao, 1);
   glPopMatrix();
}

void CILINDRO(float x1, float y1, float z1, float x2,float y2, float z2, float radius,int sub_divisao) {
   GLUquadricObj *quadric=gluNewQuadric();
   gluQuadricNormals(quadric, GLU_SMOOTH);
   renderCylinder(x1,y1,z1,x2,y2,z2,radius,sub_divisao,quadric);
   gluDeleteQuadric(quadric);
}


void display() {
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glLoadIdentity();
   glTranslatef(0,0,-7);
   
   //Definindo o cilindro
   float x1 = sin(t);
   float y1 = sin(t/2);
   float z1 = cos(t*1.1);
   float x2 = -sin(t*1.3);
   float y2 = 0;
   float z2 = -cos(t);
   float radius = 0.03+(sin(t)/2+0.5)/3;

   CILINDRO(x1,y1,z1,x2,y2,z2,radius,32);		   
   t+=0.010;
   glutSwapBuffers();
}

void InitGL(int Width, int Height) {
   glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
   glClearDepth(1.0);
   glDepthFunc(GL_LESS);
   glEnable(GL_DEPTH_TEST);

   glShadeModel(GL_SMOOTH);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);
   glMatrixMode(GL_MODELVIEW);

   glEnable(GL_LIGHTING);
   GLfloat LightAmbient[] = { 0.5f, 0.5f, 0.5f, 1.0f };
   GLfloat LightDiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
   GLfloat LightPosition[] = { 0.0f, 0.0f, 2.0f, 1.0f };
   glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient);
   glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse);
   glLightfv(GL_LIGHT1, GL_POSITION,LightPosition);
   glEnable(GL_LIGHT1);
}

void keyPressed(unsigned char key, int x, int y) {
   if(key == ESCAPE_KEY) {
       glutDestroyWindow(janela);
       exit(1);
   }
}

int main( int argc, char** argv) {
   glutInit(&argc, argv);
   glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
   glutInitWindowSize(640, 480);
   janela = glutCreateWindow("");
   glutDisplayFunc(&display);
   glutKeyboardFunc(&keyPressed);
   glutFullScreen();
   glutIdleFunc(&display);
   InitGL(640, 480);
   glutMainLoop();
   return 1;
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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