p5.js webgl 多边形线关节解决方法?
p5.js webgl polygon line joints workaround?
关于在 p5.js WEBGL 模式下使用描边的自定义形状(使用 beginShape 函数):
在 WEBGL 模式下,lineJoint() 和 lineCap() 函数不可用。
这就是形状中的线条不能无缝连接的原因。
我尝试在我的自定义形状中使用轮廓来解决这个问题,但这也没有在 WEBGL 模式下实现。
还有其他方法可以让这些线路连接起来吗?
非常感谢!
Codepen 有问题:
https://codepen.io/sebastianwinter/pen/eYNNEEx?editors=1010
轮廓不工作
function setup() {
createCanvas(window.innerWidth, window.innerHeight, WEBGL);
}
function draw() {
let strokeSize = 20;
background(2,8,51);
smooth();
noFill();
strokeWeight(strokeSize);
stroke(255,255,255);
polygon(0, 0, 200, 7);
}
function polygon(x, y, radius, npoints) {
let angle = TWO_PI / npoints;
beginShape();
for (let a = 0; a < TWO_PI; a += angle) {
let sx = x + cos(a) * radius;
let sy = y + sin(a) * radius;
vertex(sx, sy);
}
/* not working:
beginContour();
for (let a = 0; a < TWO_PI; a += angle) {
let sx = x + cos(a) * (radius - strokeSize);
let sy = y + sin(a) * (radius - strokeSize);
vertex(sx, sy);
}
endContour();*/
endShape(CLOSE);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.10.2/p5.js"></script>
AFAIK p5.js' WEBGL
模式仍处于试验阶段,您在 2D 模式下习惯使用的一些功能仍然 in the works.
目前我可以建议一个 hacky 解决方法:使用内部形状,类似于 beginContour():
function setup() {
createCanvas(window.innerWidth, window.innerHeight, WEBGL);
}
function draw() {
let strokeSize = 20;
background(2,8,51);
smooth();
fill(255);
//strokeJoin(BEVEL);
//strokeWeight(1);
stroke(255,255,255);
polygon(0, 0, 200, 7, 0.85);
}
function polygon(x, y, radius, npoints, thicknessRatio) {
let angle = TWO_PI / npoints;
beginShape();
//CW
for (let a = 0; a <= TWO_PI; a += angle) {
let sx = x + cos(a) * radius;
let sy = y + sin(a) * radius;
vertex(sx, sy);
}
// beginContour();
// CCW
for (let a = TWO_PI; a >= 0; a -= angle) {
let sx = x + cos(a) * radius * thicknessRatio;
let sy = y + sin(a) * radius * thicknessRatio;
vertex(sx, sy);
}
// endContour();
endShape(CLOSE);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.10.2/p5.min.js"></script>
关于在 p5.js WEBGL 模式下使用描边的自定义形状(使用 beginShape 函数): 在 WEBGL 模式下,lineJoint() 和 lineCap() 函数不可用。 这就是形状中的线条不能无缝连接的原因。 我尝试在我的自定义形状中使用轮廓来解决这个问题,但这也没有在 WEBGL 模式下实现。
还有其他方法可以让这些线路连接起来吗?
非常感谢!
Codepen 有问题: https://codepen.io/sebastianwinter/pen/eYNNEEx?editors=1010
轮廓不工作
function setup() {
createCanvas(window.innerWidth, window.innerHeight, WEBGL);
}
function draw() {
let strokeSize = 20;
background(2,8,51);
smooth();
noFill();
strokeWeight(strokeSize);
stroke(255,255,255);
polygon(0, 0, 200, 7);
}
function polygon(x, y, radius, npoints) {
let angle = TWO_PI / npoints;
beginShape();
for (let a = 0; a < TWO_PI; a += angle) {
let sx = x + cos(a) * radius;
let sy = y + sin(a) * radius;
vertex(sx, sy);
}
/* not working:
beginContour();
for (let a = 0; a < TWO_PI; a += angle) {
let sx = x + cos(a) * (radius - strokeSize);
let sy = y + sin(a) * (radius - strokeSize);
vertex(sx, sy);
}
endContour();*/
endShape(CLOSE);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.10.2/p5.js"></script>
AFAIK p5.js' WEBGL
模式仍处于试验阶段,您在 2D 模式下习惯使用的一些功能仍然 in the works.
目前我可以建议一个 hacky 解决方法:使用内部形状,类似于 beginContour():
function setup() {
createCanvas(window.innerWidth, window.innerHeight, WEBGL);
}
function draw() {
let strokeSize = 20;
background(2,8,51);
smooth();
fill(255);
//strokeJoin(BEVEL);
//strokeWeight(1);
stroke(255,255,255);
polygon(0, 0, 200, 7, 0.85);
}
function polygon(x, y, radius, npoints, thicknessRatio) {
let angle = TWO_PI / npoints;
beginShape();
//CW
for (let a = 0; a <= TWO_PI; a += angle) {
let sx = x + cos(a) * radius;
let sy = y + sin(a) * radius;
vertex(sx, sy);
}
// beginContour();
// CCW
for (let a = TWO_PI; a >= 0; a -= angle) {
let sx = x + cos(a) * radius * thicknessRatio;
let sy = y + sin(a) * radius * thicknessRatio;
vertex(sx, sy);
}
// endContour();
endShape(CLOSE);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.10.2/p5.min.js"></script>