我想在我们学院设置一个3D装置,为此,我想知道,我是否可以在处理过程中设置两个眼距离的摄像机,并将每个摄像机渲染到两个不同的投影仪,这样,我就可以混合这些输出通过极化它们并实现3d效果。
答案 0 :(得分:1)
您可以通过创建PApplet的实例并将其添加到新的JFrame窗口来打开第二个处理窗口。下面的示例创建一个简单的草图,它打开两个窗口,并在其中一个窗口中绘制一个稍微向左移动的圆,在第二个窗口中向右移动。这些窗口可以放在不同的投影仪上
import javax.swing.JFrame;
PFrame f;
void setup () {
size(300,300);
PFrame f = new PFrame();
}
void draw() {
background(0);
ellipse(140,150,100,100);
}
public class Second extends PApplet {
public void setup() {
size(300,300);
}
public void draw() {
background(0);
ellipse(160,150,100,100);
}
}
public class PFrame extends JFrame {
public PFrame() {
setBounds(0,0,300,300);
Second s = new Second();
add(s);
s.init();
show();
}
}
答案 1 :(得分:0)
我有一些从简单到复杂的想法:
方法1:简单地使用pushMatrix() / popMatrix()调用将左侧与右侧视点隔离,可能使用perspective()投影的不同值
这是一个非常粗略的例子来说明这个想法:
void setup(){
size(200,100,P3D);
noFill();
}
void draw(){
background(255);
stroke(255,0,0);
//view 1
pushMatrix();
camera(70.0, 0.0, 200.0, 50.0, 50.0, 0.0, 0.0, 1.0, 0.0);
drawBox();
popMatrix();
stroke(0,0,255);
//view 2
pushMatrix();
camera(90.0, 0.0, 200.0, 50.0, 50.0, 0.0, 0.0, 1.0, 0.0);
translate(100,0,0);//move everything to the right
drawBox();
popMatrix();
}
void drawBox(){
pushMatrix();
rotateY(map(mouseX,0,width,-PI,PI));
box(50);
popMatrix();
}
方法2:您可以将值/数字更新与绘图代码分开,并在同一帧中绘制两次,但可以使用PGraphics实例绘制到单独的“层”中
如果您想要分隔窗口,可以在this answer
中看到代码示例