我想在我们的大学里设置一个 3D 装置,为此,我想知道,我是否可以在处理中设置两个眼距分离的摄像机,并分别渲染一到两台不同的投影仪,这样,我可以通过混合这些输出极化它们并实现 3D 效果。
问问题
439 次
2 回答
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();
}
}
于 2013-12-23T05:23:42.517 回答
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实例
如果你想分隔窗口,你可以在这个答案中看到一个代码示例
于 2013-12-24T02:09:26.967 回答