goncaloacteixeira / feup-cgra Goto Github PK
View Code? Open in Web Editor NEWComputer Graphics Curricular Unit - 2019/2020
Home Page: https://skdgt.github.io/feup-cgra/proj/
Computer Graphics Curricular Unit - 2019/2020
Home Page: https://skdgt.github.io/feup-cgra/proj/
Parte final do projeto
Capture uma imagem da cena onde se veja um mantimento em queda (com o estado
FALLING), e outra na qual se observe um mantimento já no terreno (com o estado LANDED).
Utilize o zoom da câmara para se poder observar bem os detalhes dos objetos em questão.
Modifique a textura de alturas (usando um editor de imagem) de forma a que haja uma
zona central plana de dimensões aproximadas de 20x20 unidades (altura a zero, Y=0).
Em alternativa, poderá substituir as texturas fornecidas por outro par de texturas de cor
e altura para o efeito - mas que terá de ter a zona central plana como descrito.
Na classe MyScene, altere o código de forma a que:
Helices
O Dirigível demora mais de 5 segundos a completar uma volta em modo de piloto automático.
lemes podem se mexer a partir de A ou S em autopilot
Screenshot do Dirigivel Modelado + Textura
Coloque-o [Dirigível] de forma que o centro do
elipsóide fique na posição (0, 10, 0). O corpo principal deverá ter, aproximadamente,
comprimento de 2 unidades, e largura e altura de 1 unidade. Os diferentes objetos utilizados
para criar o dirigível deverão ter materiais e texturas aplicados aos mesmos, adequados às
partes do dirigível que representam.
Submeta uma imagem da aparência do dirigível que permita ver os detalhes e as texturas.
Adicione a MyScene a funcionalidade de lançar 5 mantimentos do dirigível, que deverá funcionar da seguinte forma:
Ao pressionar a tecla “L”, um objeto MySupply deverá surgir na parte inferior do dirigível, e iniciar a sua queda;
O mantimento deverá demorar 3 segundos a atingir o plano XZ (Y nulo);
Quando o mantimento atingir o plano XZ, deve ser desenhado de forma diferente (ver estado LANDED no ponto 5.1).
Nota: a função de reset (tecla “R”) deve também fazer reset aos mantimentos, removendo-os da cena e disponibilizando-os para novos lançamentos.
Sugere-se para esse efeito que altere o seguinte na classe MyScene (sugestões não exaustivas, poderão ter de acrescentar/alterar outras funcionalidades):
Ter teclas que sirvam como atalhos para elementos da interface. e.g. clicar F para ativar ou desativar a bandeira
As linhas brancas têm de desaparecer para dar o efeito horizonte.
O photoshop consegue preencher um pouco os espaços brancos e fazer desaparecer essas linhas
Ou então alterar as coordenadas de forma a não apanhar espaços brancos (o que vai fazer com que a imagem fique desalinhada)
Passar as informações do terreno de Scene para MyTerrain (new)
Modelação do Dirigivel
Nas funções MySupply.update() e MySupply.display(), utilize o valor de this.state para escolher o tipo de atualização/desenho a levar a cabo (por exemplo, a função update só precisará de atualizar a posição da caixa quando ela está a cair, nos outros estados provavelmente não terá de fazer nada).
Implemente os métodos necessários para despoletar as mudanças de estado:
drop(dropPosition)
- para transitar de INACTIVE para FALLING e começar a animação de queda a partir da dropPosition (posição atual do dirígivel)land()
- a ser chamada quando a animação de queda termina, para determinar se atingiu o plano XZ (Y=0) ou não. Se isto se verificar, deve transitar de FALLING para LANDED. ○ Outros métodos que considerem relevantes (por exemplo, e como sugestão apenas, podem ter funções de desenho auxiliares - displayFalling, displayOnLanded - que sejam chamadas pela função display, dependendo do estado)Ao baixar a resolução de imagens aumenta muito a performance
Ter duas teclas que inclinem o blimp para cima ou para baixo e dar a possibilidade de alterar a altura
Capture uma perspetiva da cena contendo o ambiente de fundo criado com o cubemap, o
terreno, e o veículo. (2)
Crie uma nova classe MySupply, que será baseada no código da classe MyUnitCubeQuad (ou seja, terá o mesmo código inicialmente, que deverá ser alterado como indicado a seguir), com materiais e texturas à escolha de cada grupo (p.ex. de uma caixa de madeira). Esta classe deverá contemplar os seguintes estados:
const SupplyStates = {
INACTIVE: 0,
FALLING: 1,
LANDED: 2
};
constructor ()
{
this.state=SupplyStates.INACTIVE;
}
Zips do código para submissão.
Lemes
^ Já mandei por PM estas dúvidas ao stor, quando ele responder aviso: ^
O efeito de ondulação deverá ser animado, e a velocidade da animação deverá
depender da velocidade do dirigível;
Estado o dirigivel parado é suposto não ter animação?
O terreno será construído recorrendo a duas texturas:
(origem: Outside of Society http://oos.moxiecode.com/js_webgl/terrain/index.html)
Para obter este efeito, sugere-se que:
Movimento lento (invés de com cortes como em piloto automático) do dirigível com os shaders ativos num ambiente de baixo desempenho
How-to-fix: Mesmo que piloto automático -> update da posição baseado em time elapsed
Crie uma nova classe MyBillboard, para representar um mostrador com o número de
mantimentos (MySupply) lançados, tal como contabilizado pela variável nSuppliesDelivered.
Este mostrador deverá ser constituído por (ver figura 9, dimensões indicativas):
O plano de base deve ter dimensões 2 x 1 unidades, as traves devem ter altura de uma
unidade, e o mostrador deve ser colocado no terreno numa posição bem visível no ponto de
vista inicial da câmara.
A barra de progresso deve ser constituída por um único plano de dimensões 1.5 x 0.2 unidades
(largura x altura) associado a um par de shaders desenvolvido especificamente para o efeito e
ativado na classe MyBillboard, obedecendo ao seguinte (ver figura 10):
Capture uma imagem do mostrador quando três mantimentos tiverem sido lançados. (6)
Submeta o código final. (1)
Falta pôr a quantidade de rotação do blimp sobre si mesmo a depender do tempo elapsed
Does not work
Quando está em piloto automático as caixas saem de (0, y, 0)
possível fix: atualizar a posição das caixas no código do autopilot.
melhorias no código
Piloto automático
Na classe MyScene, altere o código de forma a que:
Aplique uma textura à escolha com o fragment shader
Com o problema do bind() apliquei uma CGFappearance e não uma CGFtexture, na aula pergunto ao stor como usar o bind().
Criar mais texturas para blimp que podem ser escolhidas a partir da interface
Adicione um objeto da classe MyPlane à classe MyVehicle, e coloque-o atrás do corpo do
dirigível, semelhante ao exemplo na Figura 8. Crie e inicialize shaders em MyVehicle que
serão aplicados ao novo objeto bandeira, que deverão:
Capture uma imagem que demonstre o dirigível com a bandeira criada, em que seja possível
observar a ondulação na mesma
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.