Gå til innhold

Er offscreen rendering med JOGL mulig?


Anbefalte innlegg

Skrevet

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....

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...