Animation 使用哪个处理库来创建同时运行的渲染

Animation 使用哪个处理库来创建同时运行的渲染,animation,processing,Animation,Processing,我最近正在研究processing(),并希望找出是否有一个库可以帮助我创建两个不同的窗口来渲染同一场景的两个视图。还有什么方法可以直接从一个窗口切换到另一个窗口。我不知道是否存在这样的库进行处理,但是您可以使用以下基于 然后,可以在每个窗口中基于公共数据源和方法创建图形。 我不是专家,但我希望这能帮助你开始你的项目 请注意,GUI库(如)也支持创建多个窗口 编辑:注释相关代码: //...// int x=50; void draw () { rect(width/2,0,x,x); s.re

我最近正在研究processing(),并希望找出是否有一个库可以帮助我创建两个不同的窗口来渲染同一场景的两个视图。还有什么方法可以直接从一个窗口切换到另一个窗口。

我不知道是否存在这样的库进行处理,但是您可以使用以下基于

然后,可以在每个窗口中基于公共数据源和方法创建图形。 我不是专家,但我希望这能帮助你开始你的项目

请注意,GUI库(如)也支持创建多个窗口

编辑:注释相关代码:

//...//
int x=50;
void draw () {
rect(width/2,0,x,x);
s.rect(s.width/2,0,x+10,x+10);
}
//...//

下面是一个简单的例子:

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.*;

ImagePanel view2;
PImage viewport2 = new PImage(400,400,RGB);

void setup(){
  size(800,400,P3D);
  noStroke();

  frame.setSize(400,400);
  frame.setTitle("view 1");

  view2 = new ImagePanel((BufferedImage)viewport2.getNative());
  JFrame v2 = new JFrame("view 2");
  v2.setSize(400,400);
  v2.add(view2);
  v2.show();
}
void draw(){
  background(0);
  lights();
  //view1
  pushMatrix();
    translate(200,200,0);
    rotateX(45);
    rotateY(map(mouseX,0,height,-PI,PI));
    renderScene();
  popMatrix();
  //view2
  pushMatrix();
  translate(600,200,0);
  rotateY(45);
  rotateX(map(mouseX,0,height,-PI,PI));
  renderScene();
  popMatrix();
  viewport2 = get(400,0,400,400);//fetch a screenshot from the invisible side (right side);
  view2.setImage((BufferedImage)viewport2.getNative());
}
void renderScene(){
  pushMatrix();
  box(100);//and other elements here
  popMatrix();
}

public class ImagePanel extends JPanel{

    private BufferedImage image;

    public ImagePanel(BufferedImage img) {
       setImage(img);
    }
    public void setImage(BufferedImage img){
      image = img;
      this.repaint();
    }
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, null);        
    }

}
有三件事要看:

  • 生成单独的视图-请注意,草图大小实际上是原来的两倍,我使用push/pop调用隔离变换并渲染相同的数据。您也可以随意使用
    camera()
    perspective()
    功能
  • 生成帧。注意,处理使用java.awt.Frame,我使用
    Frame.setSize()
    调整它的大小,并扩展一个JPanel,以便可以在图形对象中绘制
  • 更新图像:我正在使用get(x,y,width,height)在绘制/渲染循环结束时获取渲染场景的快照图像。提供一个
    getNative()
    方法,该方法返回BuffereImage表示形式。可以将其绘制到java.awt.Graphics实例中。我告诉自定义JPanel组件重新绘制以更新像素

  • 这种方法有点老套,但您使用的是相同的草图和相同的变量,而不是两个PApplet实例。

    哦,谢谢。但是我有一个关于公共变量的疑问,我想要一种可以在两个draw函数中访问的变量。但当我尝试这样做时,所发生的是两个渲染都发生在同一个窗口中,并且具有可视结果。您可以在一个绘制方法中管理两个窗口(请参见编辑后的答案)。这不是最有效的方法,但到目前为止,我还不太清楚。实际的Java程序员可以为您提供更详细的解决方案。
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import javax.swing.*;
    
    ImagePanel view2;
    PImage viewport2 = new PImage(400,400,RGB);
    
    void setup(){
      size(800,400,P3D);
      noStroke();
    
      frame.setSize(400,400);
      frame.setTitle("view 1");
    
      view2 = new ImagePanel((BufferedImage)viewport2.getNative());
      JFrame v2 = new JFrame("view 2");
      v2.setSize(400,400);
      v2.add(view2);
      v2.show();
    }
    void draw(){
      background(0);
      lights();
      //view1
      pushMatrix();
        translate(200,200,0);
        rotateX(45);
        rotateY(map(mouseX,0,height,-PI,PI));
        renderScene();
      popMatrix();
      //view2
      pushMatrix();
      translate(600,200,0);
      rotateY(45);
      rotateX(map(mouseX,0,height,-PI,PI));
      renderScene();
      popMatrix();
      viewport2 = get(400,0,400,400);//fetch a screenshot from the invisible side (right side);
      view2.setImage((BufferedImage)viewport2.getNative());
    }
    void renderScene(){
      pushMatrix();
      box(100);//and other elements here
      popMatrix();
    }
    
    public class ImagePanel extends JPanel{
    
        private BufferedImage image;
    
        public ImagePanel(BufferedImage img) {
           setImage(img);
        }
        public void setImage(BufferedImage img){
          image = img;
          this.repaint();
        }
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, null);        
        }
    
    }