我怎样才能实现noSmooth()与P3D渲染?(How can I achieve noSmoot

2019-09-30 14:15发布

我想呈现基本的3D形状没有任何走样/与使用P3D渲染器PGraphics实例平滑,但noSmooth()似乎并没有工作。

在我还记得打电话setTextureMinMagFilter(GL_NEAREST,GL_NEAREST); 在纹理。

什么是等值处理?

我试图用PGL :

PGL.TEXTURE_MIN_FILTER = PGL.NEAREST;
PGL.TEXTURE_MAG_FILTER = PGL.NEAREST;

但我得到一个黑色的图像作为结果。 如果我评论PGL.TEXTURE_MIN_FILTER = PGL.NEAREST; 我能看到回报,但它插,不锋利。

Here'a基本测试草图有几件事我已经试过:

PGraphics buffer;
PGraphicsOpenGL pgl;

void setup() {
  size(320, 240, P3D);
  noSmooth();
  //hint(DISABLE_TEXTURE_MIPMAPS);

  //((PGraphicsOpenGL)g).textureSampling(0);

  //PGL pgl = beginPGL();
  //PGL.TEXTURE_MIN_FILTER = PGL.NEAREST;
  //PGL.TEXTURE_MAG_FILTER = PGL.NEAREST;
  //endPGL();

  buffer=createGraphics(width/8, height/8, P3D);
  buffer.noSmooth();
  buffer.beginDraw();
  //buffer.hint(DISABLE_TEXTURE_MIPMAPS);
  //((PGraphicsOpenGL)buffer).textureSampling(0);
  PGL bpgl = buffer.beginPGL();
  //PGL.TEXTURE_MIN_FILTER = PGL.NEAREST;//commenting this back in results in a blank buffer
  PGL.TEXTURE_MAG_FILTER = PGL.NEAREST;
  buffer.endPGL();
  buffer.background(0);
  buffer.stroke(255);
  buffer.line(0, 0, buffer.width, buffer.height);
  buffer.endDraw();
}
void draw() {

  image(buffer, 0, 0, width, height);
}

(我也贴在加工论坛 ,但至今没有运气)

Answer 1:

实际上,你在正确的轨道上。 你只是在传递错误的价值textureSampling()

由于在文档PGraphicsOpenGL::textureSampling()是有点稀缺的,至少可以说。 我决定到峰值到它使用反编译器,它使我Texture::usingMipmaps() 在那里,我能看到(在反编译的代码)的价值和他们反映。

2 = POINT
3 = LINEAR
4 = BILINEAR
5 = TRILINEAR

PGraphicsOpenGL的默认textureSampling5 (三线性)。

后来我也发现这个旧的评论的问题也同样证实了它。

所以,让你只需要调用点/最近过滤noSmooth()上的应用程序本身,并调用textureSampling()在你的PGraphics

size(320, 240, P3D);
noSmooth();

buffer = createGraphics(width/8, height/8, P3D);
((PGraphicsOpenGL) buffer).textureSampling(2);

因此,考虑到上述情况,并且只包括你用来画线的代码和绘图buffer到应用程序。 然后,让下面的期望的结果。



文章来源: How can I achieve noSmooth() with the P3D renderer?