Giter VIP home page Giter VIP logo

feup-cgra's People

Contributors

ca-moes avatar goncaloacteixeira avatar

Stargazers

 avatar  avatar

Watchers

 avatar

feup-cgra's Issues

AutoPilot Reset

image
image

Em autopilot:

  • ao clicar R tem de dar reset a tudo
  • ao clicar P tem que voltar ao estado normal

Screenshots MySupply

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.

Terreno - Alteração de Alturas

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:

  • Se necessário, para alinhar as imagens do cubemap com o terreno, aplicar translação
    em Y no terreno ou no cubo;
  • A posição e orientação inicial da câmara permita ver o dirigível e a maior parte da zona
    plana do terreno.
    Capture uma perspetiva da cena contendo o ambiente de fundo criado com o cubemap, o
    terreno, e o veículo. (2)

3. MyVehicle - 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.

5. MySupply - Launch Control

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):

  • Acrescente uma lista de 5 objetos do tipo MySupply, todos inativos inicialmente;
  • Nas funções update() e display() da cena, acrescente a invocação dos respetivos métodos update() e display() para cada um dos 5 objetos;
  • Acrescente o código necessário na função checkKeys() para detetar a tecla “L” e:
    • invocar o método drop() de um objeto inativo, fornecendo a posição atual do dirigível, iniciando assim a sua queda;
    • Atualizar um contador interno nSuppliesDelivered que indica o número de mantimentos que já foram lançados (a ser usado no ponto 6);

Keys para Interface

Ter teclas que sirvam como atalhos para elementos da interface. e.g. clicar F para ativar ou desativar a bandeira

White Lines on Cube Maps

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)

5. MySupply - Funcionalidades

  • 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)

Go Up and Down

Ter duas teclas que inclinem o blimp para cima ou para baixo e dar a possibilidade de alterar a altura

5. MySupply - Modelação e Texturas

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:

  • INACTIVE: Quando ainda não foi lançada - não é desenhada;
  • FALLING: Quando é lançada e enquanto está em queda - é desenhada com o material e texturas referidos acima, e animada como descrito no ponto 5.3;
  • LANDED: Quando cai no terreno, é desenhada de forma diferente para representar o resultado da queda (p.ex com as suas seis faces “espalhadas” no chão / caixa aberta). Sugere-se que implemente uma máquina de estados simples dentro da classe:
  • Defina uma enumeração dos estados possíveis, e no construtor inicialize uma variável que representará o estado.
const SupplyStates = {
    INACTIVE: 0,
    FALLING: 1,
    LANDED: 2
};
constructor ()
{
	this.state=SupplyStates.INACTIVE;
}

Dúvidas

  1. A modelação do blimp tem de ser feita em MyVehicle ou pode ser feita numa class à parte (e.g. MyBody) e MyVehicle usa uma instância dessa?
  2. Qual é o tempo mínimo entre drops de supplies?
  3. Vai ser testado o tempo que demora a fazer uma rotação e o tempo que demora a cair o supply, também será testado o tempo de rotação do blimp sobre si mesmo?
  4. Shaders de Terreno têm de ser usados em MyTerrain ou podem ser usados em MyScene?

^ Já mandei por PM estas dúvidas ao stor, quando ele responder aviso: ^
image

  1. Enunciado :

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?

Terreno - Shader Terreno

O terreno será construído recorrendo a duas texturas:

  • Uma que funciona como mapa de alturas (como o mapa de ondulação usado na água)
  • Outra como informação da cor a ser mapeada sobre o terreno

image

​ (origem: Outside of Society http://oos.moxiecode.com/js_webgl/terrain/index.html)

Para obter este efeito, sugere-se que:

  • Crie cópias dos ficheiros dos shaders “water.frag” e “water.vert”, com os novos nomes “terrrain.frag” e “terrain.vert”;
  • Retire dos novos shaders as partes referentes à animação;
  • Crie uma nova classe MyTerrain, que será constituído por um MyPlane com 20 divisões em cada direção (ver aula prática de shaders), e que contenha, inicialize e use os shaders terrain.frag e terrain.vert preparados nos pontos anteriores;
  • Crie uma instância de MyTerrain na cena com dimensões de 50x50 unidades, e com altura máxima de 8 unidades.
  • Teste uma versão inicial com as texturas de cor e altura fornecidas.

Mau Desempenho Movimento Blimp

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

6.2. Contador de mantimentos entregues

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):

  • um plano de base com uma textura decorativa que inclua o texto “Supplies Delivered”
  • Uma barra de progresso (detalhes abaixo)
  • duas traves que suportam a geometria acima.

image

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):

  • Quando a barra está totalmente preenchida (ou seja, todos os mantimentos entregues)
    deve ter o aspeto de um gradiente horizontal que varie de vermelho (RGB = 1,0,0) para
    verde (RGB = 0,1,0). Este gradiente deve ser calculado no fragment shader;
  • Quando apenas uma parte dos mantimentos tiver sido entregue, só deve ser visível a
    percentagem correspondente do gradiente. Por exemplo, quatro mantimentos entregues
    num total de cinco corresponderá a 80% do gradiente total;
  • A restante área deve ser preenchida com uma cor constante à escolha, desde que
    contraste com os tons do gradiente (no exemplo, cinzento RGB = 0.5,0.5,0.5).

Capture uma imagem do mostrador quando três mantimentos tiverem sido lançados. (6)
Submeta o código final. (1)

image

Supply - Melhorias de Física

Utilizar as formulas do movimento para que o supply tenha movimento horizontal dependendo da velocidade do dirigível.

Food for thought
image

AutoPilot - Supplies Falling

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.

Textura Vehicle

Quando desativamos os eixos o dirigível fica com uma textura aplicada.

image

Alinhamento da Câmara

Na classe MyScene, altere o código de forma a que:

  • Se necessário, para alinhar as imagens do cubemap com o terreno, aplicar translação
    em Y no terreno ou no cubo;
  • A posição e orientação inicial da câmara permita ver o dirigível e a maior parte da zona
    plana do terreno.

Textura Flag a partir de Shader

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().

Progressão da bandeira

A bandeira tem movimento ondulatório mas esse movimento tem de se propagar pela bandeira e não ser estático

ezgif com-video-to-gif

6.1 - Bandeira

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:

  • Alterar a altura dos vértices do plano de forma a recriar um efeito de “ondulação” no
    objeto, seguindo uma função sinusoidal (Sugestão: use as coordenadas de textura
    como parâmetro);
  • O efeito de ondulação deverá ser animado, e a velocidade da animação deverá
    depender da velocidade do dirigível;
  • Aplique uma textura à escolha com o fragment shader.

image

Capture uma imagem que demonstre o dirigível com a bandeira criada, em que seja possível
observar a ondulação na mesma

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.