首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PGraphics + noSmooth() + alpha =绘制工件

PGraphics + noSmooth() + alpha =绘制工件
EN

Stack Overflow用户
提问于 2019-01-28 18:36:05
回答 1查看 143关注 0票数 2

注意:,我在这里处理论坛上也问了这个问题。

我有一个示例代码:

代码语言:javascript
复制
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.point()调用替换为pg.ellipse()pg.rect(),那么它也可以正常工作。

使用PGraphicsnoSmooth()函数、point()函数和alpha值的组合似乎会导致这种错误行为。我尝试过处理3.3和3.5.2,在这两个过程中我都看到了相同的行为。

我漏掉了什么明显的东西吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-29 11:36:06

经过一小段时间的挖掘,JAVA2D呈现器绘制了一个点为对角线(line(x, y, x + EPSILON, y + EPSILON);),它具有非常的very 小间距 (static final float EPSILON = 0.0001f;)。我猜想这种特殊的配置,缺乏混叠可能意味着这条对角线的两个点在同一像素上,最终不会呈现在右上角区域。为什么这个区域,为什么这么小的距离,我不知道,但这听起来有点像头痛的雅库布·瓦尔塔和安德烈斯库布里不得不处理。

FWIW这里有一个麻烦的解决方法:使用更大的距离,使用透明和不混叠的方式呈现:

代码语言:javascript
复制
PGraphics pg;

void setup() {
  size(400, 500);
  noSmooth();

  pg = createGraphics(width/20, height/20);
  pg.beginDraw();
  // just for debug purposes: rectangle with edge
  pg.fill(0, 0, 255);
  pg.rect(0,0,pg.width-1,pg.height-1);
  pg.stroke(255,255,255, 128);
  pg.endDraw();

}

void pointNoSmooth(PGraphics pg, float x,float y){
  pg.beginShape();
  pg.vertex(x,y);
  pg.vertex(x + 0.75,y);//any less than 0.75 distance between vertices and there's nothing to render with aliasing
  pg.endShape();
}

void draw() {
  background(255);
  if (mousePressed) {
    pg.beginDraw();
    pointNoSmooth(pg,mouseX,mouseY);
    pg.endDraw();
  }
  // render upscaled
  image(pg, 0, 0, width, height);
  // render small preview in TL corner
  image(pg,0,0);
}

请注意,我已将PGraphics分辨率设置为小20倍,然后将其向上绘制,以便更容易地查看像素在PGraphics上的位置。不过,我并不是在缩放mouseX,mouseY坐标,所以在测试时,您需要绘制小的左上角预览图。0.75距离起了作用:根据我的测试,任何比0.7499995更小的东西都会再次出现问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54408259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档