1
OpenGL에서 작업 할 때 JOGL을 사용하며 픽셀 색상을 얻을 수 없습니다. glReadPixels() 메서드는 항상 모두 0의 배열을 반환합니다. 나는 회색 색상으로 창을 작성하고 사용자가 어디서나 창에서 클릭하면 다음 결과를 테스트glReadPixels()은 0의 배열을 반환합니다.
private static GL2 gl;
static Color getPixel(final int x, final int y) {
ByteBuffer buffer = ByteBuffer.allocate(4);
gl.glReadBuffer(GL.GL_FRONT);
gl.glReadPixels(x, y, 1, 1, GL2.GL_RGB, GL2.GL_UNSIGNED_BYTE, buffer);
byte[] rgb = buffer.array();
return new Color(rgb[0], rgb[1], rgb[2]);
}
다시 그리기에합니다 (display()
방법) :
@Override
public void mouseClicked(MouseEvent e) {
// On mouse click..
for (int j = 0; j < this.getWidth(); ++j)
for (int i = 0; i < this.getHeight(); ++i) {
// ..I iterate through all pixels..
Color pxl = Algorithm.getPixel(j, i); //! pxl should be GRAY, but it is BLACK (0,0,0)
if (pxl.getRGB() != Color.BLACK.getRGB())
// ..and print to console only if a point color differs from BLACK
System.out.println("r:" + pxl.getRed() + " g:" + pxl.getGreen() + " b:" + pxl.getBlue());
}
}
내가 그것을 사용하는 방법
그러나 콘솔에는 출력이 없습니다. 필자는 이산 그래픽과 통합 그래픽에서 테스트 해 보았습니다. 결과는 동일했습니다.
내가 뭘 잘못하고 있는지 말해. 우연히 JOGL을 사용하고 glReadPixel() 메소드를 사용하는 프로그램이 있다면 작업 예제를 공유하십시오.
-1 [SSCCE (http://sscce.org/)까지 코드를 끓여 편집 : 예
는,이 방법으로는 OpenGL 컨텍스트를 사용하는 것이보다 정확 질문에. 무작위 Dropboxes 죽으면, 그래서 영원히입니다. – genpfault
@genpfault, 나는 코드를 SSCCE로 단축 한 후에 문제의 원인을 발견했다. 코드를 다시 업로드하고 작동중인 프로젝트로 대체해야합니까? – naXa
좋아요! 그것은 SSCCE가 굉장한 이유 중 하나입니다 :) 질문에 잘못된 SSCCE를 편집 한 다음 수정 된 SSCCE를 대답으로 편집해야합니다. – genpfault