Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions examples/SolarleJcleS/systeme.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// Write your code HERE
void main() {
float angle = step * 0.01;

float angle1 = step * 0.01;

float angle2 = step * 0.01;

float angle3 = step * 0.01;


uint x = gl_GlobalInvocationID.x;
uint y = gl_GlobalInvocationID.y;
uint p = x + y * WSX;

int cx = int(WSX) / 2;
int cy = int(WSY) / 2;

int dx = int(x) - cx;
int dy = int(y) - cy;

// Calcul de l'angle de rotation (par exemple, utiliser le temps ou un compteur pour l'animation)

float cosAngle = cos(angle);
float sinAngle = sin(angle);

int newDx = int(dx * cosAngle - dy * sinAngle);
int newDy = int(dx * sinAngle + dy * cosAngle);

int newX = newDx + cx;
int newY = newDy + cy;

// Calcul de la distance entre ce pixel et le centre de l'image
int dist = (newX - cx) * (newX - cx) + (newY - cy) * (newY - cy);

// Rayon du cercle (150 pixels de rayon)
int radius = 250 * 250;

int trait1 = 450 * 450;

int planetRadius = 50;
int planetX = int(cx + 450 * cosAngle);
int planetY = int(cy + 450 * sinAngle);

int dist2 = (x - planetX) * (x - planetX) + (y - planetY) * (y - planetY);

int radiusPlanet = planetRadius * planetRadius;

int dist2 = (x - cx) * (x - cx) + (y - cy) * (y - cy);
int radiusEarth = 250 * 250; // Rayon de la Terre

if (dist2 <= radiusEarth) {
data_0[p] = 0xFF0000FF;
}
else if (dist <= radiusPlanet) {
data_0[p] = 0xFFFFFF00;
}
else {
data_0[p] = 0xFF000000; // Fond noir (R = 0, G = 0, B = 0, A = 255)
}
}
2 changes: 1 addition & 1 deletion examples/basic_examples/example_2.tscn
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[gd_scene load_steps=3 format=3 uid="uid://cotswmubn7uvm"]

