3

我在 OSX 和 Windows 上都使用处理 3(和 2)。离屏 PGraphics 缓冲区中的线性图形比直接绘制的线要丑得多。形状边缘的抗锯齿似乎效果不佳。

你能帮我把屏幕外缓冲区图形做得更好吗?

示例图像(右侧屏幕外丑,左侧屏幕上):

示例代码

PGraphics pg;

void setup(){
  size (1024,768, P2D);
  pixelDensity(2);
  smooth();
  pg = createGraphics(width, height, P2D);
  noLoop();
}

void draw(){
  background (0);
  pushMatrix();
  translate (width/2-100, height/2);
  rotate (PI/6);
  stroke(255);
  noFill();
  strokeWeight(0.5);
  rect (0,0,100,100);
  popMatrix();

  pg.beginDraw();
  pg.smooth();
  pg.clear();
  pg.translate (width/2+100, height/2);
  pg.rotate (PI/6);
  pg.stroke(255);
  pg.noFill();
  pg.strokeWeight(0.5);
  pg.rect (0,0,100,100);
  pg.endDraw();

  image(pg,0,0, width, height);

  save("shot.png");
}

谢谢!

此问题也已在此处的处理论坛中交叉发布。

4

1 回答 1

1

该问题是由处理默认启用抗锯齿引起的。您可以通过调用该smooth()函数显式启用它,但请注意这是无关紧要的,因为它已默认启用。

这会导致您的线条在它们自己的颜色和背景颜色之间“模糊”。在屏幕缓冲区中,该背景颜色为黑色。在离屏缓冲区中,该背景颜色是透明的。这就是为什么你的屏幕外方块看起来更透明——因为它是。

要解决此问题,您需要通过调用禁用抗锯齿noSmooth(),或者您需要确保绘制到相同的背景颜色。这是noSmooth()方法:

PGraphics pg;

void setup(){
  size (1024,768, P2D);
  noSmooth();
  pg = createGraphics(width, height, P2D);
  noLoop();
}

void draw(){
  background (0);
  pushMatrix();
  translate (width/2-100, height/2);
  rotate (PI/6);
  stroke(255);
  noFill();
  strokeWeight(0.5);
  rect (0,0,100,100);
  popMatrix();

  pg.beginDraw();
  pg.noSmooth();
  pg.clear();
  pg.translate (width/2+100, height/2);
  pg.rotate (PI/6);
  pg.stroke(255);
  pg.noFill();
  pg.strokeWeight(0.5);
  pg.rect (0,0,100,100);
  pg.endDraw();

  image(pg,0,0, width, height);

}

在此处输入图像描述

于 2015-11-03T13:15:10.653 回答