Gå til innhold

Er offscreen rendering med JOGL mulig?


Anbefalte innlegg

Eg prøver å få til offscreen rendering med JOGL.

 

Eg bruker eksempelet som finnes her: http://en.wikipedia.org/wiki/Java_OpenGL

 

Så har eg gjort nokre endringer i 2 metoder.

 

Den første er run metoden i JavaDia klassen:

 

public void run() 
 {
  GLCapabilities caps = new GLCapabilities();
  caps.setHardwareAccelerated(true);

  GLPbuffer offscreenPBuffer = GLDrawableFactory.getFactory().createGLPbuffer(caps, new DefaultGLCapabilitiesChooser(), 640, 480, null);
  offscreenPBuffer.addGLEventListener( new JavaRenderer() );
  offscreenPBuffer.display();

  offscreenPBuffer.removeGLEventListener(new JavaRenderer());
  offscreenPBuffer.destroy();
  System.exit(0);
 }

 

Så etter gl.glEnd(); i display metoden i JavaRenderer klassen så har eg lagt til dette.

 

gl.glReadBuffer(GL.GL_BACK);
	gl.glPixelStorei(GL.GL_PACK_ALIGNMENT, 1);

	int width = 640;
	int height = 480;
	ByteBuffer pixelsRGB = BufferUtil.newByteBuffer(640 * 480 * 3);

	gl.glReadPixels(0,				   // GLint x
			0,				   // GLint y
			640,				   // GLsizei width
			480,			 // GLsizei height
			GL.GL_RGB,			 // GLenum format
			GL.GL_UNSIGNED_BYTE,	   // GLenum type
			pixelsRGB);			 // GLvoid *pixels
	int[] pixelInts = new int[640 * 480];

	// Convert RGB bytes to ARGB ints with no transparency. Flip image vertically by reading the
	// rows of pixels in the byte buffer in reverse - (0,0) is at bottom left in OpenGL.

	int p = width * height * 3; // Points to first byte (red) in each row.
	int q;				  // Index into ByteBuffer
	int i = 0;				  // Index into target int[]
	int w3 = width * 3;		// Number of bytes in each row

	for (int row = 0; row < height; row++) {
		p -= w3;
		q = p;
		for (int col = 0; col < width; col++) {
			int iR = pixelsRGB.get(q++);
			int iG = pixelsRGB.get(q++);
			int iB = pixelsRGB.get(q++);

			pixelInts[i++] = 0xFF000000
					| ((iR & 0x000000FF) << 16)
					| ((iG & 0x000000FF) << 8)
					| (iB & 0x000000FF);
		}
	}

	BufferedImage bufferedImage =
			new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

	bufferedImage.setRGB(0, 0, width, height, pixelInts, 0, width);

	//rotateT += 0.2f;
	try
	{
	  File file =new File("test.png");
	  javax.imageio.ImageIO.write(bufferedImage, "PNG", file);
	}
	catch (Exception e)
	{}

 

Alt eg får er ein svart bakgrunn. Det eg ikkje heilt forstår er det der med bufferedImage.setRGB() Den fungerer liksom ikkje....

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...