/** * this demo shows how to use a processing sketch as a texture on a 3D object. */ import gestalt.Gestalt; import gestalt.candidates.JoglFrameBufferCopy; import gestalt.p5.GestaltPlugIn; import gestalt.shape.Cube; import gestalt.shape.Plane; import gestalt.shape.TransformNode; import gestalt.shape.material.TexturePlugin; import gestalt.texture.bitmap.IntegerBitmap; import gestalt.util.CameraMover; import processing.opengl.*; GestaltPlugIn gestalt; Plane _myScreen; Cube _myBox; TransformNode _myNode; void setup() { /* setup p5 */ size(640, 480, OPENGL); rectMode(CENTER); gestalt = new GestaltPlugIn(this); /* * keep gestalt from clearing any buffers. * we do this after we copied the framebuffer into a texture */ gestalt.framesetup().depthbufferclearing = false; gestalt.framesetup().colorbufferclearing = false; /* create an empty dummy bitmap */ TexturePlugin myTexture = gestalt.drawablefactory().texture(); myTexture.load(IntegerBitmap.getDefaultImageBitmap(width, height)); /* create a plane to display our texture */ _myNode = gestalt.drawablefactory().transformnode(); gestalt.bin(Gestalt.BIN_3D).add(_myNode); _myScreen = gestalt.drawablefactory().plane(); _myScreen.position().z = 200 + 1; _myScreen.rotation().x = PI; _myScreen.material().addPlugin(myTexture); _myScreen.material().transparent = false; _myScreen.scale().set(width / 2, height / 2); _myNode.add(_myScreen); _myBox = gestalt.drawablefactory().cube(); _myBox.scale().set(_myScreen.scale()); _myBox.scale().z = 200; _myBox.position().z = 100; _myBox.material().getColor().set(1, 1, 1); _myBox.material().transparent = false; _myNode.add(_myBox); /* create a screengrabber */ JoglFrameBufferCopy myFrameBufferCopy = new JoglFrameBufferCopy(myTexture); myFrameBufferCopy.backgroundcolor.set(0.2f, 1); myFrameBufferCopy.width = width; myFrameBufferCopy.height = height; gestalt.bin(Gestalt.BIN_3D_SETUP).add(myFrameBufferCopy); /* camera */ gestalt.camera().setMode(Gestalt.CAMERA_MODE_LOOK_AT); gestalt.camera().upvector.set(0, 0, 1); gestalt.camera().position().set( -400, 0, 480); } void draw() { /* clear screen */ background(127, 255, 0); /* draw processing stuff */ fill(255, 255); stroke(0, 255); strokeWeight(20); rect(mouseX, mouseY, 200, 200); /* gestalt camera */ CameraMover.handleKeyEvent(gestalt.camera(), gestalt.event(), 1 / 50f); /* rotate gestalt canvas */ _myNode.rotation().z += -0.0024f; }