segunda-feira, 30 de maio de 2011

Mais um Artigo de Revista Científica Internacional

Prezados, como eu havia antecipado, saiu mais um artigo meu e de colaboradores em uma revista internacional. Dessa vez foi na "Computer Methods in Biomechanics and Biomedical Engineering". Trata-se de um artigo que analisa imagens de ressonância magnética para medidas ortodônticas.

Mais uma vez tenho que destacar o papel que a FEI realiza nos dando todo o suporte para que possamos nos dedicar à pesquisa e também nos proporcionando um ambiente acadêmico comparável aos melhores do mundo.

Dessa vez, eu assinei um termo que não poderia deixar o artigo pra download. Assim, deixei as duas primeiras páginas. Quem quiser dar uma olhada, faça o download aqui: Download das 2 primeiras páginas

Para aqueles que gostarem do assunto, posso enviar uma cópia individual por email.

abraços a todos,

Paulo Sérgio

domingo, 29 de maio de 2011

Artigo na Área Médica Publicado

Caros, tive a grata satisfação esses dias de saber que um artigo meu e de colaboradores acabou de ser publicado na revista  "Journal of Medical Imaging and Health Informatics", uma respeitada revista internacional na área médica.

O artigo, cujo título é "CARES 2.0: Completely Automated Robust Edge Snapper for CIMT Measurement in 300 Ultrasound Images - A Two Stage Paradigm" é fruto de meu trabalho com colaboradores em Universidades Italianas, onde estudei parte de meu doutorado, e nos EUA, onde tenho fortes parcerias na Universidade de Idaho.

O artigo trata de um estudo sobre medidas da camada de gordura da carótida, aquela artéria grande que fica no pescoço e que pode levar a sérias complicações cardíacas.

Embora o maior mérito seja do Molinari e depois dos demais autores, a FEI  tem grande participação no sucesso alcançado devido às condições de trabalho que nos proporciona: seja nos liberando para dedicação à pesquisa, seja nos proporcionando contato com pessoas de bom nível de todo o mundo. Tenho orgulho de dar aulas nessa instituição, tenho orgulho de ser FEIano.

O link da revista é esse aqui: Link da Revista

Mas, para os amigos aqui vai um link do artigo: Download PDF

Tive também a notícia de mais 2 artigos internacionais aceitos. Mais tarde eu posto.


abraço a todos,
Paulo Sérgio

sábado, 28 de maio de 2011

Programa da Prova de Laboratório

Prezados, aqui vai o código que eu fiz para a prova de laboratório. Para quem não conseguiu fazer e gostaria de saber como:



//*****************************************************
//
// Animação com Primitivas 3D
// Programa OpenGL de Animação de Primitivas 3D feito para
// a prova de laboratório da Turma CC6111 de Computação Gráfica
// do Centro Universitário da FEI, aplicada em 27/05/11
// Autores: Prof. Dr. Paulo Sérgio Rodrigues e Mestrando Guilherme Alberto Wachs-Lopes
//
// Objetivo: Animar uma primitiva gráfica 3D utilizando Visão Perspectiva e Modelos de Iluminação
//

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

// variáveis Globais
double zoom; // controla o Zoom
double posx,posy,posz; // controla asa translações
double vx,vy,vz;  // controla as posições
double rx,ry,rz; // controla as rotações


// Função responsável pela especificação dos parâmetros de iluminação
void DefineIluminacao (void)
{
 // Capacidade de brilho do material
 GLfloat especularidade[4]={0.7,0.7,0.7,1.0};
    GLfloat MatDifuse[4]={1.0,0,0,1.0}; 
 GLint especMaterial = 125;
           
    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]={0.5, 0.5, 0.5, 1.0};// "brilho"
 GLfloat posicaoLuz[4]={0, 0, 20, 1};
 // Define a refletância do material
 glMaterialfv(GL_FRONT,GL_SPECULAR, especularidade);
 // Define a concentração do brilho
 glMateriali(GL_FRONT,GL_SHININESS,especMaterial);

    glMaterialfv(GL_FRONT,GL_DIFFUSE,MatDifuse);
 // 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 o uso de iluminação
 glEnable(GL_LIGHTING); 
 // Habilita a luz de número 0
 glEnable(GL_LIGHT0);
 // Habilita o depth-buffering
 //glEnable(GL_DEPTH_TEST);
 
}


// Função callback chamada quando o tamanho da janela é alterado
void AlteraTamanhoJanela(GLsizei w, GLsizei h)
{
    GLsizei largura, altura;
   
   // Evita a divisao por zero
    if(h == 0)  h = 1;
   
    // Atualiza as variáveis
    largura = w;
    altura = h;
   
   // Especifica as dimensões da Viewport
    glViewport(0, 0, largura, altura);
   
    // Inicializa o sistema de coordenadas
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
   
    glOrtho(-100.0,100.0,-100.0,100.0,-100.0,100);
    glMatrixMode(GL_MODELVIEW);
   
   glLoadIdentity();
}


// Função callback chamada para gerenciar eventos de teclas
void Teclado (unsigned char key, int x, int y)
{
 if (key == 27)
  exit(0);
}


