Giter VIP home page Giter VIP logo

cool_gl's Introduction

Cool Gl

This software is being writen for an undergraduate course in graphics computing.

Building it:

mkdir build && cd build
cmake ..
make

Build for VPL:

TODO

cool_gl's People

Contributors

tarberd avatar matheusteixeira avatar

Watchers

James Cloos avatar  avatar  avatar

cool_gl's Issues

First partial delivery

Implemente o sistema básico de CG contendo:

  • Display file capaz de representar retas, polígonos e pontos
  • Cada objeto possui um nome
  • Cada objeto possui um tipo
  • Cada objeto possui sua lista de coordenadas
  • Funções de navegação 2D (movimentação do window)
  • Funções de Zoom (modificação do tamanho do window):

Requisitos:

  • Use a linguagem C++
  • Siga os templates de classe fornecidos no VPL
  • Use GTK+ 3.0

Third partial delivery

Acrescente ao seu Sistema Gráfico Interativo a capacidade de realizar rotações na Window. Para tal:

  • Altere a representação dos objetos do mundo para suportar representação em um dos sistemas de coordenadas vistos em aula: Sistema de Coordenadas Normalizado (SCN) ou o Sistema de Coordenadas do Plano de Projeção (PPC). Agora a transformada de viewport é feita com estas coordenadas novas.
  • Atualize a translação e o zoom da window tendo em vista o novo sistema de coordenadas. A translação em particular deve levar em conta sempre o "para cima" do ponto de vista do usuário.
  • Implemente a rotação implementando o algoritmo para gerar a descrição no sistema de coordenadas escolhido.
  • Atualize a interface da aplicação para que o usuário possa rotacionar a window também. Como a rotação é sempre ao redor do centro da window, basta um campo para colocar o ângulo de rotação.

Como implementar a rotação da window durante a navegação ?

Considere a window como um objeto gráfico qualquer e aplique a rotação de objetos sobre um ponto arbitrário à window em WC.
Recalcule as coordenadas do mundo em PPC aplicando o algoritmo Gerar Descrição em PPC
Observe que o mundo será girado na direção contrária àquela que você girou a window.

1.3.1 Rotação

Cuidado para não "quebrar" as funcionalidades que já existiam! Por exemplo, o que acontece com uma translação de um objeto quando a window está rotacionada em um ângulo qualquer? Em geral, o que deve ocorrer com a inclusão de um novo objeto quando a window se encontra fora de sua orientação padrão?

REQUISITOS ADICIONAIS:

O código entregue com este trabalho deve ser capaz de ler/escrever um mundo em formato Wavefront .obj file, devendo inluir todas as rotinas para leitura/escrita de arquivos .obj.

Sugestões de Modelagem:

Crie uma classe DescritorOBJ capaz de transcrever um objeto gráfico para o formato .obj, tomando seu nome, seu tipo, seus vértices e suas arestas.
Chame o descritor para cada objeto de seu mundo.
Assim você só precisa se preocupar com o cabeçalho do .obj. O resto de se resove através de um percurso do display file com seu descritor.

Second partial delivery

Neste trabalho você vai expandir o seu SGI - Sistema Gráfico Interativo para suportar as 3 transformações básicas e a rotação arbitrária em 2D.

Para tanto você vai criar uma rotina de transformação genérica, que aceita uma matriz de transformação em coordenadas homogêneas e um objeto qualquer para ser transformado e devolve este objeto após a aplicação da matriz. Esta rotina nada mais é do que uma forma extremamente simples de se implementar um engine gráfico. Para alimentar esta rotina você deve criar um conjunto de rotinas de “preparo” da matriz de transformação, que serão específicas para cada tranformação.

Para poder aplicar uma transformação sobre um determinado objeto do mundo, você deve permitir ao usuário que selecione um dos objetos de seu mundo na lista de objetos, escolha a transformação que deseja aplicar e entre com os dados para esta transformação em uma interface para isso.

Alternativamente você pode implementar a interação com os objetos através do mouse: permita ao usuário usar o botão direito do mouse para abrir um menu de contexto que permite aplicar uma transformação ao objeto sob o mouse. Em 2D isso é muito fácil de se implementar. Mais tarde, quando estivermos trabalhando em 3D, você verá que necessita de um algoritmo de buffer de profundidade para saber qual é o objeto mais próximo ao mouse na tela. Na Figura 2.23. da apostila (repetida abaixo) vemos a interface de um SGI mostrando a janela para entrada de dados de transformações sobre o objeto da lista que foi selecionado. Observe que a janela possui uma lista ao lado, onde são incluídas todasas transformações que se deseja realizar. A matriz de transformação resultante somente é calculada depois de o usuário entrar com todas as transformações que deseja.
Interface de Transformação
Como realizar a as transfromações ?

Resta a questão de como deverão ser implementadas as transformações.
O que nós desejamos que seja implementado são cinco transformações
úteis ao usuário de um SGI:

  • Translações
  • Escalonamento em torno do centro do objeto
  • Rotações Em torno do centro do mundo
  • Rotações Em torno do centro do objeto
  • Rotações Em torno de um ponto qualquer (arbitrário)‏

Na translação você simplesmente calcula a matriz no sistema de coordenadas homogêneo e aplica.

Para o escalonamento e para a rotação você vai precisar determinar o centro geométrico ou centro de massa do objeto a ser escalonado ou rotacionado. No caso da rotação nós já discutimos a razão para tanto: a rotação arbitrária que nos parece natural, é aquela onde um objeto roda em torno de seu centro. No caso do escalonamento temos a mesma situação: o escalonamento somente parece natural se o objeto parece “encolher” ou “inchar”.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.