Jak wypełnić rect gradientem?

0

Witam,
próbuję coś robić w JS korzystając z biblioteki P5. Mam kanwę o rozmiarach 800px x 600px. Przedzieliłem ją na pół dwoma prostokątami. Chciałbym 1 i 2 prostokąt wypełnić dwoma różnymi gradientami (określonymi kolorystycznie przeze mnie). W necie znalazłem pewną funkcję, ale ona nie wypełnia 1 i 2 prostokąta. Wypełnia kanwę w zależności jakie się poda parametry, m.in. dot. for-a. Ogólnie są dwie funkcje o dwóch trochę różnych parametrach. Jednak zrozumiałem, że ten gradient "nie przykleja" się do prostokąta. On po prostu działa sobie niezależnie od tych rect.

fill(setGradient1(c1, c2)); - myślałem, że tak można wywołać funkcję i wypełnić wynikiem działania tej funkcji prostokąt, ale chyba tak to nie działa :(

Być może jest jakieś prostsze rozwiązanie, by wypełnić prostokąt 1 i 2 gradientem..?

Czy mógłby ktoś z Was napisać mi jak to zrobić? Podać kod itp? Z góry serdecznie dziękuję.

PLIK INDEX.HTML

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="p5.js"></script>
	
	
</head>
<body>
	<script type="text/javascript" src="script.js"></script>
</body>
</html>

PLIK SCRIPT.JS

var c1, c2;
var c3, c4;


function setup()
{
	createCanvas(800, 600);
	background(255);
	//noStroke();
	
	c2 = color(42, 116, 227);
  	c1 = color(255);
	
	c3 = color(255);
	c4 = color(255, 0, 0);
 }


function draw()
{
	fill(setGradient1(c1, c2));	
	rect(0, 0, width, height / 2);                          //górny prostokąt	
	

	fill(setGradient2(c3, c4));	
	rect(0, 350, width, height);	      		   //dolny prostokąt
}


function setGradient1(c1, c2) 
{
	// noprotect
	//noFill();
	for (var y = 0; y < height / 2; y++) 
	{
		var inter = map(y, 0, height / 2, 0, 1);
		var c = lerpColor(c1, c2, inter);
		stroke(c);		
		line(0, y, width, y);
  }
}




function setGradient2(c3, c4) 
{
	// noprotect
	noFill();
	for (var y = 300; y < 600; y++) 
	{
		var inter = map(y, 0, height, 0, 1);
		var c = lerpColor(c3, c4, inter);
		stroke(c);
		line(0, y, width, y);
  }
}
0

Ale w zasadzie, to po co ci tu te p5.js?

Rysowanie na kanwach obsługują dość proste polecenia:
https://www.w3schools.com/tags/canvas_fill.asp
https://www.w3schools.com/graphics/canvas_gradients.asp

0
Freja Draco napisał(a):

Ale w zasadzie, to po co ci tu te p5.js?

Rysowanie na kanwach obsługują dość proste polecenia:
https://www.w3schools.com/tags/canvas_fill.asp
https://www.w3schools.com/graphics/canvas_gradients.asp

A nie da się tego zrobić za pomocą P5?

1
karteggg napisał(a):

A nie da się tego zrobić za pomocą P5?

Nie znam p5, nie wiem.
A dlaczego chcesz to robić za pomocą p5?

0
Freja Draco napisał(a):
karteggg napisał(a):

A nie da się tego zrobić za pomocą P5?

Nie znam p5, nie wiem.
A dlaczego chcesz to robić za pomocą p5?

Bo muszę coś zrobić na zaliczenie w tym P5, a nie wiem czy mogę użyć tego:
https://www.w3schools.com/graphics/canvas_gradients.asp

I ogólnie nie wiem czy na tym czymś z tego linku można ustawiać inne elementy graficzne z P5.

0
Freja Draco napisał(a):
karteggg napisał(a):

A nie da się tego zrobić za pomocą P5?

Nie znam p5, nie wiem.
A dlaczego chcesz to robić za pomocą p5?

To musi być na kanwie z P5.

Jeżeli dobrze rozumiem, to:
https://www.w3schools.com/graphics/canvas_gradients.asp

to jest na kanwie chyba z HTML-a 5 + JS

0

No to przejrzyj sobie dokumentację p5.js i działaj:
https://p5js.org/examples/color-linear-gradient.html

0
Freja Draco napisał(a):

No to przejrzyj sobie dokumentację p5.js i działaj:
https://p5js.org/examples/color-linear-gradient.html

Już to zrobiłem, nie znalazłem tam odpowiedz na mój problem. Na tym linku również byłem. Zatem nie wiem jak to zrobić.

0
karteggg napisał(a):

Już to zrobiłem, nie znalazłem tam odpowiedz na mój problem. Na tym linku również byłem. Zatem nie wiem jak to zrobić.

Robota programisty w dużej mierze polega właśnie na wyszukiwaniu sposobów rozwiązywania problemów, oraz wymyślaniu sposobów na to, żeby zrobić coś, czego "się nie da zrobić".

1 użytkowników online, w tym zalogowanych: 0, gości: 1