We are about to switch to a new forum software. Until then we have removed the registration on this forum.
Here is an example where I create a set of povray files to render a processing "sketch" as a povray "scene". I start the povray program from the processing sketch (line 83) and wait for it to complete (line 85), before displaying the raytraced image in the sketch window. I just thought someone else might find this approach useful. Also I redirect the povray output to the processing console see line 81. See my modified supercad library here. Works with processing-2.1.0.
import java.util.logging.Level;
import java.util.logging.Logger;
import supercad2.Mode;
import supercad2.Status;
import supercad2.*;
Mode cad;
Status status;
void setup() {
size(800, 600, P3D);
status = Status.START;
}
void draw() {
if (status == Status.TRACED) {
PImage img = loadImage(System.getProperty("user.home") + File.separator + "output.png");
background(img);
}
else {
if (status == Status.RECORD) {
beginRaw("supercad2." + cad.className, "output." + cad.ext);
status = Status.RECORDING;
}
fTest();
if (status == Status.RECORDING) {
endRaw();
status = Status.RECORDED;
}
}
}
void configureLights() {
lights();
ambientLight(100, 100, 100);
directionalLight(5, 0, 0, -1, -1, -1); // colored directional
directionalLight(0, 0, 5, 1, -1, -1); // lights essential
directionalLight(5, 5, 0, 1, 1, 1); // for 3D illusion
}
PVector midPoint(PVector a, PVector b) {
PVector result = PVector.add(a, b);
result.div(2);
return result;
}
void fTest() { // encapsulate initial processing sketch in a function
translate(width / 2, height / 2, -width / 3);
background(0);
configureLights();
rotateY(QUARTER_PI);
fill(255, 0, 0);
translate(0, -60, 0);
box(120);
translate(0, -120, 0);
box(120);
translate(120, 0, 0);
box(120);
translate(-120, -120, 0);
box(120);
translate(0, -120, 0);
box(120);
translate(120, 0, 0);
box(120);
}
void keyPressed() {
switch (key) {
case 'p':
cad = Mode.POVRAY2;
status = Status.RECORD;
break;
case 't': // start povray
if (status == Status.RECORDED) {
String[] ini = {"/usr/bin/povray", sketchPath("output.ini")};
ProcessBuilder pb = new ProcessBuilder(ini);
Process povray;
pb.inheritIO();
try {
povray = pb.start();
status = Status.TRACING;
if (status == Status.TRACING && povray.waitFor() == 0) {
status = Status.TRACED;
}
}
catch (IOException ex) {
Logger.getLogger(ftest.class.getName()).log(Level.SEVERE, null, ex);
}
catch (InterruptedException ex) {
Logger.getLogger(ftest.class.getName()).log(Level.SEVERE, null, ex);
}
}
break;
}
}