2017-03-28 14 views
1

P3D 렌더러를 사용하여 PGraphics 인스턴스에서 앨리어싱/스무딩없이 기본 3D 도형을 렌더링하고 싶지만 noSmooth()가 작동하지 않는 것 같습니다.P3D 렌더러에서 noSmooth()를 어떻게 얻을 수 있습니까?

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; 나는 렌더를 볼 수는 있지만 보간 된 것이지 예리한 것은 아니다. 내가 시도한 몇 가지와

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); 
} 

(나는 또한 posted on the Processing Forum했지만, 지금까지 운)

+1

그때 제대로 기억한다면'buffer.noSmooth()'의도 한대로 수행합니다. 그러나'image()'를 호출하면'noSmooth()'가 완전히 무시됩니다. – Vallentin

+0

@Vallentin 팁 주셔서 감사. 내 직감은 아마도 PGL 텍스처에 대한 참조를 가져와 바인드하고,''''pgl.getTexParameteriv (PGL.TEXTURE_2D, PGL.TEXTURE_MIN_FILTER ...'''또는 이와 비슷한 것을 호출 할 필요가 있습니다. –

답변

2

당신은 바른 길에 실제로 없었다 . 잘못된 값을 textureSampling()으로 전달 중입니다.

PGraphicsOpenGL::textureSampling() 에 대한 문서는 거의 말하기 어렵습니다. 디 컴파일러를 사용하여 절정에 달하기로 결정했는데, Texture::usingMipmaps()이되었습니다. 거기에 값과 반영된 내용 (디 컴파일 된 코드에서)을 볼 수있었습니다. PGraphicsOpenGL의 기본 textureSampling5 (삼선)입니다

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

.

나중에도 this old comment on an issue이 동등하게 확인되었다.

포인트/가장 가까운 필터링을 받으려면 응용 프로그램 자체에서 noSmooth()으로 전화하면 PGraphicstextureSampling()으로 전화하면됩니다.

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

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

그래서 위를 고려하고, 단지 당신이 선을 그어야하는 데 사용되는 코드를 포함하고 응용 프로그램에 buffer 그리기. 그러면 다음과 같은 결과가 나타납니다.

+1

또한 효과가없는'''beginDraw()'''다음에 textureSampling을 호출한다는 것을 알게되었습니다. –