igorceridorio / Graphic-Library

Graphic library of Computação Gráfica course.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Biblioteca Gráfica

Projeto da disciplina de Computação Gráfica

Esta é uma biblioteca gráfica incrementada ao longo do semestre.

Instruções para compilação e execução

Você pode utilizar o makefile, usando os comandos abaixo.

$ make              # compila os arquivos
$ ./program         # executa o programa
$ make uninstall    # remove arquivos temporários e o executável

Alternativamente, você pode utilizar os comandos abaixo.

$ gcc main.c graphiclib.c -o program -lm -lX11   # compila os arquivos
$ ./program                                      # executa o programa

Lista mínima de funções para serem implementadas

A) Para o caso 2D
  • 1) uma estrutura com as dimensões mínimas e máximas de uma janela;
  • 2) uma estrutura com as dimensões mínimas e máximas de uma "viewport";
  • 3) uma estrutura para um ponto bidimensional;
  • 4) uma estrutura para um objeto bidimensional;
  • 5) uma estrutura para uma "look up table";
  • 6) uma função que converte coordenadas do SRU para o SRN;
  • 7) uma função que converte coordenadas do SRN para o SRD;
  • 8) uma função que cria um buffer associado ao SRD;
  • 9) uma função que cria uma janela;
  • 10) uma função para traçado de segmentos de reta no SRD utilizando a abordagem incremental de funções;
  • 11) uma função para traçado de segmentos de reta no SRD utilizando o algoritmo do ponto médio;
  • 12) uma função para preenchimento de um polígono (objeto 2D) no SRD (considerando as 3 abordagens discutidas);
  • 13) funcões que realizam o deslocamento, rotação, escalonamento, cisalhamento e espelhamento na forma de operadores lineares considerando coordenadas homegêneas;
  • 14) funções para a conversão entre os sistemas de cores RGB e HSV e vice-versa;
  • 15) uma função para mapear o SRD no monitor para visualização (deve-se passar o SRD, matriz, e a "look up table");
  • 16) uma função que implementa a multiplicação de uma matriz por um vetor (já considerando coordenadas homogêneas, isto é, matrizes de tamanho 3 x 3 no caso bidimendional);
  • 17) uma função que implementa a multiplicação de duas matrizes 3 x 3.

Obs: as funções do item 13 podem todas ser simplificadas com o uso da função do item 16, bastando passar a matriz correta para a função.

B) Para o caso 3D
  • 1) uma estrutura para um ponto tridimensional;
  • 2) uma estrutura para uma face do objeto tridimensional;
  • 3) uma estrutura para um objeto tridimensional;
  • 4) uma função que dado dois vetores realize o produto vetorial entre eles;
  • 5) uma função auxiliar para normalizar vetores (lembre-se que a base do observador deve ser ortonormal);
  • 6) uma função que cria uma face de um objeto tridimensional (corresponde a aresta do objeto 2D);
  • 7) uma função que realiza uma mudança de base entre bases ortonormais;
  • 8) uma função que realiza uma projeção perspectiva na forma de uma transformação linear considerando coordenadas homegêneas;
  • 9) uma função que implementa uma curva de Bèzier ou uma função que implementa uma B-Spline (escolha uma!);
  • 10) funções que realizam o deslocamento, rotação, escalonamento, cisalhamento e espelhamento na forma de operadores lineares considerando coordenadas homegêneas no espaço tridimensional;
  • 11) uma função para o algoritmo "z-buffer" (exercício opcional, pois provavelmente não teremos tempo hábil para discutir essa teoria em sala de aula);
  • 12) uma função que implementa a multiplicação de uma matriz por um vetor (já considerando coordenadas homogêneas, isto é, matrizes de tamanho 4 x 4 no caso tridimendional);
  • 13) uma função que implementa a multiplicação de duas matrizes 4 x 4.

Obs 01: as funções dos itens 7, 8 e 10, podem todas ser implementadas com a função do item 12;

Obs 02: a geração da base do observador seguindo os passos dados em sala de aula já garante que a base seja orientada positivamente, isto é, seguindo a regra da mão direita. Contudo, se o aluno optar por uma forma diferente, deverá criar uma função que verifique se a nova base é positiva, pois, caso contrário, os resultados não serão consistentes.

TO-DO
  • Realizar verificações em geral de tamanhos de janelas;
  • Estudar e implementar a mudança de base do SRN para o SRD (3D)
  • Função que multiplica uma matriz por um vetor (Retirar os Warnings)
  • Função que multiplica duas matrizes (Retirar os Warnings)
  • Organizar as funções na ordem numérica dada à elas.

About

Graphic library of Computação Gráfica course.


Languages

Language:C 93.4%Language:Objective-C 6.6%