使用处理对两台投影机进行多次渲染(基于偏振的3D)

时间:2013-12-23 05:09:28

标签: processing parallax projector anaglyph-3d

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

2 个答案:

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

    中看到代码示例