Skip to content

Merilonimbus/Firework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Firework

Installation

Pour ce projet, vous devez avoir sur votre machine :

  • Une distribution d'OpenGL 4.5
  • La bibliothèque glew
  • La bibliothèque GLUT
  • La bibliothèque glfw3
  • Un compilateur C++

Lancement

./linux.sh
./firework

Introduction

Le projet Firework a pour but de modéliser en 3D un feu d'artifice ainsi que le canon par lequel ceux-ci sont lancé. Pour cela, nous utilisons l'API OpenGL.

Pipeline

graph LR

%% STYLE DEFINITIONS
classDef hub fill:transparent, stroke:none;
classDef buffer fill:#d1e7ff,stroke:#1e88e5,stroke-width:1px,color:#003366;
classDef uniform fill:#ffe6b3,stroke:#ffb300,stroke-width:1px,color:#664400;
classDef shaderLauncher fill:#c8e6c9,stroke:#388e3c,stroke-width:1px,color:#1b5e20;
classDef shaderFirework fill:#ffcdd2,stroke:#e53935,stroke-width:1px,color:#b71c1c;
classDef shaderCompute fill:#d1c4e9,stroke:#673ab7,stroke-width:1px,color:#311b92;
classDef output fill:#fff3e0,stroke:#fb8c00,stroke-width:1px,color:#e65100;

%% DATA
subgraph buffers[Buffers]
    subgraph ssbo[SSBOs]
        fd[/Firework Data/]:::buffer
        fp[/Firework Positions/]:::buffer
        fc[/Firework Colors/]:::buffer
    end
    subgraph vbo[VBOs]
        lv[/Launcher Vertex/]:::buffer
        lns[/Launcher Normal Smooth/]:::buffer
    end
    vboHub(( )):::hub
end

subgraph u[Uniforms]
    lWM([Launcher WorldView Matrix]):::uniform
    fWM([Firework WorldView Matrix]):::uniform
    cM([Camera Matrix]):::uniform
    at([Animation Time]):::uniform
    mt([Max Time]):::uniform
    mc([Max Count]):::uniform
    me([Max Explosion]):::uniform
end

%% SHADERS
subgraph launcher[Launcher Shaders]
    direction LR
    lV[Vertex Shader]:::shaderLauncher --> lTC[Tessellation Control]:::shaderLauncher
    lTC --> lTE[Tessellation Evaluation]:::shaderLauncher
    lTE --> lF[Fragment Shader]:::shaderLauncher
end

subgraph firework[Firework Shaders]
    direction LR
    fV[Vertex Shader]:::shaderFirework --> fG[Geometry Shader]:::shaderFirework
    fG --> fF[Fragment Shader]:::shaderFirework
end

subgraph generate[Generate Shaders]
    direction TB
    gC[Compute Shader]:::shaderCompute
end

subgraph mouvement[Movement Shaders]
    direction TB
    mC[Compute Shader]:::shaderCompute
end

%% OUTPUT
R([Final Image]):::output

%% HUBS
timeHub(( )):::hub
computeHub(( )):::hub
ssboHub(( )):::hub
rHub(( )):::hub
camHub(( )):::hub
fireworkHub(( )):::hub

%% DATA FLOWS
fd -.-> mC
fp -.- fireworkHub
fc -.- fireworkHub
fireworkHub -.-> fV

lv -.- vboHub
lns -.- vboHub
vboHub -.-> lV

at -.- timeHub
timeHub -.-> launcher
timeHub -.-> firework

cM -.- camHub
camHub -.-> launcher
camHub -.-> firework

lWM -.-> launcher
fWM -.-> firework

mt -.- computeHub
mc -.- computeHub
me -.- computeHub
at -.- computeHub

computeHub -.-> gC
computeHub -.-> mC

%% SHADER PIPELINES
gC --> fd
mC --- ssboHub
ssboHub --> fp
ssboHub --> fc

fF --- rHub
lF --- rHub
rHub --> R
Loading

Version simplifiée

graph LR

%% STYLE DEFINITIONS
classDef hub fill:transparent, stroke:none;
classDef shaderLauncher fill:#c8e6c9,stroke:#388e3c,stroke-width:1px,color:#1b5e20;
classDef shaderFirework fill:#ffcdd2,stroke:#e53935,stroke-width:1px,color:#b71c1c;
classDef shaderCompute fill:#d1c4e9,stroke:#673ab7,stroke-width:1px,color:#311b92;
classDef output fill:#fff3e0,stroke:#fb8c00,stroke-width:1px,color:#e65100;

subgraph generator[Generator Shaders]
    gC[Compute Shader]:::shaderCompute
end 
subgraph movement[Movement Shaders]
    mC[Compute Shader]:::shaderCompute
end 

subgraph launcher[Launcher Shaders]
    lV[Vertex Shader]:::shaderLauncher --> lTC[Tessellation Control]:::shaderLauncher
    lTC --> lTE[Tessellation Evaluation]:::shaderLauncher
    lTE --> lF[Fragment Shader]:::shaderLauncher
end

subgraph firework[Firework Shaders]
    fV[Vertex Shader]:::shaderFirework --> fG[Geometry Shader]:::shaderFirework
    fG --> fF[Fragment Shader]:::shaderFirework
end

%% OUTPUT
R([Final Image]):::output

%% HUBS
rHub(( )):::hub

%% SHADER PIPELINES
generator -.-> movement
movement -.-> firework
movement -.-> launcher

fF --- rHub
lF --- rHub
rHub --> R
Loading

Firework

Voici un graph simple du cycle de vie d'une ligne de feu d'artifices :

generate

graph LR
    classDef l1 fill:#c8e6c9,stroke:#388e3c,stroke-width:1px,color:#1b5e20;
    classDef l2 fill:#ffcdd2,stroke:#e53935,stroke-width:1px,color:#b71c1c;

    i[initialisation de la ligne de lancement]:::l1
    e[explosion]:::l1
    i2[initialisation des lignes de secondaires]:::l2
    f[disparait]:::l2
    
    i -- si la ligne a expiré --> e
    e --> i
    e --> i2
    i2 --si la ligne a expiré--> f
Loading

About

Création de pipelines graphiques OpenGL modélisant un feu d’artifice.

Topics

Resources

Stars

Watchers

Forks