我希望使用P3D渲染器渲染基本的3D形状而不使用PGraphics实例进行任何混叠/平滑,但noSmooth()似乎无法工作。
In OF我记得在纹理上调用setTextureMinMagFilter(GL_NEAREST,GL_NEAREST);
。
处理中的等价物是什么?
我尝试使用PGL:
PGL.TEXTURE_MIN_FILTER = PGL.NEAREST;
PGL.TEXTURE_MAG_FILTER = PGL.NEAREST;
但是我得到了一张黑色图片。
如果我发表评论PGL.TEXTURE_MIN_FILTER = PGL.NEAREST;
我可以看到渲染,但它是内插的,而不是锐利的。
这里是一个基本的测试草图,其中包含了我尝试过的一些内容:
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);
}
(我还posted on the Processing Forum,但到目前为止没有运气)
答案 0 :(得分:2)
你实际上是在正确的轨道上。您只是将错误的值传递给textureSampling()
。
自PGraphicsOpenGL::textureSampling()
上的文档以来
至少可以说有点稀缺。
我决定使用反编译器进入峰值,这引导我
Texture::usingMipmaps()
。
在那里,我能够看到价值观和反映的内容(在反编译代码中)。
2 = POINT
3 = LINEAR
4 = BILINEAR
5 = TRILINEAR
PGraphicsOpenGL
的默认textureSampling
为5
(TRILINEAR)。
我后来发现this old comment on an issue同样确认了它。
因此,要获得点/最近过滤,您只需在应用程序本身上调用noSmooth()
,然后在textureSampling()
上致电PGraphics
。
size(320, 240, P3D);
noSmooth();
buffer = createGraphics(width/8, height/8, P3D);
((PGraphicsOpenGL) buffer).textureSampling(2);
考虑到上述情况,并且仅包括用于绘制线条并将buffer
绘制到应用程序的代码。然后,这给出了以下期望的结果。