[ext_resource type="Script" uid="uid://c8esqdv0y26yp" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_2cs40"]
[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_2cs40"]
[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="2_j6qu8"]

[node name="Example2" type="Node2D"]
Expand Down
2 changes: 1 addition & 1 deletion examples/basic_examples/example_4.tscn
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[gd_scene load_steps=3 format=3 uid="uid://b2ip5eftk3aij"]

[ext_resource type="Script" uid="uid://c8esqdv0y26yp" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_ke3fj"]
[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_ke3fj"]
[ext_resource type="Texture2D" uid="uid://2behgeplwycn" path="res://examples/grid_512x512.png" id="2_flqlh"]

[node name="CompShadStudioEx4" type="Node2D"]
Expand Down
97 changes: 87 additions & 10 deletions examples/basic_examples/example_5.cpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,88 @@
// Write your code HERE
//Notes de jamais mettre d'accent
//--------------------------------------------------
//Ajout possibles :
//------Etoiles random en blancs
//------Apparition des planetes non lineaires ou random
//------Esthetiques des planetes
//--------------------------------------------------

void main() {
uint x = gl_GlobalInvocationID.x;
uint y = gl_GlobalInvocationID.y;
uint p = x + y * WSX;
int dx = int(WSX)/2 - int(x);
int dy = int(WSY)/2 - int(y);
int r = int(64.0*sin(step/100.0));
int d = int(dx*dx+dy*dy) ;
data_0[p] = 0xFF000000 - 600* (d + step) ;
}

//Coordonnees pour la Suite -----------------------------------------------------------------------------------

uint x = gl_GlobalInvocationID.x;
uint y = gl_GlobalInvocationID.y;
uint p = x + y * WSX;

int cx = int(WSX) / 2;
int cy = int(WSY) / 2 - 60; //centrage du systeme

int dx = int(x) - cx;
int dy = int(y) - cy;
//-----------------------------------------------------------------------------------------------------------

//Valeur pour Soleil -----------------------------------------------------------------------------------------

int distSoleil = dx * dx + dy * dy;
int Soleil = 50 * 50;

//Tableau des planetes --------------------------------------------------------------------------------------

struct Planete {
float vitesse; // par rapport a step (vitesse * step)
int distance; //par rapport au centre
int rayon; // taille du cercle
int couleur;
};

Planete planetes[8] = {
{ 0.01, 80, 15, 0xFF0000FF }, // Mercure
{ 0.008, 120, 30, 0xFF5500FF }, // Venus
{ 0.005, 150, 30, 0xFF55FF00 }, // Terre
{ 0.003, 200, 20, 0xFF0055FF }, // Mars
{ 0.0009, 250, 55, 0xFF00DDFF }, // Jupiter
{ 0.0005, 300, 40, 0xFF00EEFF }, // Saturne
{ 0.0003, 450, 50, 0xFFF5F5F5 }, // Uranus
{ 0.0002, 550, 45, 0xFFFF1100 } // Neptune
};

// Affichage et couleur
if (distSoleil <= Soleil) {
data_0[p] = 0xFF0022FF; //rouge
if(distSoleil <= Soleil - 200){
data_0[p] = 0xFF00FFFF; //rouge
}
if(distSoleil <= Soleil - 1500){
data_0[p] = 0xFFFFFFFF; //rouge
}
} else {
for (int i = 0; i < 8; i++) { //pour chaque planete de planetes

//vitesse de la planete ---------------------------------------------------
float angle = step * planetes[i].vitesse;
float cosAngle = cos(angle);
float sinAngle = sin(angle);
//-------------------------------------------------------------------------

//position de la planete par rapport au soleil ----------------------------
int planetX = int(cx + planetes[i].distance * cosAngle);
int planetY = int(cy + planetes[i].distance * sinAngle);
//-------------------------------------------------------------------------

int distPlanete = (int(x) - planetX) * (int(x) - planetX) + (int(y) - planetY) * (int(y) - planetY);
int distTrait = dx * dx + dy * dy;

//Conditions pour colorer le bonne endroit de la planete--------------------
if (distPlanete <= planetes[i].rayon * planetes[i].rayon) {
data_0[p] = planetes[i].couleur; //coloration de la planete
return;
} else if (distTrait <= (planetes[i].distance * planetes[i].distance) + 1000 && distTrait >= (planetes[i].distance * planetes[i].distance) - 1000) {
data_0[p] = 0xFF808080; //coloration du trait de l'orbite
return;
}
//-------------------------------------------------------------------------

}
data_0[p] = 0xFF000000; //sinon coloris en noir
}
}
24 changes: 6 additions & 18 deletions examples/basic_examples/example_5.tscn
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[gd_scene load_steps=4 format=3 uid="uid://cets11mlsd8hb"]

[ext_resource type="Script" uid="uid://c8esqdv0y26yp" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_cogap"]
[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_cogap"]

[sub_resource type="FastNoiseLite" id="FastNoiseLite_pm7bb"]

Expand All @@ -13,26 +13,14 @@ noise = SubResource("FastNoiseLite_pm7bb")

[node name="ComputeShaderStudio2D2" type="Node" parent="." node_paths=PackedStringArray("data")]
script = ExtResource("1_cogap")
WSX = 256
WSX = 1920
WSY = 1080
glsl_file = "res://examples/basic_examples/example_5.cpp"
GLSL_code = ""
data = [NodePath("../TextureRect")]

[node name="Label" type="Label" parent="."]
offset_left = 278.0
offset_top = -1.0
offset_right = 679.0
offset_bottom = 101.0
scale = Vector2(1.72, 1.72)
text = "Compute Shader Studio
Example 5: using an external GLSL file
and a TextureRect"
horizontal_alignment = 1
vertical_alignment = 1

[node name="TextureRect" type="TextureRect" parent="."]
offset_left = 278.0
offset_top = 192.0
offset_right = 975.0
offset_bottom = 629.0
offset_right = 256.0
offset_bottom = 128.0
texture = SubResource("NoiseTexture2D_nxi5j")
metadata/_edit_use_anchors_ = true
3 changes: 2 additions & 1 deletion examples/example_1.tscn
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[gd_scene load_steps=5 format=3 uid="uid://ddr6qtwy1pesd"]

[ext_resource type="Script" uid="uid://c8esqdv0y26yp" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_6846p"]
[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_6846p"]
[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="2_s3fct"]

[sub_resource type="FastNoiseLite" id="FastNoiseLite_dmk8h"]
Expand All @@ -14,6 +14,7 @@ noise = SubResource("FastNoiseLite_dmk8h")

[node name="ComputeShaderStudio2D2" type="Node" parent="." node_paths=PackedStringArray("data")]
script = ExtResource("1_6846p")
glsl_file = "res://examples/SolarleJcleS/systeme.cpp"
GLSL_code = "
// Usable variables
// ****************
Expand Down
4 changes: 2 additions & 2 deletions project.godot
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ config_version=5
[application]

config/name="compute_shader_studio"
run/main_scene="res://examples/example_1.tscn"
config/features=PackedStringArray("4.4", "Forward Plus")
run/main_scene="res://examples/basic_examples/example_5.tscn"
config/features=PackedStringArray("4.2", "Forward Plus")
config/icon="res://addons/compute_shader_studio/icon.png"

[editor_plugins]
Expand Down