This software is being writen for an undergraduate course in graphics computing.
mkdir build && cd build
cmake ..
make
TODO
Implemente o sistema básico de CG contendo:
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.
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:
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”.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.