【发布时间】:2019-01-28 18:36:05
【问题描述】:
注意:我也在处理论坛here上问过这个问题。
我有这个示例代码:
PGraphics pg;
void setup() {
size(400, 500);
pg = createGraphics(width, height);
pg.noSmooth();
pg.beginDraw();
pg.background(0, 0, 255);
pg.endDraw();
}
void draw() {
if (mousePressed) {
pg.beginDraw();
pg.stroke(255, 254);
pg.point(mouseX, mouseY);
pg.endDraw();
}
image(pg, 0, 0, width, height);
}
我希望这段代码在用户按下鼠标的任何地方都显示一个点。相反,我只能看到几个矩形区域中的点:
如果我删除了对pg.noSmooth() 的调用,或者如果我删除了pg.stroke() 调用中的alpha 值,那么它可以正常工作:
如果我用pg.ellipse() 或pg.rect() 替换pg.point() 调用,那么它也可以正常工作。
似乎使用PGraphics、noSmooth() 函数、point() 函数和 alpha 值的组合会导致这种错误行为。我在 Processing 3.3 和 Processing 3.5.2 中进行了尝试,我发现两者的行为相同。
我是否遗漏了一些明显的东西?
【问题讨论】:
-
看起来确实是 noSmooth() 导致了这个问题。 FAIK,对于 PGraphics,您应该在
beginDraw()endDraw()调用中调用它。可能是 Java2D 渲染器的错误 -
@GeorgeProfenza 嘿,乔治!有趣的是,如果我将调用
pg.noSmooth()移动到调用pg.beginDraw()之后,我会收到一条警告说smooth() can only be used before beginDraw()并且调用被忽略(一切仍然是抗锯齿的)。 -
Hey Kevin :) 关于
pg.noSmooth(),你是对的,我的错,反其道而行之。我得说这是个奇怪的错误。 -
@GeorgeProfenza 是的,docs 同意你的第一句话,
smooth()/noSmooth()应该在beginDraw()和endDraw()之间调用。这可能是文档过期的一个单独问题? -
FWIW,
P2D渲染器(((PGraphicsOpenGL) g).textureSampling(2);并据我所知FX2D渲染器doesn't have smooth 不会出现此问题?这似乎是与单独的 Java2D 渲染器
标签: processing pgraphics