2

我想在我们的大学里设置一个 3D 装置,为此,我想知道,我是否可以在处理中设置两个眼距分离的摄像机,并分别渲染一到两台不同的投影仪,这样,我可以通过混合这些输出极化它们并实现 3D 效果。

4

2 回答 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. 简单地隔离绘图命令/坐标空间
  2. 使用不同的渲染层

方法 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 回答