// Função responsável por inicializar parâmetros e variáveis
void Inicializa (void)
{  
    // inicializa variáveis   
    zoom = 120.0;
    posx = 20.0;
    posy = 0.0;
    posz = 0.0;
    vx = 1.0;
    vy = 0.5;
    vz = 0;
    rx = 0.0;
    ry = 0.0;
    rz = 0;   
   
   // Define a cor de fundo da janela de visualização como branca
   glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
   glEnable(GL_CULL_FACE);
   // Habilita o modelo de colorização de Gouraud
   glShadeModel(GL_SMOOTH);   
    DefineIluminacao();
}

void animacao(int){
    
    double velCor=0.1;
  
    // verifica se objeto nao ultrapassou janela
    if (posx > 100 || posx < -100){
     vx=-vx;
    }
   
    // verifica se objeto nao ultrapassou janela   
    if (posy > 100 || posy < -100){
     vy=-vy;
    }
   
    // atualiza translacao
    posx+=vx;   
    posy+=vy;
   
    // artualiza a rotação
    rx += 1;
    ry += 2;
           
    glutPostRedisplay();    
    glutTimerFunc(1,animacao,1);
         
}


void desenha(){
   
     // limpa as matrizes de desenho    
     glLoadIdentity();
     glClear(GL_COLOR_BUFFER_BIT);

     // realiza as transformacoes
     glTranslatef(posx,posy,posz);
     glRotatef(rx,1,0,0);
     glRotatef(ry,0,1,0);    

     // desenha uma esfera
     glTranslatef(-5,-5,0);
     glutSolidSphere(10,30,30);
    
     // desenha um cubo
     glTranslatef(10,10,0);
     glutSolidCube(10);
    
     // desenha a outra esfera
     glTranslatef(10,10,0);
     glutSolidSphere(10,30,30);
    
     glutSwapBuffers();    
}


// Programa Principal
int main(void)
{  
   
    // Define do modo de operação da GLUT
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);

 // Especifica a posição inicial da janela GLUT
 glutInitWindowPosition(5,5);

 // Especifica o tamanho inicial em pixels da janela GLUT
 glutInitWindowSize(600,600);

 // Cria a janela passando como argumento o título da mesma
 glutCreateWindow("Prova de Laboratório");

 // Registra a função callback de redesenho da janela de visualização
 glutDisplayFunc(desenha);

 // Registra a função callback de redimensionamento da janela de visualização
 glutReshapeFunc(AlteraTamanhoJanela);

 // Registra a função callback para tratamento das teclas ASCII
 glutKeyboardFunc (Teclado);
   
glutTimerFunc(10,animacao,1);
   
 // Chama a função responsável por fazer as inicializações
 Inicializa();

 // Inicia o processamento e aguarda interações do usuário
 glutMainLoop();

 return 0;
}

quinta-feira, 19 de maio de 2011

Simulação 3D de Tecido com o Massa-Mola

Prezados,

fiz um vídeo da simulação 3D com o massa-mola, que eu abordei na última aula. Será esse o último exercício do semestre. Fiquei muito orgulhoso. O Guilherme me ajudou a preparar.

Não conheço nenhum curso de Ciência da Computação que aborda esse tipo de coisa. É bem moderno, mas não deixa de ser simples: Fazer animação com equações físicas. Isso serve para várias aplicações como Industria Cinematográfica, Marketing, TV; e também para estudo do comportamento de tecidos em diversos ambientes.

Espero que gostem, passem a estudar melhor o assunto e ajudem vocês na carreira profissional. Tanto no trabalho em si, quanto para arrumar um posto de trabalho. Melhor ainda se vierem fazer mestrado aqui comigo na área de Modelagem 3D; ou mesmo um TCC.




[[]]'s
Paulo Sérgio

segunda-feira, 9 de maio de 2011

Exercício 2 sobre Phong

Considerando o exercício postado por último (logo abaixo neste blog), se o modelo de iluminação é I = Ia * cos(t), onde Ia é a intensidade de iluminação ambiente, e "t" é o ângulo de reflexão dada pela direção do vetor normal à malha, e supondo que todos os pontos do polígono foram pintados com a cor RGB = (200,10,10), qual o valor da cor observada em cada ponto encontrado no último exercício 1 para que tenhamos a sensação de sombreamento segundo o algoritmo de Phong?

Exercício sobreo Algoritmo de Phong

Suponto a malha poligonal 2D formada pelos seguintes conjuntos de pontos: P = {(2,2),(4,3),(5,3),(4,6),(2,5)}, onde em cada um desses 5 pontos sabemos a direção em graus dos vetores normais, que são as seguintes (considere o sentido anti-horário e o eixo horizontal como sendo zero grau); D = {225,270,0,45,135}. Qual o valor das direções desses vetores nos pontos médios entre cada par de pontos percorrendo o polígono no sentido anti-horário?

Exercício sobre o Algoritmo de Gouraud

Seja um polígono num sistema de coordenadas 2D com os seguintes pontos: P = {(2,2),(3,5),(5,3),(6,4)}, supondo refletirem as seguintes intensidades luminosas: L = {50,30,10,20}, respectivamente. Qual o valor da intensidade luminosa que é observada no seu centro geométrico, segundo o modelo de Guraud?